Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
На тиковом графике показывается результат возврата SymbolInfoTick на каждом тике, поэтому он показывает Bid/Ask старые, пока не получит новые.
Воспользуйтесь недавно появившемся штатным сервисом получения через GUI тиковой историей и экспортом ее. И приложите этот кусок истории не в виде скрина, а в виде текстового файла. Тогда объяснить мне и понять Вам будет гораздо легче.
Сделал. Вот что получилось:
Красной рамкой выделены моменты, когда Last превышает ask или bid. Тики в этот раз идут строго последовательно, без временной сортировки, это видно на графике, где несколько тиков имеют одно и тоже время вплоть до мсек.
Что также интересно это флаги. Они не соответствуют тикам. Для примера я обвел несколько таких флагов. Например в 6 строчке написано, что изменилась цена Bid. Смотрим предыдущий тик в пятой строке. Его бид ровно такой же как и у следующего тика.
Сделал. Вот что получилось:
Красной рамкой выделены моменты, когда Last превышает ask или bid. Тики в этот раз идут строго последовательно, без временной сортировки, это видно на графике, где несколько тиков имеют одно и тоже время вплоть до мсек.
Что также интересно это флаги. Они не соответствуют тикам. Для примера я обвел несколько таких флагов. Например в 6 строчке написано, что изменилась цена Bid. Смотрим предыдущий тик в пятой строке. Его бид ровно такой же как и у следующего тика.
Посмотрите таблицу снизу-вверх. Увидите полное соответствие ранее сказанному.
вопрос с ценой last по-прежнему открыт.
Не вижу проблемных участков.
Отлично, значит сможете объяснить в таком случае следующее:
В момент 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 и принимают его значения лишь спустя некоторое время.
Отлично, значит сможете объяснить в таком случае следующее:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Чудеса с тиковым потоком на ФОРТС
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, но не на тиковом чарте).
Когда Execution-часть биржи закончила свое действие, включилась котировочная, сформировав и отправив лучшие BestAsk=56480. Все это произошло внутри одной миллисекунды.
Более того, Execution-поток и Quote-поток - разные потоки данных. И в тиковой истории MT5 на самом деле синхронизируются задним числом - несколько миллисекунд.
Выходит что last - это execution поток. А Ask/Bid - котировочные потоки. Т.е. сначала выжирается ликвидность ластом, а затем нам приходит рапорт: "ликвидность выжрана, текущие Ask/Bid такие-то".
Следовательно, высказанное мной предположение верно: текущий тик однозначно описывает уровень last, а вот уровни Ask и Bid в нем могут соответствовать еще предыдущим значениям.
Выходит что last - это execution поток. А Ask/Bid - котировочные потоки. Т.е. сначала выжирается ликвидность ластом, а затем нам приходит рапорт: "ликвидность выжрана, текущие Ask/Bid такие-то".
А по другому никак не организовать на самом деле, если делать биржу без тормозов. Т.е. сама биржа так устроена, а не MT5.
Следовательно, высказанное мной предположение верно: текущий тик однозначно описывает уровень last, а вот уровни Ask и Bid в нем могут соответствовать еще предыдущим значениям.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Чудеса с тиковым потоком на ФОРТС
fxsaber, 2017.05.24 15:47
На тиковом графике показывается результат возврата SymbolInfoTick на каждом тике, поэтому он показывает Bid/Ask старые, пока не получит новые.
Заметил еще одну особенность экспорта котировок: поле объем для событий "изменился Ask" "изменился bid" всегда не нулевое. Оно равно объему последней сделки. Т.е. если последняя сделка прошла с объемом 4, то следующий тик с изменением Ask в поле объем также будет содержать "4", хотя никаких сделок не было, изменился только спред.
Также идет возврат и старых ластов, когда меняются Ask/Bid. Вроде, CopyTicks возвращает не то, что GUI-показывает. Не помню точно, но там по приходу котировочного тика, last-поля нулевые. А GUI - это уже некоторая переработка CopyTicks-данных.
Сохраните ровно этот же интервал через CopyTicks и приложите сюда - ArrayPrint неплохо для этого подходит. А лучше так, ведь в истории есть даже VOLUME-флаг.