Особенность OnTick в том, что он реагирует как на изменение Bid/Ask (инфопоток), так и на Last (трейд поток).
В результате получается, что количество вызовов OnTick для биржевых торгуемых инструментов заведомо больше торговых транзакций.
Почему так сделано:
нельзя душить эксперта только торговыми сделками и не давать ему информацию об изменении рынка (одно дело вызвать 5 раз, другое - 15 раз)
нельзя в рамках живого рынка выдавать нулевые last и last_volume в обзор рынка, так как кто-то из трейдеров взорвется
Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.
Скоро мы включим поток Time & Sales, что даст возможность точно анализировать ленту сделок.
Время компьютера желательно держать точным, чтобы меньше было шансов неправильно логи понять.
Спасибо за скрипт: вот результаты этого скрипта за 1 минуту 17:36
Особенность OnTick в том, что он реагирует как на изменение Bid/Ask (инфопоток), так и на Last (трейд поток).
В результате получается, что количество вызовов OnTick для биржевых торгуемых инструментов заведомо больше торговых транзакций.
Почему так сделано:
нельзя душить эксперта только торговыми сделками и не давать ему информацию об изменении рынка (одно дело вызвать 5 раз, другое - 15 раз)
нельзя в рамках живого рынка выдавать нулевые last и last_volume в обзор рынка, так как кто-то из трейдеров взорвется
Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.
Скоро мы включим поток Time & Sales, что даст возможность точно анализировать ленту сделок.
Все это, конечно, здорово, но для ФОРТС, где есть стаканы, в структуру MqlTick нужно было добавить флаг котировки.
"Размножение" сделок - это не страшно, страшно то, что реальные сделки пропадают.
P.S. Мой БАН связан с моим IP адресом, пожалуйста, снимите его, а то мне приходится для ответа Вам каждый раз переустанавливать браузер.
Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.
Это все последние непосредственно перед закрытием сессии (т.е. ниже котировок нету до конца клиринга).
За точку отсчета возьмем выделенные черным три строчки. Вопросов два:
1.Куда делись выделенные красным?
Они прилетели одним сетевым пакетом скорее всего и вызвались как один OnTick. Было 8 тиков в одну секунду, трое из них одиночными вызовами пришли, а последние 5 скорее всего одним пакетом с отображением последней котировки как Last.
2.Откуда взялось выделенное синим?
Это постмаркет. Мы также даем возможность ловить события постмаркета. Там обычно снятие заявок только работает.
Еще вопрос (дополнительный) - какой временной интервал означает "одновременный приход"?
Это не интервал, а скорее физический сетевой пакет. Прилетает пакет на 2-3-4 тика, все они накладываются в базу, но вызов OnTick идет один.
Еще есть шанс, что эксперт может тормозить(быть занятым) и новая пришедшая котировка добавляется в базу, но вызова OnTick не происходит, так как эксперт работает. Если бы такого механизм не было, то мы бы легко переполнили входящие очереди котировок для эксперта и начав посылать старые котировки эксперту и ввели бы его в заблуждение.
Не путайте вопрос доставки правильных и точных потоков данных в терминал и вызов/уведомления экспертов.
Все данные точно и правильно доставляются в терминал, его это основа. Достаточно сравнить чарты.
А вот запуск экспертов(онтик) - это независимое и асинхронное уведомление. Приходящий пакет данных не может ждать каких-то тормозящих экспертов, а должен быть мгновенно наложен на рыночное окружение и лишь факультативно(если эксперт закончил предыдущий вызов) запустить эксперта.
Задумайтесь о ситуации: поток котировок 2 в секунду и работающий эксперт, который тормозит, совершает торговые сделки, но при этом требует, чтобы новые ожидающие котировки в очереди не накладывались на рыночное окружение терминала, пока его величество эксперт не закончит свою работу.
Улавливаете, к чему это приведет? Весь терминал начнет задерживать все процессы ради глупой идеи сохранения рыночного снапшота на состоянии обрабатываемой котировки. А если подумать о других инструментах, то только застрелиться останется.
Поэтому наложение рыночных обновлений всегда приоритетно, мгновенно и независимо от других процессов. Все остальные должны асинхронно поспевать за рынком.
Не путайте вопрос доставки правильных и точных потоков данных в терминал и вызов/уведомления экспертов.
Все данные точно и правильно доставляются в терминал, его это основа. Достаточно сравнить чарты.
А вот запуск экспертов(онтик) - это независимое и асинхронное уведомление. Приходящий пакет данных не может ждать каких-то тормозящих экспертов, а должен быть мгновенно наложен на рыночное окружение и лишь факультативно(если эксперт закончил предыдущий вызов) запустить эксперта.
Задумайтесь о ситуации: поток котировок 2 в секунду и работающий эксперт, который тормозит, совершает торговые сделки, но при этом требует, чтобы новые ожидающие котировки в очереди не накладывались на рыночное окружение терминала, пока его величество эксперт не закончит свою работу.
Улавливаете, к чему это приведет? Весь терминал начнет задерживать все процессы ради глупой идеи сохранения рыночного снапшота на состоянии обрабатываемой котировки. А если подумать о других инструментах, то только застрелиться останется.
Поэтому наложение рыночных обновлений всегда приоритетно, мгновенно и независимо от других процессов. Все остальные должны асинхронно поспевать за рынком.
Не согласен.
Допустим, я не использую стакан (bid и ask есть в тике)
Какое представление о положении на рынке ФОРТС я (экперт) буду иметь не понятно с какой котировкой
и объёмом?
Ведь можно, для ФОРТС, не передавать bid и ask ( они есть в стакане ).
И в коде изменения минимальные - подписался на стакан - не транслируются в тике bid и ask
Перечитайте несколько раз мое объяснение, пожалуйста.
Допустим, я не использую стакан (bid и ask есть в тике)
Какое представление о положении на рынке ФОРТС я (экперт) буду иметь не понятно с какой котировкой
С текущей асинхронно обновляемой котировкой и никакой другой.
Если вас вызвали, то все - перед вами в стакане только та котировка, которая есть. Если пришло и наложилось 2 котировки в пакете, то увидите только последнюю. Ибо никто не будет передавать первую котировку эксперту и ждать пока эксперт соизволит завершить ее обсчет. Все, старая котировка ушла и если вы ее не смогли вовремя словить и отработать, значит поезд ушел. По той старой котировке вы ничего все равно исполнить не сможете. Да и по текущей/последней тоже сомнительно исполниться, так как к момент посылки ордера рынок может поменяться.
Никакие "не транслировать bid/ask" не помогут. Устаревшие тики есть устаревшие - никто вам не заморозит рынок и не даст поработать со старыми тиками.
При желании можете:
поставить терминал в колокейшен ближе к брокеру на скоростном компе и будете ловить все активнее
зациклить эксперта, постоянно сканить стакан и маркет вотч чтобы извлекать все что есть чаще
анализировать чарт, анализировать стакан
Вместе с Time & Sales мы подумаем над предоставлением прямого доступа к последнему тиковому потоку цен, чтобы можно было получить доступ к последовательным тикам. В обзоре рынка мы его собираем сессионно. Это даст больше возможностей скальперам.
Вместе с Time & Sales мы подумаем над предоставлением прямого доступа к последнему тиковому потоку цен, чтобы можно было получить доступ к последовательным тикам. В обзоре рынка мы его собираем сессионно. Это даст больше возможностей скальперам.
Это единственное приемлемое решение. Надеюсь, будут фифо очереди для заданных символов. Это решит еще одну, неразрешимую в рамках данной событийной модели проблему, - получение без потерь котировок символов, отличных от символа эксперта.
Время компьютера желательно держать точным, чтобы меньше было шансов неправильно логи понять.
Спасибо за скрипт: вот результаты этого скрипта за 1 минуту 17:36
Особенность OnTick в том, что он реагирует как на изменение Bid/Ask (инфопоток), так и на Last (трейд поток).
В результате получается, что количество вызовов OnTick для биржевых торгуемых инструментов заведомо больше торговых транзакций.
Почему так сделано:
нельзя в рамках живого рынка выдавать нулевые last и last_volume в обзор рынка, так как кто-то из трейдеров взорвется
Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.
Скоро мы включим поток Time & Sales, что даст возможность точно анализировать ленту сделок.
Время компьютера желательно держать точным, чтобы меньше было шансов неправильно логи понять.
Спасибо за скрипт: вот результаты этого скрипта за 1 минуту 17:36
Особенность OnTick в том, что он реагирует как на изменение Bid/Ask (инфопоток), так и на Last (трейд поток).
В результате получается, что количество вызовов OnTick для биржевых торгуемых инструментов заведомо больше торговых транзакций.
Почему так сделано:
нельзя в рамках живого рынка выдавать нулевые last и last_volume в обзор рынка, так как кто-то из трейдеров взорвется
Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.
Скоро мы включим поток Time & Sales, что даст возможность точно анализировать ленту сделок.
Все это, конечно, здорово, но для ФОРТС, где есть стаканы, в структуру MqlTick нужно было добавить флаг котировки.
"Размножение" сделок - это не страшно, страшно то, что реальные сделки пропадают.
P.S. Мой БАН связан с моим IP адресом, пожалуйста, снимите его, а то мне приходится для ответа Вам каждый раз переустанавливать браузер.
Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.
При таком подходе получается следующее:
Как должно быть:
Бумага Время Время(мкс) Цена Кол-во
317922.000000 RTS-12.14 [FORTS] 18:44:54 199000.000000 104140.000000 1.000000317923.000000 RTS-12.14 [FORTS] 18:44:54 261000.000000 104130.000000 1.000000
317924.000000 RTS-12.14 [FORTS] 18:44:54 587000.000000 104140.000000 1.000000
317925.000000 RTS-12.14 [FORTS] 18:44:54 589000.000000 104140.000000 1.000000
317926.000000 RTS-12.14 [FORTS] 18:44:54 691000.000000 104140.000000 1.000000
317927.000000 RTS-12.14 [FORTS] 18:44:54 691000.000000 104140.000000 1.000000
317928.000000 RTS-12.14 [FORTS] 18:44:54 842000.000000 104130.000000 2.000000
317929.000000 RTS-12.14 [FORTS] 18:44:54 919000.000000 104150.000000 1.000000
317930.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104150.000000 1.000000
317931.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104150.000000 1.000000
317932.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 1.000000
317933.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 1.000000
317934.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 3.000000
317935.000000 RTS-12.14 [FORTS] 18:44:55 375000.000000 104140.000000 1.000000
317936.000000 RTS-12.14 [FORTS] 18:44:55 375000.000000 104130.000000 5.000000
317937.000000 RTS-12.14 [FORTS] 18:44:55 796000.000000 104130.000000 1.000000
317938.000000 RTS-12.14 [FORTS] 18:44:55 799000.000000 104130.000000 2.000000
317939.000000 RTS-12.14 [FORTS] 18:44:56 54000.000000 104160.000000 1.000000
317940.000000 RTS-12.14 [FORTS] 18:44:57 235000.000000 104160.000000 1.000000
317941.000000 RTS-12.14 [FORTS] 18:44:57 451000.000000 104140.000000 2.000000
317942.000000 RTS-12.14 [FORTS] 18:44:57 487000.000000 104140.000000 6.000000
317943.000000 RTS-12.14 [FORTS] 18:44:57 521000.000000 104160.000000 1.000000
317944.000000 RTS-12.14 [FORTS] 18:44:57 621000.000000 104160.000000 1.000000
317945.000000 RTS-12.14 [FORTS] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 RTS-12.14 [FORTS] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12.14 [FORTS] 18:44:58 883000.000000 104140.000000 2.000000
317948.000000 RTS-12.14 [FORTS] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 RTS-12.14 [FORTS] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 RTS-12.14 [FORTS] 18:44:58 996000.000000 104160.000000 1.000000
317953.000000 RTS-12.14 [FORTS] 18:44:59 56000.000000 104160.000000 1.000000
317954.000000 RTS-12.14 [FORTS] 18:44:59 560000.000000 104140.000000 1.000000
317955.000000 RTS-12.14 [FORTS] 18:44:59 604000.000000 104140.000000 1.000000
317956.000000 RTS-12.14 [FORTS] 18:44:59 647000.000000 104160.000000 1.000000
Как получаем в МТ5:
NE 0 18:44:54.483 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:54 Bid = 104130 Ask = 104150 Last = 104140 Vol = 1
ES 0 18:44:54.639 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:54 Bid = 104130 Ask = 104150 Last = 104130 Vol = 2
OR 0 18:44:54.720 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:54 Bid = 104130 Ask = 104150 Last = 104150 Vol = 1
NQ 0 18:44:54.983 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104150 Last = 104150 Vol = 1
FP 0 18:44:55.139 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104160 Last = 104160 Vol = 3
JO 0 18:44:55.174 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104140 Ask = 104160 Last = 104130 Vol = 5
GN 0 18:44:55.206 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 5
RM 0 18:44:55.592 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 2
IL 0 18:44:55.891 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:56 Bid = 104130 Ask = 104160 Last = 104160 Vol = 1
HJ 0 18:44:55.921 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:56 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
RI 0 18:44:57.032 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
PH 0 18:44:57.242 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
FG 0 18:44:57.297 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 6
PF 0 18:44:57.328 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
JE 0 18:44:57.436 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
QD 0 18:44:57.838 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 3
DP 0 18:44:58.514 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 13
RR 0 18:44:58.693 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
JP 0 18:44:58.795 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CO 0 18:44:58.852 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
GN 0 18:44:59.358 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
MM 0 18:44:59.406 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
IL 0 18:44:59.453 FORTSTicksAction (RTS-12.14,M1) Time = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CK 0 18:50:31.437 FORTSTicksAction (RTS-12.14,M1) Time = 18:50:24 Bid = 0 Ask = 0 Last = 104160 Vol = 1
KH 0 18:50:33.357 FORTSTicksAction (RTS-12.14,M1) Time = 18:50:24 Bid = 104080 Ask = 104180 Last = 104160 Vol = 1
Это все последние непосредственно перед закрытием сессии (т.е. ниже котировок нету до конца клиринга).
За точку отсчета возьмем выделенные черным три строчки. Вопросов два:
1.Куда делись выделенные красным?
2.Откуда взялось выделенное синим?
Еще вопрос (дополнительный) - какой временной интервал означает "одновременный приход"?
При таком подходе получается следующее:
317945.000000 RTS-12.14 [FORTS] 18:44:58 38000.000000 104160.000000 3.000000317946.000000 RTS-12.14 [FORTS] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12.14 [FORTS] 18:44:58 883000.000000 104140.000000 2.000000
317948.000000 RTS-12.14 [FORTS] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 RTS-12.14 [FORTS] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 RTS-12.14 [FORTS] 18:44:58 996000.000000 104160.000000 1.000000
Это все последние непосредственно перед закрытием сессии (т.е. ниже котировок нету до конца клиринга).
За точку отсчета возьмем выделенные черным три строчки. Вопросов два:
1.Куда делись выделенные красным?
2.Откуда взялось выделенное синим?
Еще вопрос (дополнительный) - какой временной интервал означает "одновременный приход"?
Это не интервал, а скорее физический сетевой пакет. Прилетает пакет на 2-3-4 тика, все они накладываются в базу, но вызов OnTick идет один.
Еще есть шанс, что эксперт может тормозить(быть занятым) и новая пришедшая котировка добавляется в базу, но вызова OnTick не происходит, так как эксперт работает. Если бы такого механизм не было, то мы бы легко переполнили входящие очереди котировок для эксперта и начав посылать старые котировки эксперту и ввели бы его в заблуждение.
Ренат!
Спасибо большое за подробное разъяснение, но...
Для ФОРТС такой подход, как мне кажется, не приемлем.
Должно быть: котировка - объём, и никак иначе.
Было 11 котировок, значит в OnTick их должно быть 11.
Разве не так?
Не так.
Не путайте вопрос доставки правильных и точных потоков данных в терминал и вызов/уведомления экспертов.
Все данные точно и правильно доставляются в терминал, его это основа. Достаточно сравнить чарты.
А вот запуск экспертов(онтик) - это независимое и асинхронное уведомление. Приходящий пакет данных не может ждать каких-то тормозящих экспертов, а должен быть мгновенно наложен на рыночное окружение и лишь факультативно(если эксперт закончил предыдущий вызов) запустить эксперта.
Задумайтесь о ситуации: поток котировок 2 в секунду и работающий эксперт, который тормозит, совершает торговые сделки, но при этом требует, чтобы новые ожидающие котировки в очереди не накладывались на рыночное окружение терминала, пока его величество эксперт не закончит свою работу.
Улавливаете, к чему это приведет? Весь терминал начнет задерживать все процессы ради глупой идеи сохранения рыночного снапшота на состоянии обрабатываемой котировки. А если подумать о других инструментах, то только застрелиться останется.
Поэтому наложение рыночных обновлений всегда приоритетно, мгновенно и независимо от других процессов. Все остальные должны асинхронно поспевать за рынком.
Не так.
Не путайте вопрос доставки правильных и точных потоков данных в терминал и вызов/уведомления экспертов.
Все данные точно и правильно доставляются в терминал, его это основа. Достаточно сравнить чарты.
А вот запуск экспертов(онтик) - это независимое и асинхронное уведомление. Приходящий пакет данных не может ждать каких-то тормозящих экспертов, а должен быть мгновенно наложен на рыночное окружение и лишь факультативно(если эксперт закончил предыдущий вызов) запустить эксперта.
Задумайтесь о ситуации: поток котировок 2 в секунду и работающий эксперт, который тормозит, совершает торговые сделки, но при этом требует, чтобы новые ожидающие котировки в очереди не накладывались на рыночное окружение терминала, пока его величество эксперт не закончит свою работу.
Улавливаете, к чему это приведет? Весь терминал начнет задерживать все процессы ради глупой идеи сохранения рыночного снапшота на состоянии обрабатываемой котировки. А если подумать о других инструментах, то только застрелиться останется.
Поэтому наложение рыночных обновлений всегда приоритетно, мгновенно и независимо от других процессов. Все остальные должны асинхронно поспевать за рынком.
Не согласен.
Допустим, я не использую стакан (bid и ask есть в тике)
Какое представление о положении на рынке ФОРТС я (экперт) буду иметь не понятно с какой котировкой
и объёмом?
Ведь можно, для ФОРТС, не передавать bid и ask ( они есть в стакане ).
И в коде изменения минимальные - подписался на стакан - не транслируются в тике bid и ask
Не согласен.
Перечитайте несколько раз мое объяснение, пожалуйста.
Допустим, я не использую стакан (bid и ask есть в тике)
Какое представление о положении на рынке ФОРТС я (экперт) буду иметь не понятно с какой котировкой
С текущей асинхронно обновляемой котировкой и никакой другой.
Если вас вызвали, то все - перед вами в стакане только та котировка, которая есть. Если пришло и наложилось 2 котировки в пакете, то увидите только последнюю. Ибо никто не будет передавать первую котировку эксперту и ждать пока эксперт соизволит завершить ее обсчет. Все, старая котировка ушла и если вы ее не смогли вовремя словить и отработать, значит поезд ушел. По той старой котировке вы ничего все равно исполнить не сможете. Да и по текущей/последней тоже сомнительно исполниться, так как к момент посылки ордера рынок может поменяться.
Никакие "не транслировать bid/ask" не помогут. Устаревшие тики есть устаревшие - никто вам не заморозит рынок и не даст поработать со старыми тиками.
При желании можете:
Вместе с Time & Sales мы подумаем над предоставлением прямого доступа к последнему тиковому потоку цен, чтобы можно было получить доступ к последовательным тикам. В обзоре рынка мы его собираем сессионно. Это даст больше возможностей скальперам.
Renat:
Вместе с Time & Sales мы подумаем над предоставлением прямого доступа к последнему тиковому потоку цен, чтобы можно было получить доступ к последовательным тикам. В обзоре рынка мы его собираем сессионно. Это даст больше возможностей скальперам.
Что-то у меня остались сомнения.
Щас поставлю выполняться это:
//+------------------------------------------------------------------+ //| Kotirovki.mq5 | //| Copyright 2014 | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, Mikalas" #property link "http://www.mql5.com" #property version "1.02" // MqlTick curr_tick; double start_last = 0; double start_bid = 0; double start_ask = 0; ulong start_volume = 0; // //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit( const int reason ) { } //+------------------------------------------------------------------+ //| Expert On Tick event function | //+------------------------------------------------------------------+ void OnTick() { if ( SymbolInfoTick( _Symbol, curr_tick ) ) { if ( start_last == curr_tick.last ) { if ( start_volume == curr_tick.volume ) { if ( ( start_ask == curr_tick.ask ) && ( start_bid == curr_tick.bid ) ) { Print( curr_tick.time, "; Bid = ", curr_tick.bid, "; Ask = ", curr_tick.ask, "; Last = ", curr_tick.last, "; Vol = ", curr_tick.volume, "; Новая котировка(Всё одинаковое)" ); } else { start_ask = curr_tick.ask; start_bid = curr_tick.bid; Print( curr_tick.time, "; Bid = ", curr_tick.bid, "; Ask = ", curr_tick.ask, "; Last = ", curr_tick.last, "; Vol = ", curr_tick.volume, "; Изменение ask или bid? Или же новая котировка?" ); } } else { start_last = curr_tick.last; start_volume = curr_tick.volume; start_ask = curr_tick.ask; start_bid = curr_tick.bid; Print( curr_tick.time, "; Bid = ", curr_tick.bid, "; Ask = ", curr_tick.ask, "; Last = ", curr_tick.last, "; Vol = ", curr_tick.volume, "Новая котировка (Изменён объём)!" ); } } else { start_last = curr_tick.last; start_volume = curr_tick.volume; start_ask = curr_tick.ask; start_bid = curr_tick.bid; Print( curr_tick.time, "; Bid = ", curr_tick.bid, "; Ask = ", curr_tick.ask, "; Last = ", curr_tick.last, "; Vol = ", curr_tick.volume, "Новая котировка! (Изменена котировка)" ); } } }А завтра посмотрим, что получилось...