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

[Удален]  
fxsaber:
А куда его добавлять и как это хотя бы теоретически может помочь. Это баг терминала. Причем серьезный баг. Потому как мне повезло - я вижу в логе, что индикатор работает. А сколько вот таких индикаторов без выводов в логи пашут в терминале, а Вы о них ничего совсем не знаете. Вот только темы поднимаются, а почему у меня CPU так грузится на пустом терминале?
Добавлять перед проверкой корректности хэндла в OnCalculate(). И если флаг записан - выход из OnCalculate(). Правда, конечно, OnCalculate() это вряд ли остановит... зато никаких действий выполнено не будет..
 
Alexey Kozitsyn:
Добавлять перед проверкой корректности хэндла в OnCalculate(). И если флаг записан - выход из OnCalculate(). Правда, конечно, OnCalculate() это вряд ли остановит... зато никаких действий выполнено не будет..
Типа, пущай неконтролируемое количество индикаторов висит в терминале, ведь они все равно почти ничего не потребляют.
 
Karputov Vladimir:
Пытаюсь как можно более точно локализовать проблему. Это может сильно сократить время отклика на обращение в СервисДеск.
Заявку написали?
 
На MQL5 пишу не долго, ни разу не программист. Знал MQL4, теперь немного знаю MQL5. По какой причине почти каждый день сталкиваюсь с багами в MT5? Фактически, человек с улицы почти каждый день совершенно случайно находит баги! Это что за дела, почему так сыро? Тестеров нет совсем? Не совру сказав, что MT начинает раздражать. А еще больше раздражает осознание, что ни на чем другом я программировать и не умею.
 

А вот и корень зла: пока не просчитан индикаторный буфыер (пока prev_calculated==0) - нельзя ничего делать

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//if(handle!=INVALID_HANDLE)
   if(prev_calculated!=0)
     {
      Buffer[rates_total-1]=MathRand();

      double BufferCopy[];
      Print(__FUNCTION__);
      if(CopyBuffer(handle,0,0,1,BufferCopy)>0)
         Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1]));
     }

   return(rates_total);
  }

 вот так всё работает и индикатор сразу выгружается.

 
Karputov Vladimir:

А вот и корень зла: пока не просчитан индикаторный буфыер (пока prev_calculated!=0) - нельзя ничего делать

 вот так всё работает и индикатор сразу выгружается.

Не работает.
 
fxsaber:
На MQL5 пишу не долго, ни разу не программист. Знал MQL4, теперь немного знаю MQL5. По какой причине почти каждый день сталкиваюсь с багами в MT5? Фактически, человек с улицы почти каждый день совершенно случайно находит баги! Это что за дела, почему так сыро? Тестеров нет совсем? Не совру сказав, что MT начинает раздражать. А еще больше раздражает осознание, что ни на чем другом я программировать и не умею.
Нельзя каждый случай неправильного стиля программирования списывать на баги. Иначе будет как в сказке про пастуха, который без повода кричал: "Волки, волки". Все бросались на помощь - а оказывалась, что волков нет. А вот когда действительно напали волки и пастух снова позвал на помощь - никто не пришёл ему на помощь - все решили, что он снова разыгрывает.
 
Karputov Vladimir:
Нельзя каждый случай неправильного стиля программирования списывать на баги.

Это что за НАЕЗД на ровном месте?! Указываю на явный баг, а мне про лапшу про "стиль".

Мне вот до A100 и Meat, как до Луны пешком. Они баги показывают, хоть я их не понимаю. Но не лезу же со своим "стилем".

 
fxsaber:
Не работает.

Привожу полный код:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1

double Buffer[];

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);

   handle=ChartIndicatorGet(0,1,ChartIndicatorName(0,1,0));
  }

#define TOSTRING(A) #A + " = " + (string)A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//if(handle!=INVALID_HANDLE)
   if(prev_calculated!=0)
     {
      Buffer[rates_total-1]=MathRand();

      double BufferCopy[];
      Print(__FUNCTION__);
      if(CopyBuffer(handle,0,0,1,BufferCopy)>0)
         Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1]));
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Reason)
  {
   Print("#1 OnDeinit");
   if(handle!=INVALID_HANDLE)
     {
      Print("#2 OnDeinit");
      IndicatorRelease(handle);
      Print("#3 OnDeinit");
     }
   Print("#4 OnDeinit");
   return;
  }
//+------------------------------------------------------------------+

и распечатка:

2016.09.23 12:34:03.318 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:03.318 2 (SBRF-12.16,M1)       BufferCopy[0] = 265.0
2016.09.23 12:34:03.319 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 18992.0
2016.09.23 12:34:03.319 2 (SBRF-12.16,M1)       
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       BufferCopy[0] = 265.0
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 12498.0
2016.09.23 12:34:03.502 2 (SBRF-12.16,M1)       
... экономия бумаги :)
2016.09.23 12:34:31.804 2 (SBRF-12.16,M1)       
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       BufferCopy[0] = 614.0
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 5343.0
2016.09.23 12:34:33.159 2 (SBRF-12.16,M1)       
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       OnCalculate
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       BufferCopy[0] = 614.0
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       Buffer[rates_total-1] = 17815.0
2016.09.23 12:34:36.870 2 (SBRF-12.16,M1)       
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #1 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #2 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #3 OnDeinit
2016.09.23 12:34:38.445 2 (SBRF-12.16,M1)       #4 OnDeinit
Файлы:
2.mq5  3 kb
 
Karputov Vladimir:

Привожу полный код:

и распечатка:

У меня не работает - до OnDeinit не доходит даже.

И заметьте, у меня в логе числа совпадают, а у Вас - нет. Мой лог

PP      0       12:41:08.169    Test3 (RTS-12.16,H1)    OnCalculate
FE      0       12:41:08.169    Test3 (RTS-12.16,H1)    BufferCopy[0] = 13573.0
IQ      0       12:41:08.169    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 13573.0
CF      0       12:41:08.169    Test3 (RTS-12.16,H1)    
JO      0       12:41:08.169    Test3 (RTS-12.16,H1)    OnCalculate
QI      0       12:41:08.169    Test3 (RTS-12.16,H1)    BufferCopy[0] = 25434.0
NM      0       12:41:08.169    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 25434.0
MJ      0       12:41:08.169    Test3 (RTS-12.16,H1)    
DJ      0       12:41:08.187    Test3 (RTS-12.16,H1)    OnCalculate
QO      0       12:41:08.187    Test3 (RTS-12.16,H1)    BufferCopy[0] = 9469.0
HK      0       12:41:08.187    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 9469.0
CM      0       12:41:08.187    Test3 (RTS-12.16,H1)    
JF      0       12:41:08.187    Test3 (RTS-12.16,H1)    OnCalculate
OS      0       12:41:08.187    Test3 (RTS-12.16,H1)    BufferCopy[0] = 1887.0
NG      0       12:41:08.187    Test3 (RTS-12.16,H1)    Buffer[rates_total-1] = 1887.0
У меня в терминале ни одного индикатора и советника не запущено.