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

 

Я столкнулся с этой проблемой когда использовал в советнике индикатор Spy

Получалось, что если в советнике много  торгуемых символов да ещё и хорошо ликвидных, то очередь событий забивалась так, что вис терминал.

Использовать фиксированное время для пропуска событий решение не айс.

Я тогда просто ограничил количество символов в советнике. Решение тоже так себе.

Особенности языка mql5, тонкости и приёмы работы - Попробуйте сэкономить на MQL5-оптимизации кода.
Особенности языка mql5, тонкости и приёмы работы - Попробуйте сэкономить на MQL5-оптимизации кода.
  • 2018.01.28
  • fxsaber
  • www.mql5.com
автоматическим торговым системам и тестированию торговых стратегий. Это реально работает даже без долгожданных сервисов. Индикатор из iCustom моделирует пользовательские сообщения еще в течении где-то 10 миллисекунд после последнего обращения iCustom
 
Aleksandr Slavskii #:

Там проблема, что накапливается очередь событий и пока она последовательно не отработается, OnChartEvent не успокоится.

Это иногда большая проблема, что нечем прервать выполнение OnChartEvent, типа "return (ChartEventStop);"

 
Aleksandr Slavskii #:

Там проблема, что накапливается очередь событий и пока она последовательно не отработается, OnChartEvent не успокоится.

Ну и что? Первый тык вызывает расчёты. Фиксируется время и пока не пройдёт заданное количество секунд расчёты не вызываются.

Или действительно шлагбаум. Начали расчёты, опустили шлагбаум, в нужное время или по другому событию подняли и ждём паровоз…

 

hint: вообще не вести рассчётов в OnChartEvent. Там только расставлять флажки "нужно-бы вычислить"

а сами рассчёты в OnTimer по шагам или DLL-кой в отдельном треде

 
Maxim Kuznetsov #:

hint: вообще не вести рассчётов в OnChartEvent. Там только расставлять флажки "нужно-бы вычислить"

Без разницы, в какой On-функции делать расчеты.

 
Aleksandr Slavskii #:

Там проблема, что накапливается очередь событий и пока она последовательно не отработается, OnChartEvent не успокоится.

Все так. По этой причине и задал вопрос.

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

Ошибки, баги, вопросы

fxsaber, 2024.09.23 09:13

Как идентифицировать время действия, которое породило ChartEvent-событие?

 
Alexey Viktorov #:

Или действительно шлагбаум. Начали расчёты, опустили шлагбаум, в нужное время или по другому событию подняли и ждём паровоз…

Да, по ваше подсказке вроде работает)))

//+------------------------------------------------------------------+
double Calc()
  {
   double Res = 0;

   for(int i = 0; i < 1e8; i++)
      Res += MathSin(MathRand());

   EventChartCustom(0, 0, 0, 0, "");

   return(Res);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long&, const double&, const string&)
  {
   static bool aaa = true;
   if(id == CHARTEVENT_KEYDOWN && aaa)
     {
      Print("Calculating...");
      Print(Calc());
      aaa = false;
     }
   if(id == CHARTEVENT_CUSTOM)
      aaa = true;
  }
//+------------------------------------------------------------------+
 
fxsaber #:

Без разницы, в какой On-функции делать расчеты.

не совсем :-) OnChartEvent худший кандидат для рассчётов

в OnChartEvent не контроллируется поток и события буферизуются. Какой нибудь индикатор выставит флаг MOUSE_MOVE и будет вал вызовов, на их фоне нажатие кнопки застрянет. В OnTick отправили синхронный приказ, ждали ответа 2 сек, за это время трижды нажата кнопка - OnChartEvent вызовется сразу три раза подряд. 

и опять-же с ним - в нём часто обращения к чарту, а они долгие. 

 
Aleksandr Slavskii #:

Да, по ваше подсказке вроде работает)))

Или я опять пёрднул в лужу?

Интересное решение, спасибо.

 

Почему в тестере, при вызове перекрестия по средней клавиши мыши не показывается подсчет процента изменения цены, а только пункты?