Зоны безопасности Элдера

 

Всем доброго времени суток!

Знаю, что такое может уже было, но всё-таки прошу всех, кто умеет программировать, дописать индикатор Зон безопасности Элдера в соответствии  с описанием самого А. Элдера.

Т.е., чтобы при восходящем тренде зона не "падала" ниже предыдущего значения, а при нисходящем, чтобы не пробивала предыдущего значения.

Элдер пишет так: "Метод зоны безопасности измеряет уровень шума и размещает стоп-приказы на расстоянии от рынка, кратном уровню шума. Определить тренд мы можем по наклону 22-дневного ЕМА. Чтобы замерить шум, надо выбрать длину контрольного периода, то есть решить, как далеко в прошлое заглядывать. Этот период должен быть достаточно длинным, чтобы выявить средний уровень шума, но достаточно коротким, чтобы быть привязанным к недавнему времени. Можно взять 10 или 20 дней, а чтобы найти средние параметры долгосрочного поведения рынка, можно взять период длиной около стадией. Если тренд растет, отметьте все прорывы цен вниз за контрольный период, сложите их величины и разделите на число прорывов. Таким образом, вы получите среднюю величину прорыва вниз за выбранный период, отражающую средний уровень шума за это время. Размещать стоп-приказ на более близком расстоянии — напрашиваться на потерю. Стоп-приказ должен быть дальше сред-ней величины прорыва. Умножьте ее на некоторый коэффициент — начните с 2, а затем поэкспериментируйте с большими числами. Вычтите результат из минимума предыдущего дня и поставьте стоп-приказ на полученном уровне. Если сегодняшний минимум ниже вчерашнего, не переносите приказ ниже, чем вчера, так как при длинных позициях мы можем перемещать защитный стоп-приказ только вверх и ни в коем случае вниз. Руководствуйтесь прямо противоположными правилами, когда тренд идет вниз. Когда 22-дневное ЕМА падает, посчитайте число прорывов вверх за контрольный период и вычислите их среднюю величину. Умножьте полученное число на некоторый коэффициент, начиная с 2. Играя на понижение, установите защитный стоп-приказ, прибавив к максимуму предыдущего дня удвоенную величину среднего прорыва вверх. Перемещайте стоп-приказ вниз, когда цены достигают более низкого максимума, но никогда не переносите его вверх.

Так же было бы очень неплохо добавить прорисовку уровня SL (up и down) с указанием значения на шкале котировок валюты.

Спасибо всем за помощь! 

Код индикатора:

#property copyright "Copyright 2016, MetaQuotes Software Corp."

#property link      "https://www.mql5.com"

#property version   "1.00"


#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 Blue

#property indicator_color2 Red

//---- input parameters

extern int       N=10;

extern double    K=2.0;

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double UpBreak[];

double DownBreak[];

double Nup[];

double Ndown[];


//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

int init()

  {

//---- indicators

   IndicatorBuffers(6);

   SetIndexStyle(0,DRAW_LINE);

   SetIndexBuffer(0,ExtMapBuffer1);

   SetIndexStyle(1,DRAW_LINE);

   SetIndexBuffer(1,ExtMapBuffer2);

   SetIndexBuffer(2,UpBreak);

   SetIndexBuffer(3,DownBreak);

   SetIndexBuffer(4,Nup);

   SetIndexBuffer(5,Ndown);

   SetIndexDrawBegin(0,N+1);

   SetIndexDrawBegin(1,N+1);

//----

   return(0);

  }

//+------------------------------------------------------------------+

//| Custom indicator deinitialization function                       |

//+------------------------------------------------------------------+

int deinit()

  {

//----


   return(0);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function                              |

//+------------------------------------------------------------------+


int start()

  {

   int    counted_bars=IndicatorCounted();

//----

   int i,limit;

   double Up,Down;

   double countUp,countDown;

   if (counted_bars==0) limit=Bars-1;

   if (counted_bars>0) limit=Bars-counted_bars;

   limit--;

   for (i=limit;i>=0;i--)

      {

      if (Low[i]<Low[i+1]) 

         {

         Down=Low[i+1]-Low[i];

         Ndown[i]=1.0;

         }

      else 

         {

         Down=0.0;

         Ndown[i]=0.0;         

         }

      if (High[i]>High[i+1]) 

         {

         Up=High[i]-High[i+1];

         Nup[i]=1.0;

         }

      else 

         {

         Up=0.0;

         Nup[i]=0.0;

         }

      UpBreak[i]=Up;

      DownBreak[i]=Down;            

      }

   for (i=limit;i>=0;i--)

      {

      countUp=iMAOnArray(Nup,0,N,0,MODE_SMA,i+1)*N;

      countDown=iMAOnArray(Ndown,0,N,0,MODE_SMA,i+1)*N;

      if (countUp>0) ExtMapBuffer1[i]=High[i+1]+K*iMAOnArray(UpBreak,0,N,0,MODE_SMA,i+1)*N/countUp;

      else ExtMapBuffer1[i]=High[i+1];

      if (countDown>0) ExtMapBuffer2[i]=Low[i+1]-K*iMAOnArray(DownBreak,0,N,0,MODE_SMA,i+1)*N/countDown;

      else ExtMapBuffer2[i]=Low[i+1];

      }      

//----

   return(0);

  }

//+------------------------------------------------------------------+ 

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
добрый день. Подскажите а как добавить этот индикатор на Traiding wiev? вставляю текст в скрип но не работает(
 
enronquecido #:
добрый день. Подскажите а как добавить этот индикатор на Traiding wiev? вставляю текст в скрип но не работает(

Вы находитесь на форуме MetaTrader 5. Здесь не обсуждается стороннее ПО.

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