В статье разбираем учебного робота ServerStopOrdersSample — готовый пример торговли внешними (серверными) стоп-ордерами.
Робот показывает полный цикл работы с внешним стопом: выставление, ожидание активации, контроль исполнения порождённой биржей заявки, снятие по таймауту и перевыставление по актуальной цене.
Исходный код открыт и доступен на GitHub — ссылка в конце статьи. Робот демонстрирует механику внешних стоп-ордеров и не ставит целью получение прибыли.
Робот торгует только в Long и использует внешний стоп-лимит как способ войти в позицию при подтверждении движения цены вверх. Внешний стоп хранится на бирже, поэтому активация происходит даже при выключенном терминале, а заявка порождается биржей без задержки на отправку.
Особенность примера — контроль исполнения по времени. Стоп-лимит не гарантирует исполнения: цена может коснуться уровня активации и уйти дальше, а лимитная заявка останется неисполненной. Поэтому у каждого ордера есть лимит времени на исполнение. Если ордер не успел исполниться, робот снимает его и перевыставляет по текущим ценам.
Вход в позицию:
Робот выставляет внешний стоп-лимит на покупку. Цена активации — лучший аск плюс отступ (параметр «Trigger offset percent»). Лимитная цена порождённой заявки — ниже цены активации на величину отступа «Limit offset percent».
Если за заданное число свечей (параметр «Candles to wait») ордер не исполнился, робот снимает его и перевыставляет по актуальным ценам. Причин может быть две: стоп не активировался либо порождённая лимитная заявка не исполнилась.
Если лимитная заявка исполнена, позиция открыта.
Выход из позиции:
На следующей свече после открытия позиции робот выставляет закрывающий внешний стоп-лимит на продажу. Механика зеркальная: цена активации — лучший бид минус отступ, лимитная цена — выше цены активации.
Если закрывающий ордер не исполнился за заданное число свечей, он снимается и перевыставляется по актуальным ценам.
Робот работает одинаково в боевом подключении и в тестере: на серверах без поддержки внешних стопов методы автоматически переключаются на внутренние стопы OsEngine.
Параметры разбиты на две вкладки.
Вкладка «Base»:
On (торговля включена) или Off (торговля выключена, активный ордер на вход снимается);
Volume — объём позиции в лотах.
Вкладка «Order prices»:
Trigger offset percent — отступ цены активации от лучшей цены стакана, в процентах (по умолчанию 0,05%);
Limit offset percent — отступ лимитной цены порождённой заявки от цены активации, в процентах (по умолчанию 0,05%);
Candles to wait — число свечей, отводимое ордеру на исполнение (по умолчанию 5).
Выставление внешнего стоп-лимита на вход выполняется одним методом торговой вкладки BotTabSimple:
_tab.BuyAtStopOnServer(volume, priceLimit, priceActivation, «ServerStopLimitEntry»);
Закрытие позиции внешним стопом:
_tab.CloseAtStopOnServer(pos, activation, priceOrder, «ServerStopLimitExit»);
Робот не делит логику на «тестер» и «боевой сервер». Он запоминает свечу, на которой выставлен ордер, и по истечении заданного числа свечей снимает живой ордер. Для внутренних стопов используется BuyAtStopCancel, для внешних — CloseOrder; оба вызова безопасны в «чужом» режиме.
Робот находится в папке Robots/TechSamples. В списке роботов он доступен под именем ServerStopOrdersSample.
Исходный код на GitHub: github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/TechSamples/ServerStopOrdersSample.cs
Удачных алгоритмов!
https://smart-lab.ru/company/os_engine/blog/1024149.php
Скачать OsEngine: https://github.com/AlexWan/OsEngine
Официальная поддержка OsEngine в MAX: https://max
Канал Научный трейдинг в MAX: https://max.ru/
Поддержка OsEngine в Телеграм: https://t.me/osengine_official_support
Канал Научный трейдинг (Bad Quant) в Телеграм: https://t.me/bad_quant