Меня регулярно спрашивают одно и то же: «У вас робот под Мосбиржу, а под мой рынок будет?»
Раньше я отвечал уклончиво. Теперь отвечаю: будет, и вот почему.
На этой неделе я добавил в свою систему форекс. Не переписал стратегию, не завёл второго робота — добавил шлюз к MetaTrader 5. Торговая логика не поменялась ни на строчку.
И это, по-моему, самое интересное во всей истории. Потому что рынок, если смотреть со стороны кода, — всего лишь способ доставить заявку.
Что было до этогоСистема торгует фьючерсами на Мосбирже через QUIK и бессрочными контрактами на Bybit. Два разных мира: в одном терминал стоит на машине клиента и заявки идут через него, в другом биржевой API принимает запросы напрямую по ключу.
Когда я делал второй коннектор, стало понятно простое: стратегия про рынок знать ничего не должна. Сетке всё равно, что она торгует. Ей нужны цена, возможность поставить заявку и ответ, что заявка исполнилась. Остальное — детали доставки.
Поэтому доступ к рынку вынесен в отдельный слой. Ядро говорит «поставить лимитную заявку на такой-то уровень», а как это сделать — забота шлюза: через QLua в QUIK, через REST на криптобирже или через терминал MT5.
Звучит как банальность из учебника по архитектуре. Но пока не попробуешь перенести систему на третий рынок, не узнаешь, честно ли у тебя разделены слои. У меня, к счастью, оказалось честно: ядро я не трогал.
Как устроен шлюзСо шлюзом к QUIK схема такая. Робот работает на сервере. Рыночные данные он берёт сам — по фьючерсам Мосбиржи их отдаёт ISS, терминал для этого не нужен. А вот заявки идут в терминал клиента: на его машине работает служба, которая принимает команды от сервера и передаёт их в QUIK, а обратно отдаёт подтверждения, состояние заявок и позиций.
Ключевая деталь: терминал остаётся у клиента. Робот не подключается к брокеру от своего имени, не знает паролей от личного кабинета и ничего вывести не может. Он умеет ровно то, что умеет торговый интерфейс терминала: ставить и снимать заявки, читать позиции.
Со шлюзом к MT5 принцип ровно тот же: служба на машине клиента принимает команды от сервера и передаёт их в терминал, обратно идут подтверждения, состояние заявок и позиций. Меняется только то, как служба разговаривает с конкретным терминалом. Схема, зона ответственности и ограничения остаются прежними — и это, собственно, и значит, что рынок добавляется шлюзом, а не переделкой системы.
Поэтому добавление рынка — это работа по шлюзу, а не по стратегии. На форекс у меня ушло несколько дней, и почти всё это время заняли проверки: что заявка встала там, где просили, что частичное исполнение разобрано правильно, что после обрыва связи состояние сверяется, а не додумывается.
Что на форексе оказалось другимЛогика переносится, экономика — нет. Сетку на форексе ждут три вещи, которых нет на ФОРТС.
Своп. Сетка по своей природе держит позиции, иногда долго. На фьючерсе стоимость переноса зашита в цену контракта: купил дальний контракт — заплатил контанго сразу. На форексе вам начисляют своп каждую ночь, у каждой пары он свой, а по некоторым он ещё и разный по знаку в зависимости от стороны. Для стратегии, которая живёт неделями, это не мелочь, а отдельная статья расходов, которую надо считать до запуска.
Плечо. На форексе оно щедрее, и это ровно та щедрость, которая убивает сетку. Сетка набирает максимальный объём именно тогда, когда рынок идёт против неё — то есть когда её исходная гипотеза уже не подтвердилась. Чем легче набрать объём, тем быстрее это кончится margin call. Ограничение числа живых уровней и потолок суммарного объёма на форексе важнее, чем на фьючерсах.
Контрагент. На бирже заявка попадает в общий стакан, и исполнение не зависит от того, как к вам относится брокер. На форексе исполнение зависит от устройства конкретного брокера. Это не повод для спора о рынке — это фактор, который либо учитывают в расчётах, либо потом удивляются расхождению бэктеста с реальностью.
Поэтому параметры с фьючерсов я не переносил один в один и не собираюсь. Шаг сетки, ограничение объёма и правила выхода для валютных пар считаются заново, и считаются на демо-счёте.
Как подключиться, если захотите попробоватьПорядок такой же, как с QUIK, только вместо него MT5.
1. Счёт. Любой брокер, у которого есть MetaTrader 5. Начинать лучше с демо-счёта: он даёт настоящие котировки и настоящее исполнение по правилам брокера, но без денег.
2. Терминал. Установить MT5, войти в счёт, разрешить автоматическую торговлю в настройках терминала. Терминал должен быть запущен, пока работают боты, — это ограничение схемы, и оно честное: закрыли терминал, связь с сервером потеряна, заявки не уходят.
3. Связь с сервером. На машину с терминалом ставится служба-шлюз — та же схема, что и в варианте с QUIK: она принимает команды от сервера и передаёт их терминалу. Параметры подключения выдаются при настройке; ключей от личного кабинета и паролей брокера служба не знает и не запрашивает.
4. Бот. В системе создаётся бот на один инструмент: пара, шаг сетки, объём уровня, ограничение числа живых заявок, правила выхода. Один бот — один инструмент; несколько ботов собираются в портфель, и статистика считается и по каждому, и по портфелю.
5. Проверка на истории. До запуска стоит прогнать параметры в бэктесте — по инструменту и по портфелю. Это не гарантия, а способ отсеять заведомо нерабочие настройки.
6. Запуск. Бот стартует, заявки уходят в ваш терминал, сделки и позиции видны и в терминале, и в системе. Деньги всё это время лежат на вашем счёте у вашего брокера.
Отдельно повторю то, что обычно спрашивают первым. Робот работает через торговый интерфейс терминала. Вывести деньги по такому каналу нельзя. Но набрать плечо и создать обязательства перед брокером — можно, как и любым другим способом торговли. Поэтому лимит объёма и ограничение числа уровней в настройках бота — не украшение, а обязательная часть, и выставлять их надо до запуска, а не после.
Счёт запущен только что: заведены четыре пары — EURUSD, GBPUSD, EURGBP и USDJPY, прошли первые сделки, кривая доходности начинается буквально сегодня. Это демо: денег в нём нет, и задача у него одна — набрать статистику на живых котировках, а не нарисовать красивый график.
Счёт публичный, как и два других: фьючерсы Мосбиржи и крипта на Bybit. На крипто-счёте сейчас минус, и я его не прячу. Человеку, который выбирает себе инструмент, полезнее видеть, как оно бывает на самом деле, чем смотреть на подобранный удачный период.
Зачем всё этоЯ не доказываю, что на форексе надо торговать. Я показываю, что инструмент не привязан к рынку.
Для меня это главный результат последних месяцев. Мосбиржа, криптобиржа, валютные пары — три разных рынка, три разных способа доставки заявок и одна торговая логика сверху. Добавить четвёртый теперь стоит не месяцев, а недель, и это работа по шлюзу, а не по стратегии. А значит, вопрос «а под мой рынок будет?» перестал быть вопросом про стратегию и стал вопросом про сроки.
Мне интересно вот что. Если у вас есть робот под один рынок — вы его переносили куда-нибудь ещё? И что сломалось первым: исполнение, расчёт объёма или сами правила входа? У меня первым ломалось исполнение, причём каждый раз по-разному.
Портфели открыты, смотреть можно без регистрации: