OnTick
Матчасть нужно читать, коллега ;-)
NewTick
Событие NewTick генерируется при поступлении новых котировок и обрабатывается функцией OnTick() у присоединенных советников. Если при поступлении новой котировки выполнялась функция OnTick, запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником, так как соответствующее событие не будет поставлено в очередь событий эксперта.
Терминал получает котировки. Приход новой котировки (изменение цены по сути) ведёт к генерации терминалом события нового тика. Это реакция терминала на изменение цены. И уже тогда советник получает сообщение о том, что сгенерировано событие нового тика. Реакция советника - обработка тика и вызов функции-обработчика OnTick().
В итоге код советника - это набор модулей, обслуживающих событийно-ориентированное программирование...
Я думаю, Serj_Che имел ввиду не совсем это. Поясняю:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Renat, 2013.10.28 13:33
Все дело в особенностях датафида и активности рынка. Стакан - лишь один из вариантов множества разных датафидов, где пакетные апдейты являются частой ситуацией.
В какой-то момент прилетает пачка тиков (2-3-N), что приводит к последовательным N вызовам индикатора и только 1 вызову эксперта.
У большинства брокеров спокойные котировки и пакет можно получить разве что на сильных движениях рынка.
И вопрос соответственно в том - кто определяет сколько тиков будет в пачке (N) которая прилетит в терминал.
Интересный вопрос...
Я думаю, Serj_Che имел ввиду не совсем это. Поясняю:
И вопрос соответственно в том - кто определяет сколько тиков будет в пачке (N) которая прилетит в терминал.
Интересный вопрос...
Из справки:
Функция OnTick() не является обработчиком каждого тика, она уведомляет эксперта об изменениях на рынке. Изменения могут быть пакетными: в терминал может одновременно прийти несколько тиков, но функция OnTick() будет вызвана лишь один раз для уведомления эксперта о последнем состоянии рынка.
Ранее в советнике использовал OnTick(), ошибок не возникало.
Решил переделать через OnBookEvent(), полезли ошибки, какая то чехарда получилась. Как будто терминал сам с собой не дружит.
GD 0 11:32:33.345 Trades 'xxxxx': modify order #12970611 buy limit 1.00 SBRF-9.15 at 7732 (7723) sl: 0 tp: 0 -> 7734, sl: 0 tp: 0
FE 0 11:32:33.376 Trades 'xxxxx': modify order #12970611 buy limit 1.00 SBRF-9.15 at 7732 (7723) sl: 0 tp: 0 -> 7734, sl: 0 tp: 0 placed for execution in 35 ms
RD 0 11:32:33.392 Trades 'xxxxx': modify order #12970610 sell limit 1.00 SBRF-9.15 at 7762 sl: 0 tp: 0 -> 7764, sl: 0 tp: 0
EE 0 11:32:33.423 Trades 'xxxxx': modify order #12970610 sell limit 1.00 SBRF-9.15 at 7762 sl: 0 tp: 0 -> 7764, sl: 0 tp: 0 placed for execution in 36 ms
FR 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
DH 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
RF 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
PL 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
NJ 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
LP 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
JO 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
HE 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
FS 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
DI 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
RG 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
PM 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
NK 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
LQ 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
JH 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
HF 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
FL 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
DJ 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
RP 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
PN 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
ND 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
LR 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
JI 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
HG 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
FM 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
DK 2 11:32:33.423 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7762.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
HR 0 11:32:33.454 Trades 'xxxxx': modify order #12970610 sell limit 1.00 SBRF-9.15 at 7764 sl: 0 tp: 0 -> 7769, sl: 0 tp: 0
LR 0 11:32:33.486 Trades 'xxxxx': modify order #12970610 sell limit 1.00 SBRF-9.15 at 7764 sl: 0 tp: 0 -> 7769, sl: 0 tp: 0 placed for execution in 35 ms
IL 2 11:32:33.486 Trades 'xxxxx': failed modify order #12970610 sell limit 1.00 at 7764.00000 sl: 0.00000 tp: 0.00000 -> 7769.00000, sl: 0.00000 tp: 0.00000 [Invalid request]
Используется стандартный торговый класс.
Как избавиться от этих ошибок? Сделать свои торговые функции?
ну вы бы ещё распечатку побольше сделали бы, удобнее было бы читать ;-)
причём однотипные строки... накой?
Какая причина ошибки? Код какой?
ну вы бы ещё распечатку побольше сделали бы, удобнее было бы читать ;-)
причём однотипные строки... накой?
Какая причина ошибки? Код какой?
Меньше не получилось )
Это чтобы понять суть ошибки,
Советник хочет модифицировать ордер, терминал отвечает неправильный запрос, после того как ордер все таки модифицировался - в догонку еще раз пишет что неправильный запрос.
Причина ошибки из журнала же видно:
10013 | Неправильный запрос |
Добрый день!
Поскольку функция OnBookEvent() является широковещательной, то
необходимо фильтровать события для своего символа:
//+------------------------------------------------------------------+ //| Expert Book Event function | //+------------------------------------------------------------------+ void OnBookEvent( const string &a_symbol ) { if ( a_symbol == MySymbol ) { //Наше событие! } }
И всё заработает правильно.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Событие OnTick кто посылает в терминал?
Как заявляют разработчики терминала, событие OnTick накопительное.
Соответственно вопрос: когда оно накопится и кто решает что уже пора, накопилось? ))
Нет все понятно, но кто конкретно? ))
Посылает брокер на свое усмотрение,
или идет напрямую от поставщика котировок независимо от брокера? - Сервер решает: ну всЁ, пора!