DRAW_COLOR_ZIGZAG в пределах одного бара. - страница 2

 
Попробуйте сделать два ZZ в одном индикаторе. И в такой ситуации основному назначить clrNone а дополнительному нужный цвет.
 
Alexey Viktorov:
Попробуйте сделать два ZZ в одном индикаторе. И в такой ситуации основному назначить clrNone а дополнительному нужный цвет.

Если пики одного отрезка будут оставаться на одном баре, то ситуация не изменится.

 
Viacheslav Kuptsov:

Если пики одного отрезка будут оставаться на одном баре, то ситуация не изменится.

Пока всё идет на уровне теории. Сделайте пример с проблемой и покажите.

 

Например:

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots 1
#property indicator_label1      "Noname"
#property indicator_type1       DRAW_COLOR_ZIGZAG
#property indicator_color1      clrBlue,clrRed
#property indicator_style1      STYLE_SOLID
#property indicator_width1      1
//+------------------------------------------------------------------+
double zzH[],zzL[],zzC[];
int last;
//+------------------------------------------------------------------+
void OnInit()
  {
   SetIndexBuffer(0,zzH,INDICATOR_DATA);
   SetIndexBuffer(1,zzL,INDICATOR_DATA);
   SetIndexBuffer(2,zzC,INDICATOR_COLOR_INDEX);
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
  }
//+------------------------------------------------------------------+
int OnCalculate(const int total,
const int calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick[],
const long &real[],
const int &spread[])

  {
   for(int i=calculated>0?calculated-1:0; i<total-1; i++)
     {
         zzL[i]=0;
         zzH[i]=0;
         //---
         // Упускаем алгоритм поиска экстремумов
         // Рассмотри случай движения вверх
         // элемент zzH[last] имел какое-то значение, zzC[last] имел значение индекса цвета 0
         // Нашли новый экстремум вниз, при этом last == i (на одном баре)
         // Что делаем?
         zzL[i] == Low[i];
         zzC[i] == 1;
         // Так как last == i, то предыдущий отрезок окрасится в цвет с индексом 1 
         // Даже если мы будем использовать два зигзага (один будет окрашивать отрезка "вверх",
         // второй отрезки "вниз", то предыдущий отрезок всегда будет менять свой цвет.
         last=i;
      }

   return(total);
  }

Где я ошибаюсь?

 
Viacheslav Kuptsov:

Например:

Где я ошибаюсь?

В том, что я кто-то  будет пытаться по коду понять логику. Логику опишите, чтобы понять - "я хочу седлать то-то"

PS Код не смотрел, как и 99.99% пользователей

PPS Ну и два варинта варианта картинки:

  • хочу
  • имею
 

Я хочу получить двухцветный зигзаг, который будет рисовать движение "вверх" одним цветом, а движение "вниз" другим. Все работает нормально до тех пор, пока не возникает ситуация с появлением экстремумов на одном баре.
Вот что должно получается (и получается пока не появляется описанная выше ситуация).

А вот что получается когда возникает описанная ситуация.


 
Viacheslav Kuptsov:

Я хочу получить двухцветный зигзаг, который будет рисовать движение "вверх" одним цветом, а движение "вниз" другим. Все работает нормально до тех пор, пока не возникает ситуация с появлением экстремумов на одном баре.
Вот что должно получается (и получается пока не появляется описанная выше ситуация).

А вот что получается когда возникает описанная ситуация.


Так, я сейчас в примере из DRAW_COLOR_ZIGZAG поменял одну строчку и получил 8 цветов (вместо двух):

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Color_ZigzagBuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,Color_ZigzagBuffer2,INDICATOR_DATA);
   SetIndexBuffer(2,Color_ZigzagColors,INDICATOR_COLOR_INDEX);
//---- количество цветов для раскраски зигзага
   color_sections=ArraySize(colors);   //  см. комментарий к свойству #property indicator_color1
//---
   return(INIT_SUCCEEDED);
  }

Чего вам не хватает для реализации? Сделайте массив из 4 цветов  - Красный, Синий, Красны , Синий и заполняйте как хотите. Чего я не понимаю?


 
Viacheslav Kuptsov:
дайте исходник того что на картинке
 
TheXpert:
дайте исходник того что на картинке

Похоже, там логика простая:

  • если ситуация 1 - красим в красный
  • если ситуация 2 - красим в синий
  • если ситуация 3 - красим в красный
  • если ситуация 4 - красим в синий
 
Rashid Umarov:

Похоже, там логика простая:

да нет, у меня подозрение что задача нерешаема нормальными средствами, иначе меня бы вообще в этой теме не было