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

fxsaber #:

Это неправильно.

Из Вашего скрина история bid-цен (по которым должны акцептироваться и исполняться SELL-ордера) в Тестере.

Сделал такой корректировщик Bid/Ask по Last выбираемым из стакана

bool Correct_last(MqlTick &Tick, bool skip_same_last_){// skip_same_last_ - пропустить тики с той же ценой, если объемы не важны для стратегии, это ускорит работу тестера
  static double prev_last_buy=-1,prev_last_sell=-1;
  if((Tick.flags&TICK_FLAG_LAST)>0){//Last тик
    if((Tick.flags&TICK_FLAG_SELL)>0){//Last Sell тик
      if(prev_last_sell==Tick.last){return skip_same_last_;}//пропустить тики с той же ценой, если skip_same_last_==true
      prev_last_sell=Tick.last;
      Tick.bid=Tick.last;//корректировать только 1-й тик на уровне
    }
    else if((Tick.flags&TICK_FLAG_BUY)>0){//Last Buy тик
      if(prev_last_buy==Tick.last){return skip_same_last_;}//пропустить тики с той же ценой, если skip_same_last_==true
      prev_last_buy=Tick.last;
      Tick.ask=Tick.last;//корректировать только 1-й тик на уровне
    }
  }
  return false;
}

Корректирую Bid/Ask только первого тика на новом уровне, а не последнего, так как заранее неизвестно какой тик будет последним и по цене уровня и в серии.

Заодно сделал пропуск Last-ов по одинаковой цене, для стратегий не использующих объемы.

Вызов такой:

sinput bool correct_exchange=false;//Fix non‑trading and Last ticks for exchanges.
sinput bool skip_same_last=false;//Skip the Last ticks at the same price if the strategy does not use volumes. For exchange instruments.
...
onTick(){
...
if(isEXECUTION_EXCHANGE && correct_exchange && Correct_last(Tick,skip_same_last)){return;}//если биржевое исполнение, то записать Last в Bid/Ask, и если надо, то удалить тики по повторяющейся цене для скорости в стратегиях, где объем не важен
//сохраняем исправленные тики или используем в реале
...
}

Почистил тики с одинаковым Last так как volume не использую, объем файлов для мат. режима с 240 до 107 мб сократился, т.е. будет в 2+ раза быстрее тестироваться. Кастомный символ примерно так же сократится.

Roman Shiredchenko #:

там возможная причина что мало персон (клиентов) торгуют МТ5 в РФ в ф-м - это экономически не интересно ни разрабу, ни брокеру... заморачиваться надо и не то что правок а прям много чего делать надо, чтобы ок было всё в базовой комплектации... ) ИМХО.

Кто ж против - я только за! Надо запросы делать на правки!!! (всем) и указывать на недостатки в работе тестера в том числе... там еще и данные по символам вроде криво отдаются... самое элементарное - режим неттинг, мосбиржа при запросе - брокер хэдж отдаёт... 

Там же еще есть же и серверная часть МТ5 -в общем работы - куча!!! ) (вагон и маленькая тележка) )

Так если поработать, то и клиенты пойдут, которые будут видеть правильную работу тестера, брокера и биржи.

Тут выше говорили, что биржа просела. Вот и надо поднимать предоставляя рабочую инфраструктуру, а не то что есть сейчас... хромое, которое без костылей не работает правильно.

Roman Shiredchenko #:

самое элементарное - режим неттинг, мосбиржа при запросе - брокер хэдж отдаёт... 

А я недавно просил их сделать мне хедж для MT5, ответили, что их инструменты только неттинговые. Но думаю, что можно, просто не хотят/не умеют. Придется дорабатывать под неттинг.
Aleksei Kuznetsov #:

На всех 3х скриншотах после серии Last сработавших за одну миллисекунду, через 5 миллисекунд появляется тик изменяющий Bid или Ask. То есть так и происходит, как вы предложили. Почему так быстро? Наверно чьи то стоп-лимитки активировались после прохождения нескольких уровней в стакане. Либо кто-то супер быстрый успел обычную лимитку отправить.

Нет. Сейчас Bid/Ask изменяются, если люди ставят лимитные заявки. Если исполнение заявок произошло, то обновления краёв стакана не происходит, пока не будут поставлены по ним новые лимитные заявки. Если после каждой транзакции транслировать края стакана с учётом того, что было до транзакции и сколько съели в глубь, то и исполнение стоп ордеров ( в т.ч. SL) будет более корректным.
Aleksey Vyazmikin #:
Нет. Сейчас Bid/Ask изменяются, если люди ставят лимитные заявки. Если исполнение заявок произошло, то обновления краёв стакана не происходит, пока не будут поставлены по ним новые лимитные заявки. Если после каждой транзакции транслировать края стакана с учётом того, что было до транзакции и сколько съели в глубь, то и исполнение стоп ордеров ( в т.ч. SL) будет более корректным.
А... Это описание того, что происходит в онлайн торговле, а не в тестере? Тогда да - очень странно, что так происходит.

тут уж если обсуждаем МТ5  - я еще заметил странность визуально еще проверю и запрошу что за дичь? входя по рынку покупка к примеру - у меня в МТ5 мигает лимитка buy limit крас цветом подсвечена и только потом покупка проходит, также с продажей... я так подозреваю это брокер так ухитряется мои рыночные исполнять приказы через ближайшие лимитки к рынку... если это так то это дичь какая- то в моем понимании  - ведь комиссии я плачу брокеру  с рыночных входов в позиции!!!  И такое по сути постоянно происходит... я визуально это постоянно вижу просто забываю успеть нажать принт скрин и в чат бросить с разъяснением что за ерунда творится -как рыночные приказы исполняет лимитками!???

Roman Shiredchenko #:

тут уж если обсуждаем МТ5  - я еще заметил странность визуально еще проверю и запрошу что за дичь? входя по рынку покупка к примеру - у меня в МТ5 мигает лимитка buy limit крас цветом подсвечена и только потом покупка проходит, также с продажей... я так подозреваю это брокер так ухитряется мои рыночные исполнять приказы через ближайшие лимитки к рынку... если это так то это дичь какая- то в моем понимании  - ведь комиссии я плачу брокеру  с рыночных входов в позиции!!!  И такое по сути постоянно происходит... я визуально это постоянно вижу просто забываю успеть нажать принт скрин и в чат бросить с разъяснением что за ерунда творится -как рыночные приказы исполняет лимитками!???

Не понимаю, в чем проблема?
"Покупка по рынку" - это покупка из стакана. Стакан наполнен лимитными ордерами.

Или речь о чём-то другом?
Aleksei Kuznetsov #:
А... Это описание того, что происходит в онлайн торговле, а не в тестере? Тогда да - очень странно, что так происходит.

Это описание того, как реальность отображается в тестере через тиковую историю. Если заявки Ask/Bid никто не поставил сразу в истории после смещения уровня в стакане по причине заключения сделок (изполнения ордеров), то фактически тестер будет думать о старых значениях, в то время как они уже новые но не из-за новых заявок, а по той причине, что часть заявок исполнена. Таким образом реальный стакан будет показывать одни значения, а в тестере будите видеть другие значения.

Сделаю оговорку, что это чисто логическое умозаключение, подлежащее проверке.

Roman Shiredchenko #:

тут уж если обсуждаем МТ5  - я еще заметил странность визуально еще проверю и запрошу что за дичь? входя по рынку покупка к примеру - у меня в МТ5 мигает лимитка buy limit крас цветом подсвечена и только потом покупка проходит, также с продажей... я так подозреваю это брокер так ухитряется мои рыночные исполнять приказы через ближайшие лимитки к рынку... если это так то это дичь какая- то в моем понимании  - ведь комиссии я плачу брокеру  с рыночных входов в позиции!!!  И такое по сути постоянно происходит... я визуально это постоянно вижу просто забываю успеть нажать принт скрин и в чат бросить с разъяснением что за ерунда творится -как рыночные приказы исполняет лимитками!???

Тут могут быть разные причины - или прокладка (шоюз) так настроена между сервером, интерпретатором (шлюзом) и биржей, или внутреннее исполнение без вывода на биржу (типа сами контрагенты), или ещё чего.

Главная разница - комиссия - начисляют они её бирже или нет.

Aleksey Vyazmikin #:

Это описание того, как реальность отображается в тестере через тиковую историю. Если заявки Ask/Bid никто не поставил сразу в истории после смещения уровня в стакане по причине заключения сделок (изполнения ордеров), то фактически тестер будет думать о старых значениях, в то время как они уже новые но не из-за новых заявок, а по той причине, что часть заявок исполнена. Таким образом реальный стакан будет показывать одни значения, а в тестере будите видеть другие значения.

Сделаю оговорку, что это чисто логическое умозаключение, подлежащее проверке.

Тогда это то же самое, что я предлагаю сделать MQ - не старый уже выкупленный уровень использовать, а по цене Last. Т.е. все новые Last записывать, как новые Ask|Bid. 
Это делает мой код выше, который и может быть примером для MQ. 

Aleksei Kuznetsov #:

все новые Last записывать, как новые Ask|Bid.

Валидная (за редким исключением) цена - последняя в серии last-цен. Промежуточные никакого отношения к возможному совершению сделок не имеют.