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

Заметил неадекватно скачущие тики, где бид выше аск, причем сразу почти на 3% прыгнуло и вернулось обратно

Решил изменить функцию так

void OnTick(){
  if (!SymbolInfoTick(_Symbol, Tick)){ return;}
  if(isEXECUTION_EXCHANGE){
    if(Tick.volume==0){return;}
    Tick.bid=Tick.ask=Tick.last;
  }

Чтобы аски и биды вообще не использовались, а только тики Last с объемами.

Теперь High и Low полученные из тиков стали очень похожи с тем, что на барах показано. И оказалось, что согласно спецификации бары и строятся по цене Last.

В общем с тиками ask и bid нужно осторожнее, возможно и у вас там такое же.

На всякий случай, не забываем, что раньше на ФОРТС были клиринги (вечерние и промежуточные дневные). Надо бы учитывать время клирингов (немного менялось) и даты изменений.

Как и изменения (и их даты) открытия и закрытия торгов. Особенно - в 22 году.

Не забываем, также, синхронизировать часы на компе.
JRandomTrader #:

На всякий случай, не забываем, что раньше на ФОРТС были клиринги (вечерние и промежуточные дневные). Надо бы учитывать время клирингов (немного менялось) и даты изменений.

Как и изменения (и их даты) открытия и закрытия торгов. Особенно - в 22 году.

Работа только по Last это учтет?
Dmitriy Skub #:
Не забываем, также, синхронизировать часы на компе.
А в чем проблема заключается? Начало дней по времени сервера будет. Время на компе никогда не учитывал. И в тестере они кажется делаются одинаковыми.
Aleksei Kuznetsov:

Сегодня решил протестировать одну из стратегий на бирже, через единственного брокера имеющего МТ5 - F...am.

Скачал тики для GAZP. Но не понял ситуацию с ними.


Вот распечатка тиков за начало одного из дней:



Вопросы к опытным биржевым трейдерам:

1) С 06:50 до 07:00 идут тики, которые дают гэп размером выстой в несколько дневных баров. Вот 3 дня с этими гэпами в тиках:

Это - сбор стопов, тех кто оставил позиции на ночь? И нужно либо убирать стопы или делать их намного больше.

По спецификации торговая сессия с 00:00, но судя по появления тиков с объемами - начало в 10:00. 

Но с 2025.01.27 сессии начинаются с 07:00.

2025.01.24 10:00:00   New bar/day (PERIOD_D1). PrevHigh=138.0 PrevLow=135.55
2025.01.27 07:00:00   New bar/day (PERIOD_D1). PrevHigh=139.31 PrevLow=137.07

2) Зачем они вообще добавляются в тиковую историю? Только мешают, ведь OnTick(){...} их получит. Надо как-то их отбросить.

3) Для тестирования по реальным тикам надо вырезать тики до 10:00 и до 7:00 с 2025.01.27. Универсальное правило с датами для вырезания этих тиков не стоит делать, так как есть подключения к разным биржам и где-то часы начала торговли другие. 
Пока вижу вариант - отбрасывать тики с начала дня до первого тика с объёмами. Кто то так делал? Будет работать универсально для любых инструментов, бирж и форекса?

Проверил XAUUSD - там объемов вообще нет весь день. Т.е. надо как то по другому фильтровать.

А Вы что-нибудь изучали по Биржевой торговле?

Еще обнаружил странную вещь в тестере.
SL часто срабатывают с положительным проскальзыванием.

См. столбец Slippage


Те же сделки в отчете тестера (менее информативном). 

Для форекса положительные проскальзывания невозможны, поэтому решил рассмотреть тики.
Оказалось, что срабатывание SL активируется сделками Last, но Ask при этом может не меняться долгое время. В результате Last-ы выбирают уровни в стакане до цены SL, но тестер совершает сделку по старому (последнему добавленному в поток) Ask, который мог быть несколько секунд назад. И его цена почти всегда лучше цены SL, что и дает положительные проскальзывания.

Вот все тики для проскальзывания в +12. SL установлен в 922.4, но сделка продажи (выхода из покупки) закрылась по 923.6, то есть дороже на 12 пт.


В реальной торговле положительные проскальзывания случаются? Если нет, то тестер неадекватные результаты выдает. 
Полагаю, что должна применяться цена Ask = Last который запустил срабатывание SL или следующий Ask, но не предыдущий. Ведь Last исполнился об чей то ордер в стакане. Видно, что кто-то большим рыночным ордером (около 1000 лотов) съел несколько уровней цены за 1 милисекунду, в том числе 15 лотов на уровне 923,6, которые мне отдал тестер за сработавший SL.

Что скажете? Ошибка тестера или положительные проскальзывания реально происходят на бирже?

Aleksei Kuznetsov #:


Что скажете? Ошибка тестера или положительные проскальзывания реально происходят на бирже?

Принято говорить "особенность", а не "ошибка" тестера ;-). Бывали обсуждения сего. Поищите исследования fxsabera.

PS. покупка закрывается продажей, поэтому нужно апеллировать к устаревшей цене Bid, а не Ask в конкретном рассматриваемом примере.

PPS. В качестве решения можно посмотреть сюда.

Пробой стоп-лосса произошел по цене Last, но закрытие выполнено по Bid из-за изменений на рынке.
Пробой стоп-лосса произошел по цене Last, но закрытие выполнено по Bid из-за изменений на рынке.
  • 2026.06.08
  • www.mql5.com
В тексте обсуждается проблема с отображением цен в тестере, где Last-цена может не совпадать с Bid/Ask из-за особенностей работы биржевых инструментов. Обсуждается, что Last-цена отражает последнюю сделку, а Bid/Ask — текущие цены на покупку/продажу. Также упоминается, что в реальности стоп-лосс должен срабатывать по Last, а не по Bid, если последний уже изменился. В тексте также говорится о возможных нюансах в работе тестера и необходимости проверки истории тиков для понимания причин срабатывания стоп-лосса.
Stanislav Korotky #:

 поэтому нужно апеллировать к устаревшей цене Bid, а не Ask в конкретном рассматриваемом примере.

Да, перепутал, но цену именно от Bid приводил в примере.
Aleksei Kuznetsov #:
положительные проскальзывания реально происходят на бирже?
Конечно происходит. У Брокера триггер сработал и только после этого он заявку на биржу от вашего лица передаёт - за это время что угодно может произойти.