Уровни > ZZ (ZigZag) – зигзаг

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

ZZ (ZigZag) – зигзаг

Непрочитанное сообщение evge » 07 фев 2016, 17:01

Зигзаг – показывает локальные экстремумы цены, полученные по high и low, которые формируются при отклонении цены (close) от них на заданную величину, заданную в процентах. Последнее плечо индикатора перестраивается и соединяется с текущим максимальным или минимальным значением цены. Данный индикатор используется для наглядного представления направленного движения цены на истории.
Параметр «Delta» индикатора определяет величину движения цены (в процентах) в противоположную сторону для формирования экстремума.

Пример:

ZZ-00.png
ZZ-00.png (25.98 КБ) 45123 просмотра


Исходный текст:

Код: Выделить всё

function Initialize()
{
IndicatorName = "ZZ";   
PriceStudy = true;
AddInput("Input", Inputs.Candle);   
AddSeries("ZZWL", DrawAs.Line, Color.Blue);   
AddSeries("Marker", DrawAs.Custom, Color.Red);   

AddParameter("Delta", 0.2);

AddGlobalVariable("peakbar", Types.Int,  0);   
AddGlobalVariable("troughbar", Types.Int,  0);   
AddGlobalVariable("Direction", Types.Int,  0);   
AddGlobalVariable("hi", Types.Double,  0);   
AddGlobalVariable("lo", Types.Double,  0);   
AddGlobalVariable("hibar", Types.Int,  0);   
AddGlobalVariable("lobar", Types.Int,  0);   
}

function Evaluate()
{
// AlfaDirect 2015. OX
// ZZ (ZigZag)
// Новый минимум, если Close бара вырос от текущего Low на %
// Новый максимум, если Close бара снизился от текущего High на %
  if (CurrentIndex < 2)
  {
         lo = Input.Low[0];          //First min candle for Low
         hi = Input.High[0];         //First max candle for High
  }
  else
  {
      double delta = 0.01*Delta;
      //Detected Local max and Local min
       if(Input.High[0] > hi)   
        {
               hi = Input.High[0];
               hibar = CurrentIndex;
         }
         if(Input.Low[0] < lo)
         {
               lo = Input.Low[0];
               lobar = CurrentIndex;
         }

         if(Direction >= 0)
         {
           if(Input.Close[0] > (1 + delta)*lo)
               {
                  Direction = -1;                  
                  hi = Input.High[0];
                  hibar = CurrentIndex;
              troughbar = lobar;
              ZZWL[lobar-CurrentIndex] = lo;
                  Marker[lobar-CurrentIndex] = lo;
               }
         }
         if(Direction <= 0)
         {
               if(Input.Close[0] < (1 - delta)*hi)
               {
                  Direction = 1;                  
                  lo = Input.Low[0];
                  lobar = CurrentIndex;
              peakbar = hibar;
              ZZWL[hibar-CurrentIndex] = hi;
              Marker[hibar-CurrentIndex] = hi;
               }
         }
         Marker.DrawCircle();
       // Последнее плечо (не зафиксированно)
         if (CurrentIndex == MaxIndex)
         {
                 if (troughbar > peakbar)
                  ZZWL[hibar-CurrentIndex] = hi;

               if (troughbar < peakbar)
                ZZWL[lobar-CurrentIndex] = lo;
         }
  }
}
никогда такого не было и вот опять

Сайбер
Сообщения: 7
Зарегистрирован: 08 фев 2016, 18:55

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение Сайбер » 08 фев 2016, 19:11

Добрый день!

Подскажите пжл, возможно ли в АД4 написать индикатор ZigZag как в МТ 4, 5 . То есть вместо Delta в свойствах индикатора, появились следующие настройки?

Depth 12

Deviation 5

Backstep 3

А то в АД4 уж очень он корявый, спасибо.

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение evge » 08 фев 2016, 19:26

Сайбер писал(а):Добрый день!
Подскажите пжл, возможно ли в АД4 написать индикатор ZigZag как в МТ 4, 5 .


Я думаю можно. просто надо взять исходник от МТ4, 5 переписать под АД4. Я думал заняться переписыванием индикаторов с МТ4,5. Надо будет на ZigZag попробовать
никогда такого не было и вот опять

Сайбер
Сообщения: 7
Зарегистрирован: 08 фев 2016, 18:55

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение Сайбер » 09 фев 2016, 14:25

Буду ждать зиг заг,спасибо.

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение evge » 09 фев 2016, 15:41

Описание из индикатора:

ExtDeviation – это минимальное количество пунктов между максимумами (минимумами) двух соседних свечей для того чтобы индикатор Zigzag сформировал локальную вершину (локальную впадину). Этот параметр выражается в процентах.

ExtDepth – это тот минимум свечей, на котором индикатор Zigzag не будет строить второй максимум (или минимум), если тот меньше (или больше) на ExtDeviation предыдущего соответственно.

ExtBackstep –минимальное число свечей между локальными максимумами, минимумами.

вообщем, Delta это только один из трех этих параметров.

Думаю можно дописать уже существующий код двумя недостающими фильтрами Depth, Deviation...

Займусь этим в ближайшее время.
никогда такого не было и вот опять

Сайбер
Сообщения: 7
Зарегистрирован: 08 фев 2016, 18:55

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение Сайбер » 09 фев 2016, 20:57

Спасибо Вам огромное, очень жду )))

Ипонамама
Сообщения: 27
Зарегистрирован: 05 фев 2016, 20:42

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение Ипонамама » 09 фев 2016, 21:56

А вообще не хватает готовых стратегий АД4 на основе готовых индикаторов. Для таких как я, кому Си - темный лес очень трудно без готовых шаблонов делать роботов.

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение evge » 09 фев 2016, 21:59

Ипонамама писал(а):А вообще не хватает готовых стратегий АД4


Там же есть конструктор. Даже не зная языка можно много чего с помощью него сделать.
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1811
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 366 раз
Контактная информация:

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение evge » 10 фев 2016, 10:52

Т.к. этим индикатором не пользуюсь, проверьте и дайте рекомендации по поведению.

Все параметры влияют на результат, их теперь 3.

Если что-то не так, поправлю, возможно поведение не такое как вам нужно.

Код: Выделить всё

function Initialize()
{
IndicatorName = "ZZ";   
PriceStudy = true;
AddInput("Input", Inputs.Candle);   
AddSeries("ZZWL", DrawAs.Line, Color.Blue);   
AddSeries("Marker", DrawAs.Custom, Color.Red);   

//Анализируемый период
AddParameter("Period", 800, 1);

// то тот минимум свечей, на котором индикатор не будет строить второй максимум (или минимум), если тот меньше (или больше) на Deviation предыдущего соответственно.
AddParameter("Depth", 12);

// это минимальное количество пунктов между максимумами (минимумами) двух соседних свечей для того чтобы индикатор Zigzag сформировал локальную вершину (локальную впадину). Этот параметр выражается в процентах.
AddParameter("Deviation", 5);

// минимальное число свечей между локальными максимумами, минимумами.
AddParameter("Backstep", 3);

AddGlobalVariable("peakbar", Types.Int,  0);   
AddGlobalVariable("troughbar", Types.Int,  0);   
AddGlobalVariable("Direction", Types.Int,  0);   
AddGlobalVariable("hi", Types.Double,  0);   
AddGlobalVariable("lo", Types.Double,  0);   
AddGlobalVariable("hibar", Types.Int,  0);   
AddGlobalVariable("lobar", Types.Int,  0);   
}

function Evaluate()
{
// AlfaDirect 2015. OX
// ZZ (ZigZag)
// Новый минимум, если Close бара вырос от текущего Low на %
// Новый максимум, если Close бара снизился от текущего High на %

// Модификация evge 10.02.2016

if ((MaxIndex - CurrentIndex) > Period) return;

  if (lo == 0)
  {
         lo = Input.Low[0];          //First min candle for Low
         hi = Input.High[0];         //First max candle for High
         hibar = CurrentIndex;
       lobar = CurrentIndex;
  }
  else
  {
      double delta = 0.01*Deviation;
      //Detected Local max and Local min
       if(Input.High[0] > hi && (CurrentIndex - hibar) >= Depth)
        {
               hi = Input.High[0];
               hibar = CurrentIndex;
         }
         if(Input.Low[0] < lo && (CurrentIndex - lobar) >= Depth)
         {
               lo = Input.Low[0];
               lobar = CurrentIndex;
         }

         if(Direction >= 0)
         {
           if(Input.High[0] > (1 + delta)*lo && (CurrentIndex - lobar) >= Backstep)
               {
                     Direction = -1;                 
                     hi = Input.High[0];
                     hibar = CurrentIndex;
                    troughbar = lobar;
                    ZZWL[lobar-CurrentIndex] = lo;
                     Marker[lobar-CurrentIndex] = lo;
               }
         }
         if(Direction <= 0)
         {
               if(Input.Low[0] < (1 - delta)*hi && (CurrentIndex - hibar) >= Backstep)
               {
                     Direction = 1;                 
                     lo = Input.Low[0];
                     lobar = CurrentIndex;
                    peakbar = hibar;
                    ZZWL[hibar-CurrentIndex] = hi;
                    Marker[hibar-CurrentIndex] = hi;
               }
         }
         Marker.DrawCircle();

       // Последнее плечо (не зафиксированно)
         if (CurrentIndex == MaxIndex)
         {
                 if (troughbar > peakbar)
                  ZZWL[hibar-CurrentIndex] = hi;

               if (troughbar < peakbar)
                ZZWL[lobar-CurrentIndex] = lo;
         }
  }
}
никогда такого не было и вот опять

Сайбер
Сообщения: 7
Зарегистрирован: 08 фев 2016, 18:55

Re: ZZ (ZigZag) – зигзаг

Непрочитанное сообщение Сайбер » 10 фев 2016, 12:10

Добрый день.
У ZZ 2 новых проблемы. 1. Рисуется по мин и макс тела свечи игнорируя их тени. 2 Индикатор не показывает истинные мин и макс, то есть он отмечает хаи и лои которые ниже максимума или выше минимума предыдущей локальной точки.
Из старых проблем, ZZ как и раньше реагирует на каждое минимальное изменение, пробовал настройки менять... ничего не получилось даже близкого к мт не смог подогнать.


Вернуться в «Уровни»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость