Ошибки, баги, вопросы - страница 3583

 

не велика беда, так работает на всех обработчиках,

Из Справки:

Программа получает события только от графика, на котором она запущена. Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь. Обработка событий таймера производится по такой же схеме – если в очереди находится или уже обрабатывается событие Timer, то новое событие таймера не ставится в очередь.

Про стакан там не сказано, но он ведь не работает в Тестере, и сыпет не "нужными" изменениями, т.е. он еще больше заспамит робота чем все вышеперечисленные обработчики.

 
Alexey Viktorov #:

Спасибо. Почти прочёл.

Вот меня интересует такой вопрос: Ведь статья лохматого 2011 года… Прошло аж ТРИНАДЦАТЬ ЛЕТ! Представляете на сколько изменился язык?

Я не знаю у всех-ли брокеров имеются стаканы цен по валютным парам, но MQ-Demo работает с огромным успехом.

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

Я не эксперт, поэтому не могу понять, каким образом вы собираетесь получить тики из стакана? Ну или хотя бы не сам тик, а событие "новый тик".

Мнится мне, вы путаете тёплое с мягким. Поправьте, если ошибаюсь.

 
Aleksandr Slavskii #:

Я не эксперт, поэтому не могу понять, каким образом вы собираетесь получить тики из стакана? Ну или хотя бы не сам тик, а событие "новый тик".

Мнится мне, вы путаете тёплое с мягким. Поправьте, если ошибаюсь.

https://www.mql5.com/ru/articles/1179

Рецепты MQL5 - обработка события BookEvent
Рецепты MQL5 - обработка события BookEvent
  • www.mql5.com
В статье рассматриваются событие стакана BookEvent и принцип его обработки. В качестве примера создается MQL5-программа, обрабатывающая состояния стакана. Используется объектно-ориентированный подход. Результаты обработки выводятся на экран в виде панели и уровней стакана.
 
Aleksandr Slavskii #:
Я не эксперт, поэтому не могу понять, каким образом вы собираетесь получить тики из стакана? Ну или хотя бы не сам тик, а событие "новый тик".

Каждому тику соответствует изменение стакана, но не каждому изменению стакана соответствует тик.

 

Для вас тоже, что стакан, что лента сделок - всё едино?

 
JRandomTrader #:

Каждому тику соответствует изменение стакана, но не каждому изменению стакана соответствует тик.

Совершенно верно!

 
Aleksandr Slavskii #:

Я не эксперт, поэтому не могу понять, каким образом вы собираетесь получить тики из стакана? Ну или хотя бы не сам тик, а событие "новый тик".

Мнится мне, вы путаете тёплое с мягким. Поправьте, если ошибаюсь.

Вот два кода

void OnBookEvent(const string &symbol)
 {
  MarketBookGet(SYMBOL_NAME, bookInfo);
  string comment = StringFormat("Стакан по %s \n%s %f\n%s %f", SYMBOL_NAME, EnumToString(bookInfo[4].type), bookInfo[4].price,
                                EnumToString(bookInfo[5].type), bookInfo[5].price);
  MqlTick tick;
  SymbolInfoTick(SYMBOL_NAME, tick);
  printf("%s Symbol %s time_msc %s:%d", __FUNCTION__, SYMBOL_NAME, TimeToString(tick.time), tick.time_msc%1000);
  Comment(comment);
 }/******************************************************************/
void OnTick()
 {
  MqlTick tick;
  SymbolInfoTick(_Symbol, tick);
  printf("%s Symbol %s time_msc %s:%d", __FUNCTION__, _Symbol, TimeToString(tick.time), tick.time_msc%1000);
 }/******************************************************************/

запущены одновременно. OnBookEvent работает на EURUSD а OnTick на GBPUSD. ТФ не выбирал. Какой график был открыт такой и использовался.

И вот результат

2024.10.04 14:01:35.593 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:200
2024.10.04 14:01:35.595 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:200
2024.10.04 14:01:36.092 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:699
2024.10.04 14:01:36.098 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:699
2024.10.04 14:01:36.593 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:699
2024.10.04 14:01:36.595 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:201
2024.10.04 14:01:38.097 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:704
2024.10.04 14:01:38.101 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:704
2024.10.04 14:01:38.596 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:704
2024.10.04 14:01:39.514 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:3
2024.10.04 14:01:39.515 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:3
2024.10.04 14:01:39.899 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:504
2024.10.04 14:01:39.903 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:504
2024.10.04 14:01:40.602 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:504
2024.10.04 14:01:40.609 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:209
2024.10.04 14:01:41.101 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:209
2024.10.04 14:01:42.002 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:209
2024.10.04 14:01:42.005 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:606
2024.10.04 14:01:42.506 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:606
2024.10.04 14:01:43.376 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:919
2024.10.04 14:01:43.376 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:919
2024.10.04 14:01:44.606 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:919
2024.10.04 14:01:44.618 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:212
2024.10.04 14:01:45.510 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:212
2024.10.04 14:01:46.014 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:615
2024.10.04 14:01:46.015 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:615
2024.10.04 14:01:47.814 TestOnTick (GBPUSD,H1)  OnTick Symbol GBPUSD time_msc 2024.10.04 14:01:416
2024.10.04 14:01:47.814 TestBookEvent (EURUSD,H4)       OnBookEvent Symbol GBPUSD time_msc 2024.10.04 14:01:416

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

Да,,, забыл в начале первого кода

#define   SYMBOL_NAME   "GBPUSD" 

MqlBookInfo bookInfo[];
 
Aleksandr Slavskii #:

Для вас тоже, что стакан, что лента сделок - всё едино?

когда начнете справку читать?

вам дают информацию,

 

Alexey Viktorov #:

И вот результат

Жаль, в "результате" секунды потеряны, есть только минуты и ms.

 
Alexey Viktorov #:

Вот два кода

запущены одновременно. OnBookEvent работает на EURUSD а OnTick на GBPUSD. ТФ не выбирал. Какой график был открыт такой и использовался.

И вот результат

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

Да,,, забыл в начале первого кода

в обработке OnBookEvent идеологическая ошибка !

там ненадо (вообще нельзя) обращаться к SymbolInfoTick - bid и ask надо брать по мин и макс лимиток из стакана. Это не только для MT, это вообще во всех терминалах и API