Чудеса с тиковым потоком на ФОРТС - страница 2

 
fxsaber:

На тиковом графике показывается результат возврата SymbolInfoTick на каждом тике, поэтому он показывает Bid/Ask старые, пока не получит новые.

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

Сделал. Вот что получилось:

Красной рамкой выделены моменты, когда Last превышает ask или bid. Тики в этот раз идут строго последовательно, без временной сортировки, это видно на графике, где несколько тиков имеют одно и тоже время вплоть до мсек.

Что также интересно это флаги. Они не соответствуют тикам. Для примера я обвел несколько таких флагов. Например в 6 строчке написано, что изменилась цена Bid. Смотрим предыдущий тик в пятой строке. Его бид ровно такой же как и у следующего тика. 

 
Vasiliy Sokolov:

Сделал. Вот что получилось:

Красной рамкой выделены моменты, когда Last превышает ask или bid. Тики в этот раз идут строго последовательно, без временной сортировки, это видно на графике, где несколько тиков имеют одно и тоже время вплоть до мсек.

Что также интересно это флаги. Они не соответствуют тикам. Для примера я обвел несколько таких флагов. Например в 6 строчке написано, что изменилась цена Bid. Смотрим предыдущий тик в пятой строке. Его бид ровно такой же как и у следующего тика. 

Посмотрите таблицу снизу-вверх. Увидите полное соответствие ранее сказанному.
 
fxsaber:
Посмотрите таблицу снизу-вверх. Увидите полное соответствие ранее сказанному.
Спасибо, не заметил. Да, в такой последовательности флаги совпадают. Но вопрос с ценой last по-прежнему открыт. 
 
Vasiliy Sokolov:
вопрос с ценой last по-прежнему открыт. 
Не вижу проблемных участков.
 
fxsaber:
Не вижу проблемных участков.


Отлично, значит сможете объяснить в таком случае следующее:

1 2017.05.25      12:45:00.871    56477   56479   56479   5       Buy
2 2017.05.25      12:45:00.871    56477   56479   56480   3       Buy
3 2017.05.25      12:45:00.871    56477   56479   56480   1       Buy
4 2017.05.25      12:45:00.871    56477   56480   56480   1       Ask

В момент 2 (строка 2) была заключена сделка на покупку по цене 56480. Уровень лучшей цены на продажу в этот момент был 56479. Как могла пройти сделка по 56480, когда можно было купить по 56479?

p.s. единственное, что приходит на ум, это то, что ask и bid изменяются отдельным событием. Допустим, пошла пачка last. Сначала купили по 56479, потом несколько раз по 56480. Когда покупки закончились, пришло событие: обновился Ask: 56480. Если внимательно посмотреть ленту сделок, то после каждой серии last идет обновление Ask/Bid, синхронизируя Ask/Bid с уровнем last.

p.s.s. т.е. первый вывод который можно сделать это то, что значения, находящиеся в MqlTick ни разу не синхронизированы! Если это так, то это на порядок усложняет обработку тикового потока. Косвенно об этом говорят картинки тикового графика. Ask и Bid словно запаздывают от last и принимают его значения лишь спустя некоторое время.

 
Vasiliy Sokolov:


Отлично, значит сможете объяснить в таком случае следующее:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Чудеса с тиковым потоком на ФОРТС

fxsaber, 2017.05.24 15:17

Представьте сторону стакана в виде 5-ти уровней по 1 лоту. Если отправить маркет на эту сторону в 5 лотов, то будет 5 соответствующих trade-записей и одна котировочная (все с одним и тем же временем, но разными номерами тиков). MT отобразит эту ситуацию, как на последнем скрине - в виде trade-лесенки к "обрыву" котировочной цены.

Все получилось согласно сказанному ранее. В Вашем примере был BestAsk=56479 на 5 лотов (одним SellLimit). На 8 (5 + 3 + 1) лотов был отправлен BUY-маркет. Он выжрал полностью лучший BestAsk и выжрал частично (не полностью) следующий уровень стакана, залив два SellLimit по 3 и 1 лоту (на 3 лота был либо раньше выставлен, либо на бирже настройка приоритета исполнения лимитной заявки зависит не от времени, а от объема), соответственно.

Когда Execution-часть биржи закончила свое действие, включилась котировочная, сформировав и отправив лучшие BestAsk=56480. Все это произошло внутри одной миллисекунды.

Более того, Execution-поток и Quote-поток - разные потоки данных. И в тиковой истории MT5 на самом деле они синхронизируются задним числом - несколько миллисекунд (можно заметить в реал-тайме через MQL, но не на тиковом чарте).

 
fxsaber:

Когда Execution-часть биржи закончила свое действие, включилась котировочная, сформировав и отправив лучшие BestAsk=56480. Все это произошло внутри одной миллисекунды.

Более того, Execution-поток и Quote-поток - разные потоки данных. И в тиковой истории MT5 на самом деле синхронизируются задним числом - несколько миллисекунд.

Выходит что last - это execution поток. А Ask/Bid - котировочные потоки. Т.е. сначала выжирается ликвидность ластом, а затем нам приходит рапорт: "ликвидность выжрана, текущие Ask/Bid такие-то".

Следовательно, высказанное мной предположение верно: текущий тик однозначно описывает уровень last, а вот уровни Ask и Bid в нем могут соответствовать еще предыдущим значениям.

 
Заметил еще одну особенность экспорта котировок: поле объем для событий "изменился Ask" "изменился bid" всегда не нулевое. Оно равно объему последней сделки. Т.е. если последняя сделка прошла с объемом 4, то следующий тик с изменением Ask в поле объем также будет содержать "4", хотя никаких сделок не было, изменился только спред.
 
Теперь интересно узнать, реагирует ли OnBookEvent на событие Last?
 
Vasiliy Sokolov:

Выходит что last - это execution поток. А Ask/Bid - котировочные потоки. Т.е. сначала выжирается ликвидность ластом, а затем нам приходит рапорт: "ликвидность выжрана, текущие Ask/Bid такие-то".

А по другому никак не организовать на самом деле, если делать биржу без тормозов. Т.е. сама биржа так устроена, а не MT5.

Следовательно, высказанное мной предположение верно: текущий тик однозначно описывает уровень last, а вот уровни Ask и Bid в нем могут соответствовать еще предыдущим значениям.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Чудеса с тиковым потоком на ФОРТС

fxsaber, 2017.05.24 15:47

На тиковом графике показывается результат возврата SymbolInfoTick на каждом тике, поэтому он показывает Bid/Ask старые, пока не получит новые.

Vasiliy Sokolov:
Заметил еще одну особенность экспорта котировок: поле объем для событий "изменился Ask" "изменился bid" всегда не нулевое. Оно равно объему последней сделки. Т.е. если последняя сделка прошла с объемом 4, то следующий тик с изменением Ask в поле объем также будет содержать "4", хотя никаких сделок не было, изменился только спред.

Также идет возврат и старых ластов, когда меняются Ask/Bid. Вроде, CopyTicks возвращает не то, что GUI-показывает. Не помню точно, но там по приходу котировочного тика, last-поля нулевые. А GUI - это уже некоторая переработка CopyTicks-данных.


Сохраните ровно этот же интервал через CopyTicks и приложите сюда - ArrayPrint неплохо для этого подходит. А лучше так, ведь в истории есть даже VOLUME-флаг.

Причина обращения: