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

 
Igor Zakharev #:

Но ТФ и с вашим кодом на отладке всё равно не меняет, баг остается. Речь же идет об отладчике в примере на всех видео :) Без отладчика конечно иначе - если просто на график накинуть. Нужно что бы отладчик поправили,  ChartSetSymbolPeriod() именно в том контексте не исправно работает.

Может заметят это и исправят.

Как Вы представляете себе работу отладчика в точке останова?

Отладчик в точке останова ничего не делает. Стоит. Ждёт действий пользователя.

Вы сами привели цитату из документации про то, что CharSetSymbolPeriod асинхронная функция. Она всего лишь кладёт команду в очередь на исполнение. Отладчик стоит, очередь никто не обрабатывает.

Поставьте брекпойнт на начало функции OnInit и нажмите F5, после смены символа-периода будет вызвана функция OnInit

 
Slava #:

Как Вы представляете себе работу отладчика в точке останова?

Отладчик в точке останова ничего не делает. Стоит. Ждёт действий пользователя.

Вы сами привели цитату из документации про то, что CharSetSymbolPeriod асинхронная функция. Она всего лишь кладёт команду в очередь на исполнение. Отладчик стоит, очередь никто не обрабатывает.

Поставьте брекпойнт на начало функции OnInit и нажмите F5, после смены символа-периода будет вызвана функция OnInit

Спасибо за разъяснение от разработчиков терминала 👍

Такого момента про то, что обработка очереди команд чарта так откладывается - не знал.

Про очередь понимаю. То, что команда из очереди не была обработана в ожидаемом порядке(сразу или на следующих точках останова) понималось как баг. На деле это оказалось спецификой, которую нужно понимать иначе.

Теперь и тонкости с последовательностями в отладчики иллюминированы.

 
Не работает поиск на сайте https://www.mql5.com/
 

Уважаемые специалисты, вопрос о структурах. В конструкторе структуры (находящейся в функции OnTick()) для вспомогательных целей я объявляю некоторые статические переменные, значения которых не должны сбрасываться от вызова к вызову, то есть от тика к тику. Тем не менее, это происходит, т.к. я что-то не учитываю (ранее особо не имел дела со структурами). Как решить эту проблему? И вообще - в конструкторах структур допустимы статические переменные?

 const struct Indies
 {
    double a1,a2;
    bool v1,v2;
    Indies(datetime PT)
    {
        static char SAR_Old = -1,SAR_M1_Old = -1;//эти переменные должны вести себя, как в обычных функциях: единожды проинициализироваться и далее сохранять новые значения
        Print(SAR_Old," ",SAR_M1_Old);//распринтовали: на всех тиках -1 и -1 (а должно быть только на первом, на остальных тиках должно быть 10 и 11)
        SAR_Old = 10; SAR_M1_Old = 11;//присвоили
        Print(SAR_Old," ",SAR_M1_Old);// распринтовали: всё как надо
    }
  } Indie(PreviousTime);
 

Для чего нужно вот это (в <MovingAverages.mqh>)?

//+------------------------------------------------------------------+
//|                                               MovingAverages.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
int ExponentialMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[])
  {
//--- check period
   if(period<=1 || period>(rates_total-begin))
      return(0);
//--- save and clear 'as_series' flags
   bool as_series_price=ArrayGetAsSeries(price);
   bool as_series_buffer=ArrayGetAsSeries(buffer);

   ArraySetAsSeries(price,false);
   ArraySetAsSeries(buffer,false);
//--- calculate start position
   int    start_position;
   double smooth_factor=2.0/(1.0+period);

   if(prev_calculated==0)  // first calculation or number of bars was changed
     {
      //--- set empty value for first bars
      for(int i=0; i<begin; i++)
         buffer[i]=0.0;
      //--- calculate first visible value
      start_position=period+begin;
      buffer[begin] =price[begin];

      for(int i=begin+1; i<start_position; i++)
         buffer[i]=price[i]*smooth_factor+buffer[i-1]*(1.0-smooth_factor);
     }
   else
      start_position=prev_calculated-1;
//--- main loop
   for(int i=start_position; i<rates_total; i++)
      buffer[i]=price[i]*smooth_factor+buffer[i-1]*(1.0-smooth_factor);
//--- restore as_series flags
   ArraySetAsSeries(price,as_series_price);
   ArraySetAsSeries(buffer,as_series_buffer);
//---
   return(rates_total);
  }

Что изменится если убрать его (заменить на подсвеченное)?

int ExponentialMAOnBufferNew(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[])
  {
//--- check period
   if(period<=1 || period>(rates_total-begin))
      return(0);
//--- save and clear 'as_series' flags
   bool as_series_price=ArrayGetAsSeries(price);
   bool as_series_buffer=ArrayGetAsSeries(buffer);

   ArraySetAsSeries(price,false);
   ArraySetAsSeries(buffer,false);
//--- calculate start position
   int    start_position;
   double smooth_factor=2.0/(1.0+period);

   if(prev_calculated==0)  // first calculation or number of bars was changed
     {
      //--- set empty value for first bars
      for(int i=0; i<begin; i++)
         buffer[i]=0.0;
      //--- calculate first visible value
      buffer[begin] =price[begin];
      start_position=begin+1;
     }
   else
      start_position=prev_calculated-1;
//--- main loop
   for(int i=start_position; i<rates_total; i++)
      buffer[i]=price[i]*smooth_factor+buffer[i-1]*(1.0-smooth_factor);
//--- restore as_series flags
   ArraySetAsSeries(price,as_series_price);
   ArraySetAsSeries(buffer,as_series_buffer);
//---
   return(rates_total);
  }
 
Привет!!!   Подскажите пожалуйста, в статье по тестированию указано что спец фкнкция OnChartEvent работает в режиме тестирования.  Но это не так, пробую кликать на графике при визуализации но это событие не отрабатывается.  
 
Kira27 # :
Привет!!!   Подскажите пожалуйста, в статье по тестированию указано что спец фкнкция OnChartEvent работает в режиме тестирования.  Но это не так, пробую кликать на графике при визуализации но это событие не отрабатывается.  
Работает только в индикаторах.
 
Alain Verleyen #:
Работает только в индикаторах.

В экспертах тоже.

 
Andrei Iakovlev #:

В экспертах тоже.

При тестировании с визуализацией?
 
Andrei Iakovlev #:

В экспертах тоже.

В индикаторах МТ5 в режиме тестирования с визуализацией можно поймать события  мышки только при нажатой кнопки мышки, но нельзя поймать просто движение мышки.
В советниках МТ5, к сожалению, вообще нельзя ничего поймать.