Индикаторы: Просто ZZ (зиг-заг)

 

Просто ZZ (зиг-заг):

Работает в 8 раз быстрее, чем стандартный ZZ, которым комплектуется MetaTrader 4.

Author: George

 

Оч хорошо!

 
// Находит вершины ЗигЗага с мин. коленом >= Pips
void GetZigZag( double Pips )
{
  bool FlagUP = TRUE;
  double Max, Min;
  double PriceHigh, PriceLow;
  int N = Bars - 1, Pos = N - 1;
  Max = High[N];
  Min = Low[N];
  
  while (Pos >= 0)
  {
    PriceHigh = High[Pos];
    PriceLow = Low[Pos];
    if (FlagUP)
    {
      if (PriceHigh > Max)
      {
        // Текущая не окончательно сформированная верхняя вершина:
        Max = PriceHigh;
        N = Pos;
      }
      else if (Max - PriceLow >= Pips)
      {
        // Окончательно сформированная верхняя вершина:
        Buffer[N] = Max;
        FlagUP = FALSE;
        Min = PriceLow;
        N = Pos;
      }
    }
    else // (FlagUP == FALSE)
    {
      if (PriceLow < Min)
      {
        // Текущая не окончательно сформированная нижняя вершина:
        Min = PriceLow;
        N = Pos;
      }
      else if (PriceHigh - Min >= Pips)
      {        
        // Окончательно сформированная нижняя вершина:
        Buffer[N] = Min;
        
        FlagUP = TRUE;
        Max = PriceHigh;
        N = Pos;
      }
    }
      
    Pos--;
  }
  
  return;
}
 

Отличная работа!

А не могли бы добавить еще 2 буфера: чтобы выводились как сигналы (разным цветом)

double PriceHigh, PriceLow;
 
не плохо =)
 
Nail_Saby:

Отличная работа!

А не могли бы добавить еще 2 буфера: чтобы выводились как сигналы (разным цветом)

double PriceHigh, PriceLow;

Вы имеете в виду луч вверх один цвет, а луч вниз другой цвет? Если да - то как бы бессмысленно - итак хорошо видно. Честно говоря, я этот код ваял для советника, чтобы быстро тестировал, правда, лепить его буду только сейчас (посему цветовая раскраска как бы по-барабану) а вот сейчас доделываю по ходу на базе этого индюк, на каждом экстремуме текстовая метка, указывающая отношение высоты последнего колена к предпоследнему. Если нормально получится, докину его сюда, правда, работать он уже с такой скоростью не будет - создание объектов дело неторопливое :)
 
hrenfx:
  Max = High[N];
  Min = Low[N];
  
 //я так понимаю. что это: 
High[N]=High[iHighest(NULL,0,MODE_HIGH,ExtPeriod,i)];
Low[N] L=Low[iLowest(NULL,0,MODE_LOW,ExtPeriod,i)];

которые мы предварительно заполняем через while() ?

или я ошибаюсь?

 
PPC:
High и Low.
 
hrenfx:
PPC:
High и Low.

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 White
extern int Pips=10;
double Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  IndicatorBuffers(3);
  
  SetIndexBuffer(0,Buffer);
  SetIndexStyle(0,DRAW_SECTION,STYLE_DOT,1);
  SetIndexDrawBegin(0,Bars-Pips);
  SetIndexEmptyValue(0,0.0);
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
  return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
  bool FlagUP = TRUE;
  double Max, Min;
  double PriceHigh, PriceLow;
  int N = Bars - 1, Pos = N - 1;
  Max = High[N];
  Min = Low[N];
  
  while (Pos >= 0)
  {
    PriceHigh = High[Pos];
    PriceLow = Low[Pos];
    if (FlagUP)
    {
      if (PriceHigh > Max)
      {
        // Текущая не окончательно сформированная верхняя вершина:
        Max = PriceHigh;
        N = Pos;
      }
      else if (Max - PriceLow >= Pips)
      {
        // Окончательно сформированная верхняя вершина:
        Buffer[N] = Max;
        FlagUP = FALSE;
        Min = PriceLow;
        N = Pos;
      }
    }
    else // (FlagUP == FALSE)
    {
      if (PriceLow < Min)
      {
        // Текущая не окончательно сформированная нижняя вершина:
        Min = PriceLow;
        N = Pos;
      }
      else if (PriceHigh - Min >= Pips)
      {        
        // Окончательно сформированная нижняя вершина:
        Buffer[N] = Min;
        
        FlagUP = TRUE;
        Max = PriceHigh;
        N = Pos;
      }
    }
      
    Pos--;
  }
  
  return(0);
}

ну и ничего не рисует... или ещё что-то надо? проще, закончите свою мысль в практическом исполнении, чтобы можно было заценить, а то гадаем на кофейной гуще

 

Хрень какая-то. А почему она не показывает сигналы? Почему не торгует? Почему не зарабатывает по 200% в день? Вобщем атстой. Ф топку)))

 
noob2010:

Хрень какая-то. А почему она не показывает сигналы? Почему не торгует? Почему не зарабатывает по 200% в день? Вобщем атстой. Ф топку)))


Может вы еще за меня и есть будете? АГА...
Причина обращения: