Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения - страница 43

 

b. 2592:

A mysterious error 4603 and a missing hint from the compiler.
I have a custom indicator where I (just to test it) defined 8 buffers only then to declare a buffer 9. The compiler accepts it and does throw a hint of the number mismatch: Line 15 and 37, 38:

Загадочная ошибка 4603 и пропущенная подсказка компилятора.
У меня есть пользовательский индикатор, в котором я (просто для проверки) определил 8 буферов, а затем объявил буфер 9. Компилятор принимает его и бросает намек на несовпадение чисел: Строки 15 и 37, 38

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   7
...
#property indicator_type8   DRAW_NONE
#property indicator_color8  clrNONE 
#property indicator_type9   DRAW_NONE  //<= more than indicator_buffers, no hint from the compiler?
#property indicator_color9  clrNONE 

After that on line 91 in OnInit() when I run it in the debugger it throws error #  4603, Wrong identifier of the property of user indicator - and I don't know why.
It doesn't harm the execution nor the results, everything is ok but I'd like to understand it:

После этого на линии 91 в OnInit() при запуске в отладчике выдается ошибка # 4603, Неверный идентификатор свойства пользовательского индикатора - и я не знаю почему.
Это не вредит ни исполнению, ни результатам, всё в порядке, но хотелось бы это понять:

int OnInit()
  {
   min_rates_total=int(Length)+2;

   SetIndexBuffer(0,Lne,INDICATOR_DATA);
   ArraySetAsSeries(Lne,true);
...
   SetIndexBuffer(6,Lo,INDICATOR_DATA);
   ArraySetAsSeries(Lo,true);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE); // <= like before everything is ok

   SetIndexBuffer(7,Wpr,INDICATOR_DATA);
   ArraySetAsSeries(Wpr,true);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE); // <= ERR_CUSTOM_WRONG_PROPERTY, 4603, Wrong identifier of the property of user indicator (while dubugging)
 

The indicator is attached to reproduce the errors.
Индикатор прикреплен для воспроизведения ошибок.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Свойства пользовательских индикаторов
  • www.mql5.com
Количество индикаторных буферов, которые можно использовать в пользовательском индикаторе, не ограничено. Но каждому массиву, который назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(), должен быть указан тип данных, которые он будет хранить. Это может быть одно из значений перечисления ENUM_INDEXBUFFER_TYPE...
Файлы:
 

Когда будет исправлена эта существенная ошибка, вносящее искажения в индикаторы и советники, приводящая к неправильным решениям и потерям денежных средств!?

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

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

Aleksey Vyazmikin, 2020.09.07 17:40

Билд 2560 (x64)

void OnStart()
{

   datetime Fp=0,Arr[];
   if(CopyTime(NULL,PERIOD_D1,iTime(Symbol(),PERIOD_CURRENT,0),1+3,Arr)>0)Fp=Arr[0];
   Print("Fp=",TimeToString(Fp,TIME_DATE|TIME_MINUTES));

}

Сегодня 07.09.2020 - получаю результат

2020.09.07 18:38:43.564 CopyTime_Test (Si-9.20,M1)      Fp=2020.09.04 00:00

Билд 2361 (x32)

2020.09.07 18:38:43.564 CopyTime_Test (Si-9.20,M1)      Fp=2020.09.02 00:00

Правильный результат выдает 2361, сегодня понедельник, баров за выходные нет, а билд 2560 учитывает виртуальные бары за выходные. Прошу исправить эту критическую неточность!


 
Carl Schreiber:

b. 2592:


The indicator is attached to reproduce the errors.
Индикатор прикреплен для воспроизведения ошибок.

Couldn't reproduce in 2592 build



 
Rashid Umarov:

Couldn't reproduce in 2592 build


In the debugger! - It is not a compiler error but a runtime error?

1.


2.


3.


 
Carl Schreiber:

In the debugger! - It is not a compiler error but a runtime error?

1.


2.


3.


Я Вас не понимаю. Где перевод?

 
Carl Schreiber:

In the debugger! - It is not a compiler error but a runtime error?

1.


2.


3.


Используйте MQL Wizard

и не будет никаких проблем:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2020, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2020, Vladimir Karputov"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 9
#property indicator_plots   8
//--- plot Lne
#property indicator_label1  "Lne"
#property indicator_type1   DRAW_LINE
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot LneColor
#property indicator_label2  "LneColor"
#property indicator_type2   DRAW_COLOR_LINE
#property indicator_color2  clrYellow,clrAqua
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot Chg
#property indicator_label3  "Chg"
#property indicator_type3   DRAW_LINE
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- plot Dev
#property indicator_label4  "Dev"
#property indicator_type4   DRAW_LINE
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1
//--- plot Atr
#property indicator_label5  "Atr"
#property indicator_type5   DRAW_LINE
#property indicator_style5  STYLE_SOLID
#property indicator_width5  1
//--- plot Hi
#property indicator_label6  "Hi"
#property indicator_type6   DRAW_LINE
#property indicator_style6  STYLE_SOLID
#property indicator_width6  1
//--- plot Lo
#property indicator_label7  "Lo"
#property indicator_type7   DRAW_LINE
#property indicator_style7  STYLE_SOLID
#property indicator_width7  1
//--- plot Wpr
#property indicator_label8  "Wpr"
#property indicator_type8   DRAW_LINE
#property indicator_style8  STYLE_SOLID
#property indicator_width8  1
//--- input parameters
input int      Input1=9;
//--- indicator buffers
double         LneBuffer[];
double         LneColorBuffer[];
double         LneColorColors[];
double         ChgBuffer[];
double         DevBuffer[];
double         AtrBuffer[];
double         HiBuffer[];
double         LoBuffer[];
double         WprBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,LneBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,LneColorBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LneColorColors,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(3,ChgBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,DevBuffer,INDICATOR_DATA);
   SetIndexBuffer(5,AtrBuffer,INDICATOR_DATA);
   SetIndexBuffer(6,HiBuffer,INDICATOR_DATA);
   SetIndexBuffer(7,LoBuffer,INDICATOR_DATA);
   SetIndexBuffer(8,WprBuffer,INDICATOR_DATA);
   //---
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Файлы:
Test.mq5  9 kb
 

Билд 2560.

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

 
Vladimir Karputov :

Используйте MQL Wizard

и не будет никаких проблем:

Таким образом окрашенная линия становится серой и ошибка 4603 не исчезает :(

This way the clolored line becomes gray and the the error 4603 does not not disappear :(
Файлы:
 
Carl Schreiber:

Таким образом окрашенная линия становится серой и ошибка 4603 не исчезает :(

This way the clolored line becomes gray and the the error 4603 does not not disappear :(

Я сгенерировал код при помощи MQL Wizard - и у меня нет ошибки (не могу воспроизвести на 2593).

Пожалуйста используйте код из  - удаётся ли в этом коде воспроизвести ошибку?

Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения
Новая версия платформы MetaTrader 5 build 2560: Улучшения во встроенной системе обучения
  • 2020.09.09
  • www.mql5.com
В пятницу 24 июля 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Carl Schreiber:

Таким образом окрашенная линия становится серой и ошибка 4603 не исчезает :(

This way the clolored line becomes gray and the the error 4603 does not not disappear :(

когда прописаны буфера, и не используются в расчетах, индикатор начинает вести себя непредсказуемо, например хватать цвета для рабочих plot с соседних буферов которые не используются, а часто и просто "дефолтный" серый цвет


сейчас борюсь вот с такой проблемой не могу сообразить, почему так

линии расходятся на одинаковых индикаторах, но стоит обновить картинку сменой периода, как они сливаются в одну линию как и должны работать, не пойму где загвоздка