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

 
Rashid Umarov:
Напоминает анекдот про оптимиста и пессимиста

Рашид, я не однократно писал...

Вот из нашей с тобой переписки:

Есть в поставке Метатрейдера индикатор ZigZag. У него есть параметр ExtDeviation.
Параметр бестолковый. Насколько я помню, он никогда не работал и сейчас не работает. То есть если задать любое значение в этом параметре, то это не приведет ни к какому изменению в построении зигзага.
Я в свое время просто провел логический анализ кода этого параметра. Если не полениться и потрудиться, то можно заметить, что логика подскажет - не влияет ни на что этот параметр.

Но никто его не убирает из кода. В результате.
1) Людей этим параметром вводят в заблуждение.
2) Нагружается процессор при обработке этого параметра.
3) Все, кто использует ZigZag в своих разработках, старательно переписывают информацию об этом параметре в описание своих разработок...

….. - это вместо слов...

-------------------------

Сначала исправьте это. Потом, может быть, буду твои анекдоты читать.

 
Aleksey Lebedev:

DRAW_ZIGZAG - На два буфера, одна линия(plot).

Я в первом посте написал что вот это:

#property indicator_label1  "ZigZag"
#property indicator_type1   DRAW_ZIGZAG
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

Не подходит. Почему Вы мне ссылку даете, где как раз это присутствует?

 
Eugeni Neumoin:

Взял простенький индикатор МТ4. 

Конвертировал его в МТ5. (отладочный код оставил в индикаторе).

В МТ5 совсем не рисует ничего.

Ну ведь давали же дельный совет: если не получается - делайте МИНИМАЛЬНЫЙ код. 

Для Вас означает: на основе ОДНОГО индикаторного буфера, на основе СТАНДАРТНОГО индикатора (на основе справки). То есть учитесь создавать с нуля. Потом увидите свою ошибку.

 

Vladimir Karputov
:

Ну ведь давали же дельный совет: если не получается - делайте МИНИМАЛЬНЫЙ код. 

Для Вас означает: на основе ОДНОГО индикаторного буфера, на основе СТАНДАРТНОГО индикатора (на основе справки). То есть учитесь создавать с нуля. Потом увидите свою ошибку.

.Я взял самый простой свой индикатор. Здесь проще, чем в первом посте этой ветки.

Возможно, с одной линией получится. Мне нужно не сколько линий.

Все примеры и в справке по языку, и в статье, и в ссылке выше от Алексея Лебедева используют

#property     
    
    
        

А в документации по языку сказано следующее:

Свойства индикаторов можно устанавливать как с помощью директив компилятора, так и с помощью функций. Для лучшего понимания рекомендуется изучить стили индикаторов в примерах.

Примеры все с 

#property 

А моего случая нет нигде.

 

Перевожу на русский язык.

С помощью директив препроцессора задается только количество буферов и количество линий для отрисовки.

#property indicator_buffers28
#property indicator_plots28

А все остальное вводится через функции.

Про работу через функции говорится в описании по языку. Но примеров нигде нет. Вот это я и называю невнятицей. 

 
Eugeni Neumoin:

Перевожу на русский язык.

С помощью директив препроцессора задается только количество буферов и количество линий для отрисовки.

А все остальное вводится через функции.

Про работу через функции говорится в описании по языку. Но примеров нигде нет. Вот это я и называю невнятицей. 

Итак, две строки от Вас удалось получить:

#property indicator_buffers28
#property indicator_plots28

Преобразуем так, как нужно:

#property indicator_buffers1
#property indicator_plots1


Внимание вопрос: какой стиль рисования будет использован и какой свойство хотите задать через функцию?

 
Vladimir Karputov:

Итак, две строки от Вас удалось получить:

Преобразуем так, как нужно:


Внимание вопрос: какой стиль рисования будет использован и какой свойство хотите задать через функцию?

Выше код простенького индикатора мультизигзаг на 9 таймфреймов MZZ9.MQ5. Там все есть.
Vladimir Karputov:

Итак, две строки от Вас удалось получить:

Эти две строки, кажется в первом посте были приведены в самом начале. https://www.mql5.com/ru/forum/315242

Так что слова "...две строки от Вас удалось получить:"  говорят о том, что …..


Отличие работы прорисовки нескольких линий индикатора в МТ4 и в МТ5
Отличие работы прорисовки нескольких линий индикатора в МТ4 и в МТ5
  • 2019.06.07
  • www.mql5.com
Перенес текст из https://www.mql5.com/ru/forum/314904/page3#comment_11984545 в отдельную ветку...
 
Eugeni Neumoin:

Для DRAW_ZIGZAG

#property indicator_buffers 28
#property indicator_plots 14
...
      PlotIndexSetInteger(8,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 

На два буфера, одна линия(plot).

Свойства через директивы или функции - без разницы.

 
Eugeni Neumoin:
Выше код простенького индикатора мультизигзаг на 9 таймфреймов MZZ9.MQ5. Там все есть.

Эти две строки, кажется в первом посте были приведены в самом начале. https://www.mql5.com/ru/forum/315242

Так что слова "...две строки от Вас удалось получить:"  говорят о том, что …..


Вот когда научитесь писать индикаторы, тогда можно будет Вам кидать килограммовые коды в ветку. А пока что потрудитесь ответить на вопрос:

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

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

Vladimir Karputov, 2019.06.07 15:12

Итак, две строки от Вас удалось получить:

#property indicator_buffers28
#property indicator_plots28

Преобразуем так, как нужно:

#property indicator_buffers1
#property indicator_plots1


Внимание вопрос: какой стиль рисования будет использован и какой свойство хотите задать через функцию?

Это мой последний вопрос - не ответите, значит дальше сами. Мне как бы надоедать стало.
 
Vladimir Karputov:

Вот когда научитесь писать индикаторы, тогда можно будет Вам кидать килограммовые коды в ветку. А пока что потрудитесь ответить на вопрос:

Это мой последний вопрос - не ответите, значит дальше сами. Мне как бы надоедать стало.


Задаю через директиву препроцессора только это:

//  Количество индикаторных буфферов#property indicator_buffers8#property indicator_plots8

Далее через функцию задаю:

// По два индикаторных буффера использовано для вывода на график каждого зигзага
   SetIndexBuffer(0,LowestBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,HighestBuffer1,INDICATOR_DATA);
   SetIndexBuffer(2,LowestBuffer2,INDICATOR_DATA);
   SetIndexBuffer(3,HighestBuffer2,INDICATOR_DATA);
   SetIndexBuffer(4,LowestBuffer3,INDICATOR_DATA);
   SetIndexBuffer(5,HighestBuffer3,INDICATOR_DATA);
   SetIndexBuffer(6,LowestBuffer4,INDICATOR_DATA);
   SetIndexBuffer(7,HighestBuffer4,INDICATOR_DATA);

// Установка значений индикатора, которые не будут видимы на графике
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,0.0);

….
         if (j==1)
           {
            if (sshowZigZag==0)
              {
               PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
               PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
               PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(1,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(0,PLOT_LINE_COLOR, zzColor_[i]);
               PlotIndexSetInteger(1,PLOT_LINE_COLOR, zzColor_[i]);
              }
            else
              {
               PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_ARROW); 
               PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_ARROW); 
               PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(1,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(0,PLOT_LINE_COLOR, zzColor_[i]);
               PlotIndexSetInteger(1,PLOT_LINE_COLOR, zzColor_[i]);
               if (sshowZigZag==1)
                 {
                  PlotIndexSetInteger(0, PLOT_ARROW, 116); 
                  PlotIndexSetInteger(1, PLOT_ARROW, 116);
                 }
               else
                 {
                  PlotIndexSetInteger(0, PLOT_ARROW, 159); 
                  PlotIndexSetInteger(1, PLOT_ARROW, 159);
                 }
              }
           }
         elseif (j==2)
           {
            if (sshowZigZag==0)
              {
               PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
               PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
               PlotIndexSetInteger(2,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(3,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(2,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(3,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(2,PLOT_LINE_COLOR, zzColor_[i]);
               PlotIndexSetInteger(3,PLOT_LINE_COLOR, zzColor_[i]);
              }
            else
              {
               PlotIndexSetInteger(2,PLOT_DRAW_TYPE,DRAW_ARROW); 
               PlotIndexSetInteger(3,PLOT_DRAW_TYPE,DRAW_ARROW); 
               PlotIndexSetInteger(2,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(3,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(2,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(3,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(2,PLOT_LINE_COLOR, zzColor_[i]);
               PlotIndexSetInteger(3,PLOT_LINE_COLOR, zzColor_[i]);
               if (sshowZigZag==1)
                 {
                  PlotIndexSetInteger(2, PLOT_ARROW, 116); 
                  PlotIndexSetInteger(3, PLOT_ARROW, 116);
                 }
               else
                 {
                  PlotIndexSetInteger(2, PLOT_ARROW, 159); 
                  PlotIndexSetInteger(3, PLOT_ARROW, 159);
                 }
              }
           }
         elseif (j==3)
           {
            if (sshowZigZag==0)
              {
               PlotIndexSetInteger(4,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
               PlotIndexSetInteger(5,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
               PlotIndexSetInteger(4,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(5,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(4,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(5,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(4,PLOT_LINE_COLOR, zzColor_[i]);
               PlotIndexSetInteger(5,PLOT_LINE_COLOR, zzColor_[i]);
              }
            else
              {
               PlotIndexSetInteger(4,PLOT_DRAW_TYPE,DRAW_ARROW); 
               PlotIndexSetInteger(5,PLOT_DRAW_TYPE,DRAW_ARROW); 
               PlotIndexSetInteger(4,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(5,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(4,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(5,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(4,PLOT_LINE_COLOR, zzColor_[i]);
               PlotIndexSetInteger(5,PLOT_LINE_COLOR, zzColor_[i]);
               if (sshowZigZag==1)
                 {
                  PlotIndexSetInteger(4, PLOT_ARROW, 116); 
                  PlotIndexSetInteger(5, PLOT_ARROW, 116);
                 }
               else
                 {
                  PlotIndexSetInteger(4, PLOT_ARROW, 159); 
                  PlotIndexSetInteger(5, PLOT_ARROW, 159);
                 }
              }
           }
         elseif (j==4)
           {
            if (sshowZigZag==0)
              {
               PlotIndexSetInteger(6,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
               PlotIndexSetInteger(7,PLOT_DRAW_TYPE,DRAW_ZIGZAG); 
               PlotIndexSetInteger(6,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(7,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(6,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(7,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(6,PLOT_LINE_COLOR, zzColor_[i]);
               PlotIndexSetInteger(7,PLOT_LINE_COLOR, zzColor_[i]);
              }
            else
              {
               PlotIndexSetInteger(6,PLOT_DRAW_TYPE,DRAW_ARROW); 
               PlotIndexSetInteger(7,PLOT_DRAW_TYPE,DRAW_ARROW); 
               PlotIndexSetInteger(6,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(7,PLOT_LINE_STYLE,STYLE_SOLID);
               PlotIndexSetInteger(6,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(7,PLOT_LINE_WIDTH, 0);
               PlotIndexSetInteger(6,PLOT_LINE_COLOR, zzColor_[i]);
               PlotIndexSetInteger(7,PLOT_LINE_COLOR, zzColor_[i]);
               if (sshowZigZag==1)
                 {
                  PlotIndexSetInteger(6, PLOT_ARROW, 116); 
                  PlotIndexSetInteger(7, PLOT_ARROW, 116);
                 }
               else
                 {
                  PlotIndexSetInteger(6, PLOT_ARROW, 159); 
                  PlotIndexSetInteger(7, PLOT_ARROW, 159);
                 }
              }

Это из индикатора mzz9.mq5

Задание через директивы препроцессора стилей, цвета, типа линий индикатора просьба не предлагать.

Проходил это лет 10 назад. В моем случае это будет плохо. 

Индикатор с 50 000 строками, о котором в самом первом посте писал, выкладывать здесь не буду. В МТ4 работает как часы.

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