Как тестируете стратегии для биржи? - страница 8

prostotrader #:

На Бирже нет таких типов заявок, которые Вы описываете. Все терминалы (включая МТ5) приводят свои типы заявок к следующим типам:

а где об этом можно почитать подробнее на моексе? в спецификациях? или в описании и пользовании CGate Trader  где то уже подобное архив разжимал и читал.. в описании к работе.... 

Спасибо. Без шуток. Можно ссылку кинуть и всё.

prostotrader #:

На Бирже нет таких типов заявок, которые Вы описываете. Все терминалы (включая МТ5) приводят свои типы заявок к следующим типам:

Дело в том, что в О "рыночные" заявки конвертились только при отправке на биржу, а в Ф они конвертятся в лимитки внутри MT5 и клиент этот процесс видит.


Я у себя, чтобы избежать этой конвертации, сам отправляю лимитки с ценой около планки вместо рыночных.

Интересно, а кто тогда двигает цену, если все конвертируется в лимитные ордера? 
Или такая принудительная опция только для пользователей МТ5, а остальные торгуют точно как запрашивают?

SL тоже лучше самому на лимитку менять? Т.е. держать его уровень в памяти и при его прохождении ставить лимитку. Но цена может пойти дальше и ордер остаться без исполнения. Вариант для простоты: стоп лимит ордер.

Aleksei Kuznetsov #:

Интересно, а кто тогда двигает цену, если все конвертируется в лимитные ордера? 
Или такая принудительная опция только для пользователей МТ5, а остальные торгуют точно как запрашивают?

SL тоже лучше самому на лимитку менять? Т.е. держать его уровень в памяти и при его прохождении ставить лимитку. Но цена может пойти дальше и ордер остаться без исполнения. Вариант для простоты: стоп лимит ордер.

Так лимитка с ценой далеко в области противоположных цен сразу и исполнится, как рыночная. Если у неё исполнение не BOC.

Стопы у меня виртуальные (программные). У нас же неттинг, а у каждого робота поза своя и стоп свой. Когда до него доходит, ставится такая же лимитка, с ценой около планки, и сразу исполняется, по той цене, что лучшая в стакане, если ликвидности хватает.

Aleksei Kuznetsov #:

В таком случае, самое простое и правильное решение для MQ:

сделать триггер для SL не по цене Last как сейчас (для которой записан старый Ask|Bid), а просто по Ask|Bid ценам которые придут после нескольких Last (или без них), тогда автоматически применится актуальный Ask|Bid.

Для записи тиков в кастомный символ или для мат. режима - просто пропускать все Last тики, тогда все будет работать по новым актуальным Ask|Bid.

Вот рассмотрел как лимитный ордер срабатывает. Рассмотрел ордер в последней строке на этом скриншоте 

Время его активации 2025.09.12 07:03:29.114

Распечатка тиков и активации ордера:
2025.09.12 07:03:27   2025.09.12 07:03:27.683 130.03 130.09 130.09 1 1.0 2
2025.09.12 07:03:28   2025.09.12 07:03:28.9 130.03 130.09 130.03 5 5.0 344
2025.09.12 07:03:28   2025.09.12 07:03:28.963 130.03 130.09 130.03 1 1.0 344
2025.09.12 07:03:29   2025.09.12 07:03:29.111 130.03 130.09 130.03 191 191.0 344
2025.09.12 07:03:29   2025.09.12 07:03:29.111 130.03 130.09 130.03 300 300.0 344
2025.09.12 07:03:29   order [#18 buy limit 1 GAZP at 130.05] triggered
2025.09.12 07:03:29   deal #18 buy 1 GAZP at 130.05 done (based on order #18)
2025.09.12 07:03:29   deal performed [#18 buy 1 GAZP at 130.05]
2025.09.12 07:03:29   order performed buy 1 at 130.05 [#18 buy limit 1 GAZP at 130.05]
2025.09.12 07:03:29   2025.09.12 07:03:29.114 130.02 130.03 130.03 300 300.0 6
2025.09.12 07:03:29   2025.09.12 07:03:29.522 130.02 130.03 130.02 2 2.0 344

Видно, что время активации соответствует времени Ask/Bid тика. Так же логично, что сначала сработал ордер, а потом вызвался OnTick() и напечатал тик, т.е. однозначно активация не от Last тика.

А как показывал ранее SL срабатывает по Last тикам и берет неправильную устаревшую цену от предыдущего Bid/Ask тика. В общем какая то недоработка со стороны MQ. Нужно и стоповые ордеры по Ask/Bid тикам активировать, тогда не будет положительных проскальзываний по прошлым ценам.

Вот еще раз покажу и закрытие для того же ордера: (закрытие со скриншота в 2025.09.12 07:07:12.905)
2025.09.12 07:07:12   2025.09.12 07:07:12.592 130.16 130.2 130.19 85 85.0 4
2025.09.12 07:07:12   2025.09.12 07:07:12.905 130.16 130.2 130.16 10 10.0 344
2025.09.12 07:07:12   2025.09.12 07:07:12.905 130.16 130.2 130.15 1 1.0 344
2025.09.12 07:07:12   2025.09.12 07:07:12.905 130.16 130.2 130.14 1 1.0 344
2025.09.12 07:07:12   2025.09.12 07:07:12.905 130.16 130.2 130.14 1 1.0 344
2025.09.12 07:07:12   2025.09.12 07:07:12.905 130.16 130.2 130.13 129 129.0 344
2025.09.12 07:07:12   stop loss triggered #18 buy 1 GAZP 130.05 sl: 130.12 [#19 sell 1 GAZP at 130.12]
2025.09.12 07:07:12   deal #19 sell 1 GAZP at 130.16 done (based on order #19)
2025.09.12 07:07:12   deal performed [#19 sell 1 GAZP at 130.16]
2025.09.12 07:07:12   order performed sell 1 at 130.16 [#19 sell 1 GAZP at 130.12]
2025.09.12 07:07:12   2025.09.12 07:07:12.905 130.16 130.2 130.12 258 258.0 344
2025.09.12 07:07:12   2025.09.12 07:07:12.907 130.12 130.19 130.12 258 258.0 6

Видно что по Last тику закрылось.

Сравнение по суммарным проскальзываниям тестера MQ  с положительными проскальзываниями из за срабатывания SL по Last c ценами предыдущего Ask/Bid и    Virtual в котором SL берется от актуального Ask/Bid тика.

MQ по Last с старым Ask/Bid Virtual по новому Ask/Bid 

Результат в пипсах без учета проскальзываний -4615

Результат в пипсах без учета проскальзываний -4351

Результат без проскальзывания в пипсах близок (разница 264п), то есть стратегии работают почти одинаково в обоих тестерах.

А ошибочные положительные проскальзывания улучшают итог на +609 для MQ  и ухудшают на -1844 более приближенный к реальности результат из Virtual. Разница проскальзываний 2448.

И все это из за того, что берутся цены от прошлого Ask/Bid тика.

Aleksei Kuznetsov #:

И все это из за того, что берутся цены от прошлого Ask/Bid тика.


А пробовали поставить задержку в тестере - влияет ли на на исполнение отложек (кроме лимитных)? Если нет, то это самый простой способ пофиксить MQ ситуацию, а если влияет, то уже хорошее решение.

Aleksey Vyazmikin #:

А пробовали поставить задержку в тестере - влияет ли на на исполнение отложек (кроме лимитных)? Если нет, то это самый простой способ пофиксить MQ ситуацию, а если влияет, то уже хорошее решение.

Посмотрел не вдаваясь в подробности на 500 мс. Общий баланс и проскальзывания изменились. Все входы лимитные. 
Задержка эмулирует паузу между отправкой команды и ее исполнением. Видимо какие то ордера исполнялись быстрее 500мс и они не исполнились с задержкой, но могли исполниться через 5 мин или 5 часов в итоге другие результаты.
На SL задержка не повлияет, так как он установится при активации лимитного ордера.
Aleksei Kuznetsov #:
Посмотрел не вдаваясь в подробности на 500 мс. Общий баланс и проскальзывания изменились. Все входы лимитные. 
Задержка эмулирует паузу между отправкой команды и ее исполнением. Видимо какие то ордера исполнялись быстрее 500мс и они не исполнились с задержкой, но могли исполниться через 5 мин или 5 часов в итоге другие результаты.
На SL задержка не повлияет, так как он установится при активации лимитного ордера.
SL - стоп ордер, должна работать задержка.
Aleksey Vyazmikin #:
SL - стоп ордер, должна работать задержка.
Полагаю, что задержка должна делать паузу между OrderSend и началом его обработки, например пропустить тики за 500мс. SL отдельно не отправляется, а вместе с основным ордером, так что он известен с момента появления позиции, в реальности он не будет задерживаться и в тестере незачем. 
Если только при тралле новый OrderSend для модификации  должен задерживаться.