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

 
Владимир #:

В клубе телепатов скучно, тихо и одиноко, поэтому дополню: в окне с графиком минуток золота со 100К баров 48К объектов (текст и стрелки поровну) гоняются без проблем и видны на любом масштабе; в окне минуток кастома из золота 41К баров и 19К объектов (так же текст и стрелки поровну), но после двух Zoom In они исчезают с экрана, оставаясь в списке объектов как ни в чем ни бывало. Если кто нибудь сталкивался с подобным, как решали, в чем может быть дело?

Нашлась зацепка: МТ5 не любит смотреть в будущее - если кастомный символ убегает в будущее (например тиковый график), уже через пару недель от текущего момента терминал перестаёт отображать объекты на графике. Этот баг масштабозависим - при минимальном увеличении может показывать всё, по мере увеличения (zoom in) граница отображения объектов будет смещаться все ближе к настоящему моменту, отдаляясь от правого края графика. Приходится сносить все построения кастомов в прошлое.

 

Случайно в ME произвел замену вместо поиска в файлах. Кнопка отката не работает - ужас!!!

Заменил на пустое значение :((( Где список файлов в логе вместе с правками - не нашел.

 

 

Подключаю класс

//--- COpenCL class
#include <OpenCL/OpenCL.mqh>
COpenCL           m_OpenCL;
//--- исходные коды кернелов
#resource "Calc_Summ_Stolb_Matrix.cl" as string cl_tester

Чего то там считаю, в конце кода

//--- remove OpenCL objects
   m_OpenCL.Shutdown();

Однако в логе

2024.09.19 07:49:34.553 Quant_Svod_Biv3_v01 (GBPUSD,H1) 32 undeleted OpenCL objects found:
2024.09.19 07:49:34.553 Quant_Svod_Biv3_v01 (GBPUSD,H1)    CLContext: 4 objects
2024.09.19 07:49:34.553 Quant_Svod_Biv3_v01 (GBPUSD,H1)    CLProgram: 4 objects
2024.09.19 07:49:34.553 Quant_Svod_Biv3_v01 (GBPUSD,H1)    CLKernel: 24 objects

Как правильно удалить эти объекты в конце кода?

 

баг:

говорю за МТ5 под Wine на MacOS на build 4410

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

проявляется это рандомно, ужасно неудобно 

 

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


double Calc()
{
  double Res = 0;

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

void OnChartEvent( const int id, const long&, const double&, const string& ) 
{
  if (id == CHARTEVENT_KEYDOWN)
  {
    Print("Calculating...");    
    Print(Calc());
  }
}

Этот советник по нажатию клавиши делает расчеты. Как модифицировать советник, чтобы повторные нажатия клавиши во время расчетов не вызвали повторные расчеты?


2024.09.23 10:09:54.802 Calculating...
2024.09.23 10:09:57.138 2380.6605050566823
2024.09.23 10:09:57.138 Calculating...
2024.09.23 10:09:59.475 3362.419766547137

Это лог, когда я дважды (без перерыва) нажал на клавишу. Видно, что после расчета запустился второй расчет.

 
fxsaber #:

Этот советник по нажатию клавиши делает расчеты. Как модифицировать советник, чтобы повторные нажатия клавиши во время расчетов не вызвали повторные расчеты?

К сожалению, только такое решение пришло в голову.

void OnChartEvent( const int id, const long&, const double&, const string& ) 
{
  if (id == CHARTEVENT_KEYDOWN)
  {
    TEMP Temp;
    
    if (Temp.Is())
    {
      Print("Calculating...");    
      Print(Calc());
    }   
  }
}

class TEMP
{
private:
  static ulong PrevTime;
  
  const ulong Interval;
  bool IsValue;
  
public:
  TEMP( const ulong uInterval = 1000 ) : Interval(uInterval), IsValue(false) {}
  
  bool Is() { return(this.IsValue = (::GetTickCount64() - TEMP::PrevTime) > this.Interval); }
  
  ~TEMP( void ) { if (this.IsValue) TEMP::PrevTime = ::GetTickCount64(); }
};

static ulong TEMP::PrevTime = 0;
 
fxsaber #:

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


Этот советник по нажатию клавиши делает расчеты. Как модифицировать советник, чтобы повторные нажатия клавиши во время расчетов не вызвали повторные расчеты?


Это лог, когда я дважды (без перерыва) нажал на клавишу. Видно, что после расчета запустился второй расчет.

Флаг пропиши,программист))))
 
Dz Mak #:
Флаг пропиши,программист))))

Покажи как, программист)))

 
fxsaber #:

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


Этот советник по нажатию клавиши делает расчеты. Как модифицировать советник, чтобы повторные нажатия клавиши во время расчетов не вызвали повторные расчеты?


Это лог, когда я дважды (без перерыва) нажал на клавишу. Видно, что после расчета запустился второй расчет.

Я-бы сделал по аналогии с новым баром. Только замеряем время в секундах. Если «от» прошло меньше заданных секунд, кури бамбук.

 
Alexey Viktorov #:

Я-бы сделал по аналогии с новым баром. Только замеряем время в секундах. Если «от» прошло меньше заданных секунд, кури бамбук.

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