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

 
fxsaber #:

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

Посмотри такой подход, может наталкнёт на другие мысли и не использовать события графика.
Цикл тут для примера ожидания. Если всё перенести в OnTimer, думаю будет работать так-как тебе надо.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{


   //--------------------------------------------------------
   //бесконечный цикл распознавания нажатых кнопок клавиатуры
   while(!IsStopped())
   {
      //нажмите кнопку escape, чтобы выйти из программы
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_ESCAPE) != 0)   
         break;
         
      //нажмите PageDown, чтобы сохранить изображение графика
      if(TerminalInfoInteger(TERMINAL_KEYSTATE_PAGEDOWN) != 0)
      {
         string file_names[];
         if(FileSelectDialog("Save Picture",NULL,"All files (*.*)|*.*",FSD_WRITE_FILE,file_names,"Image.png") < 1)
            continue;            
         ChartScreenShot(0,file_names[0],GRAPH_X,GRAPH_Y);
      }
      Sleep(100);
   }




}
 
Roman #:

Если всё перенести в OnTimer, думаю будет работать так-как тебе надо.


Проблема в очереди.

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

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

Aleksandr Slavskii, 2024.09.23 10:42

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


Несколько рабочих готовых решений были предложены в коде.

 
fxsaber #:


Проблема в очереди.


Несколько рабочих готовых решений были предложены в коде.

scr

С учётом этого и был предложен код, без использования OnChartEvent.

 
Roman #:

С учётом этого и был предложен код, без использования OnChartEvent.

Нужно делать расчеты по нажатию определенной клавиши/мыши и т.д.

 
fxsaber #:

Нужно делать расчеты по нажатию определенной клавиши/мыши и т.д.

btn


Нужно исходить из того, что доступно ))
Для клавиш есть некоторые предопределенные идентификаторы для функций, из которых можно делать комбинации.

Константа, это ведь некое число правильно? Можно проверить недокументированное использование.
Попробовать в функцию передать константу соответствующей кнопки из MSDN.
Или вообще передать константу нажатия мыши.
Кто его знает, может сработает, я не проверял.

 
Roman #:

Нужно исходить из того, что доступно ))

Допустим, по клавише Q вы открываете позицию.


  1. Не в OnChartEvent запустился расчет.
  2. Во время расчета вы нажали Q-клавишу три раза, не понимая, почему не открывается позиция.
  3. После завершения расчетов (а это может быть через много времени, когда уже не актуально) советник откроет три позиции.

Чтобы такого не происходило, были даны решения.

Задача об игнорировании случайных ChartEvent-событий. Она решена.

 
fxsaber #:
Задача об игнорировании случайных ChartEvent-событий. Она решена.

Это бы решение опубликовать в ветке особенностей. Если не сложно.

 

Господа, ещё один баг или фича, уж не знаю

во вложении скрин из окна market watch

крайне правый столбец отражает такой параметр, как дневная волатильность; stoxx50 и золото (первые 2 сверху) точно не имеют 10% в последний торговый день, впрочем как и в предыдущие дни; этого просто не может быть, да и ещё несколько инструментов ниже с этой же фишкой

раньше этот параметр работал нормально, но в какой-то момент сошёл с ума; может это у брокера проблема, а может как-то не так начал считать; я запускаю терминал в MacOs с Wine; последний раз апдейт терминала был вчера по-моему 

Файлы:
 

Мультивалютный советник, получает событие "новый тик" с помощью индикатора Spy.

// https://www.mql5.com/ru/forum/170952/page68#comment_6406566
#property indicator_chart_window
#property indicator_plots 0
input long Chart = 0; // идентификатор графика-получателя события
input int Index = 0;
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const int, const double &[])
  {
   if(prev_calculated)
     {
      MqlTick tikc;
      SymbolInfoTick(_Symbol, tikc);
      EventChartCustom(Chart, 0, Index, tikc.bid, _Symbol);
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

В OnChartEvent получает пользовательское событие, и после этого идёт расчёт по символу, на котором пришёл новый тик.

void OnChartEvent(const int id, const long &lparam, const double&, const string&)
  {
   if(id == CHARTEVENT_CUSTOM)
      Calc((int)lparam);// основной расчёт советника
  }

Spy в советнике запускаю примерно так.

   string Symbols[9] = {"SBER", "SBERP", "QIWI", "POLY", "VTBR", "MOEX", "CBOM", "BSPB", "TCSG"};
   int spy[];
   ArrayResize(spy, 9);
   for(int i = 0; i < 9; i++)
      spy[i] = iCustom(Symbols[i], PERIOD_M5, "Spy.ex5", ChartID(), i);

Если символов до девяти штук, то вроде советник работает норм, если символов девять и больше, то время от времени в лог записывается такая ошибка и советник перестаёт работать совсем.

В лог попадают не все символы из советника, обычно только половина.

Spy (BSPB,W1)   indicator is too slow, 3063 ms. rewrite the indicator, please
Spy (TCSG,W1)   indicator is too slow, 3063 ms. rewrite the indicator, please
Spy (SBER,W1)   indicator is too slow, 3063 ms. rewrite the indicator, please
Spy (VTBR,W1)   indicator is too slow, 3063 ms. rewrite the indicator, please
Spy (SBERP,W1)  indicator is too slow, 3031 ms. rewrite the indicator, please
Spy (CBOM,W1)   indicator is too slow, 3078 ms. rewrite the indicator, please

Подскажите в чём может быть причина такой ошибки? Что в этом индикаторе Spy может тормозить?

 
Aleksandr Slavskii #:

Мультивалютный советник, получает событие "новый тик" с помощью индикатора Spy.

В OnChartEvent получает пользовательское событие, и после этого идёт расчёт по символу, на котором пришёл новый тик.

Spy в советнике запускаю примерно так.

Если символов до девяти штук, то вроде советник работает норм, если символов девять и больше, то время от времени в лог записывается такая ошибка и советник перестаёт работать совсем.

В лог попадают не все символы из советника, обычно только половина.

Подскажите в чём может быть причина такой ошибки? Что в этом индикаторе Spy может тормозить?

А зачем, простите, такие извращения, если по перечисленным инструментам есть событие «изменения в стакане цен»???