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

 
fxsaber #:

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

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

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

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

 
Aleksandr Slavskii #:

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

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

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

 

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


 
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-событий. Она решена.

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