Отличие работы прорисовки нескольких линий индикатора в МТ4 и в МТ5

 

Перенес текст из https://www.mql5.com/ru/forum/314904/page3#comment_11984545

в отдельную ветку.

Artyom Trishkin:
В той статье много чего из предложенного не оптимально.

Артем, как найти на форуме информацию о создании нескольких индикаторных буферов?

Интересует вопрос, как привязывать цвета и стили для нескольких индикаторных буферов.

У меня выводятся несколько зигзагов одновременно. Каждой линии зигзага необходимо задать свой цвет и стиль.

В МТ4 проблем не было. В МТ5 не нахожу, как это сделать. В описании языка об этом нет информации. Точнее, там информация неполная и размытая.

Задавать цвет и стиль необходимо не через #property. Стиль и тип линий может меняться через графический интерфейс.

Задаю

#property indicator_buffers 28
#property indicator_plots 28

Проблемы с этими буферами:

   SetIndexBuffer(8,Lmzz1,INDICATOR_DATA);
   SetIndexBuffer(9,Hmzz1,INDICATOR_DATA);
   SetIndexBuffer(10,Lmzz2,INDICATOR_DATA);
   SetIndexBuffer(11,Hmzz2,INDICATOR_DATA);
   SetIndexBuffer(12,Lmzz3,INDICATOR_DATA);
   SetIndexBuffer(13,Hmzz3,INDICATOR_DATA);
   SetIndexBuffer(14,Lmzz4,INDICATOR_DATA);
   SetIndexBuffer(15,Hmzz4,INDICATOR_DATA);
   SetIndexBuffer(16,Lmzz5,INDICATOR_DATA);
   SetIndexBuffer(17,Hmzz5,INDICATOR_DATA);
   SetIndexBuffer(18,Lmzz6,INDICATOR_DATA);
   SetIndexBuffer(19,Hmzz6,INDICATOR_DATA);
   SetIndexBuffer(20,Lmzz7,INDICATOR_DATA);
   SetIndexBuffer(21,Hmzz7,INDICATOR_DATA);
   SetIndexBuffer(22,Lmzz8,INDICATOR_DATA);
   SetIndexBuffer(23,Hmzz8,INDICATOR_DATA);
   SetIndexBuffer(24,Lmzz9,INDICATOR_DATA);
   SetIndexBuffer(25,Hmzz9,INDICATOR_DATA);
   SetIndexBuffer(26,Lmzz10,INDICATOR_DATA);
   SetIndexBuffer(27,Hmzz10,INDICATOR_DATA);

   
   PlotIndexSetString(8,PLOT_LABEL,"SuperMicro");
   PlotIndexSetString(9,PLOT_LABEL,"SuperMicro");
   PlotIndexSetString(10,PLOT_LABEL,"SubMicro");
   PlotIndexSetString(11,PLOT_LABEL,"SubMicro");
   PlotIndexSetString(12,PLOT_LABEL,"Micro");
   PlotIndexSetString(13,PLOT_LABEL,"Micro");
   PlotIndexSetString(14,PLOT_LABEL,"SubMinuette");
   PlotIndexSetString(15,PLOT_LABEL,"SubMinuette");
   PlotIndexSetString(16,PLOT_LABEL,"Minuette");
   PlotIndexSetString(17,PLOT_LABEL,"Minuette");
   PlotIndexSetString(18,PLOT_LABEL,"Minute");
   PlotIndexSetString(19,PLOT_LABEL,"Minute");
   PlotIndexSetString(20,PLOT_LABEL,"Minor");
   PlotIndexSetString(21,PLOT_LABEL,"Minor");
   PlotIndexSetString(22,PLOT_LABEL,"Intermediate");
   PlotIndexSetString(23,PLOT_LABEL,"Intermediate");
   PlotIndexSetString(24,PLOT_LABEL,"Primary");
   PlotIndexSetString(25,PLOT_LABEL,"Primary");
   PlotIndexSetString(26,PLOT_LABEL,"Cycle");
   PlotIndexSetString(27,PLOT_LABEL,"Cycle");


Да и, наверное, и с первыми 8 буферами также есть проблемы.

Потом задаю

      PlotIndexSetInteger(8,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(9,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(10,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(11,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(12,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(13,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(14,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(15,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(16,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(17,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(18,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(19,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(20,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(21,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(22,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(23,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(24,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(25,PLOT_DRAW_TYPE,DRAW_ZIGZAG);
      PlotIndexSetInteger(26,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
      PlotIndexSetInteger(27,PLOT_DRAW_TYPE,DRAW_ZIGZAG);



   PlotIndexSetInteger(8,PLOT_LINE_COLOR, propWave[0].colorWave);
   PlotIndexSetInteger(9,PLOT_LINE_COLOR, propWave[0].colorWave);
   PlotIndexSetInteger(10,PLOT_LINE_COLOR, propWave[1].colorWave);
   PlotIndexSetInteger(11,PLOT_LINE_COLOR, propWave[1].colorWave);
   PlotIndexSetInteger(12,PLOT_LINE_COLOR, propWave[2].colorWave);
   PlotIndexSetInteger(13,PLOT_LINE_COLOR, propWave[2].colorWave);
   PlotIndexSetInteger(14,PLOT_LINE_COLOR, propWave[3].colorWave);
   PlotIndexSetInteger(15,PLOT_LINE_COLOR, propWave[3].colorWave);
   PlotIndexSetInteger(16,PLOT_LINE_COLOR, propWave[4].colorWave);

   PlotIndexSetInteger(17,PLOT_LINE_COLOR, propWave[4].colorWave);
   PlotIndexSetInteger(18,PLOT_LINE_COLOR, propWave[5].colorWave);
   PlotIndexSetInteger(19,PLOT_LINE_COLOR, propWave[5].colorWave);
   PlotIndexSetInteger(20,PLOT_LINE_COLOR, propWave[6].colorWave);
   PlotIndexSetInteger(21,PLOT_LINE_COLOR, propWave[6].colorWave);
   PlotIndexSetInteger(22,PLOT_LINE_COLOR, propWave[7].colorWave);
   PlotIndexSetInteger(23,PLOT_LINE_COLOR, propWave[7].colorWave);
   PlotIndexSetInteger(24,PLOT_LINE_COLOR, propWave[8].colorWave);
   PlotIndexSetInteger(25,PLOT_LINE_COLOR, propWave[8].colorWave);
   PlotIndexSetInteger(26,PLOT_LINE_COLOR, propWave[9].colorWave);
   PlotIndexSetInteger(27,PLOT_LINE_COLOR, propWave[9].colorWave);

   PlotIndexSetInteger(8,PLOT_LINE_WIDTH, propWave[0].width);
   PlotIndexSetInteger(9,PLOT_LINE_WIDTH, propWave[0].width);
   PlotIndexSetInteger(10,PLOT_LINE_WIDTH, propWave[1].width);
   PlotIndexSetInteger(11,PLOT_LINE_WIDTH, propWave[1].width);
   PlotIndexSetInteger(12,PLOT_LINE_WIDTH, propWave[2].width);
   PlotIndexSetInteger(13,PLOT_LINE_WIDTH, propWave[2].width);
   PlotIndexSetInteger(14,PLOT_LINE_WIDTH, propWave[3].width);
   PlotIndexSetInteger(15,PLOT_LINE_WIDTH, propWave[3].width);
   PlotIndexSetInteger(16,PLOT_LINE_WIDTH, propWave[4].width);
   PlotIndexSetInteger(17,PLOT_LINE_WIDTH, propWave[4].width);
   PlotIndexSetInteger(18,PLOT_LINE_WIDTH, propWave[5].width);
   PlotIndexSetInteger(19,PLOT_LINE_WIDTH, propWave[5].width);
   PlotIndexSetInteger(20,PLOT_LINE_WIDTH, propWave[6].width);
   PlotIndexSetInteger(21,PLOT_LINE_WIDTH, propWave[6].width);
   PlotIndexSetInteger(22,PLOT_LINE_WIDTH, propWave[7].width);
   PlotIndexSetInteger(23,PLOT_LINE_WIDTH, propWave[7].width);
   PlotIndexSetInteger(24,PLOT_LINE_WIDTH, propWave[8].width);
   PlotIndexSetInteger(25,PLOT_LINE_WIDTH, propWave[8].width);
   PlotIndexSetInteger(26,PLOT_LINE_WIDTH, propWave[9].width);
   PlotIndexSetInteger(27,PLOT_LINE_WIDTH, propWave[9].width);

При выводе на график рисуется непонятно что. 

Картинка в МТ4 (так должно рисоваться):

MT4

Картинка в МТ5 (так рисуется. Цвет линий):

MT5

Статью https://www.mql5.com/ru/articles/48 Николая Косицына читал. Ответа не нашел.

Выводил волновые уровни Minute и Minor. А выводится цветом и стилем Micro.

Error

Отличие работы функции OnChartEvent в МТ4 и в МТ5
Отличие работы функции OnChartEvent в МТ4 и в МТ5
  • 2019.06.05
  • www.mql5.com
По многочисленным просьбам пользователей перевел код ZUP с MQL4 на MQL5. В МТ4 все работает как часы...
 
Пожалуйста вставляйте код правильно. Ваше сообщение исправил.
 

Ну и что?

Ответа там нет.

Выше приведены кусочки кода. Что там неправильно? Могу и более расширенные кусочки кода привести.

Выводятся линии с ошибками. Как эти ошибки исправить - пока не представляю. Из всей доступной информации ответа на свои вопросы не нашел.

 
Eugeni Neumoin:

Ну и что?

Ответа там нет.

Значит не смотрели. По приведённой ссылке для каждого вида построения есть пример индикатора.

И ещё: когда хотят разобраться в проблеме то создаю минимальный код, который можно скомпилировать и запустить.
 
Vladimir Karputov:

Значит не смотрели. По приведённой ссылке для каждого вида построения есть пример индикатора.

Смотрел. Нет там моего случая.
 
Eugeni Neumoin:
Нет там моего случая.

Так никто не понимает этот "Ваш случай". Где вопрос? Где минимальный код?

 

Vladimir Karputov:

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

В моем случае минимальный код будет слишком большой.
 
Eugeni Neumoin:
В моем случае минимальный код будет слишком большой.

Это отговорки. В таком случае могу только повторить совет:


Запомните: нет минимального кода, нет описания - никто ничего не поймёт и поэтому конечно ничего не смогут подсказать. Пройдите по приведённой ссылке. Там ДЛЯ каждого построения есть пример. Плюс в редакторе MetaEditor есть примеры индикаторов (папка \MQL5\Indicators\).

 
Eugeni Neumoin:

Перенес текст из https://www.mql5.com/ru/forum/314904/page3#comment_11984545

в отдельную ветку.

Артем, как найти на форуме информацию о создании нескольких индикаторных буферов?

Интересует вопрос, как привязывать цвета и стили для нескольких индикаторных буферов.

У меня выводятся несколько зигзагов одновременно. Каждой линии зигзага необходимо задать свой цвет и стиль.

В МТ4 проблем не было. В МТ5 не нахожу, как это сделать. В описании языка об этом нет информации. Точнее, там информация неполная и размытая.

Задавать цвет и стиль необходимо не через #property. Стиль и тип линий может меняться через графический интерфейс.

Задаю

Проблемы с этими буферами:


Да и, наверное, и с первыми 8 буферами также есть проблемы.

Потом задаю

При выводе на график рисуется непонятно что. 

Картинка в МТ4 (так должно рисоваться):


Картинка в МТ5 (так рисуется. Цвет линий):


Статью https://www.mql5.com/ru/articles/48 Николая Косицына читал. Ответа не нашел.

Выводил волновые уровни Minute и Minor. А выводится цветом и стилем Micro.


Для вывода цветных индикаторных линий есть стили с "COLOR" в их наименовании. Каждому буферу индикатора, у которого стиль "COLOR" будет соответствовать два буфера - один для построения линии, второй - для цвета.

В своё время, по моим наблюдениям, пользователь scriptor разместил в CodeBase много примеров, среди которых можно найти примеры построения индикаторов с множеством буферов, некоторые из которых - цветные. Советую изучить - там коды простые и понятные. Есть конечно у него и панели на классах с рисованием на канвасе, но это не относится к данному вопросу.

 

Выше приведенные кусочки кода не вызывают вопросов?

После занесения значений в индикаторные массивы:

//     "SuperMicro","SubMicro","Micro","SubMinuette","Minuette","Minute","Minor","Intermediate","Primary","Cycle"
// High
double Hmzz1[],      Hmzz2[],  Hmzz3[], Hmzz4[],     Hmzz5[],   Hmzz6[], Hmzz7[], Hmzz8[],      Hmzz9[],  Hmzz10[];
// Low
double Lmzz1[],      Lmzz2[],  Lmzz3[], Lmzz4[],     Lmzz5[],   Lmzz6[], Lmzz7[], Lmzz8[],      Lmzz9[],  Lmzz10[];

Рисуется картинка (в МТ5):

Error

А должно быть (в МТ4):

No error

Причина обращения: