добрый день. Подскажите а как добавить этот индикатор на Traiding wiev? вставляю текст в скрип но не работает(
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем доброго времени суток!
Знаю, что такое может уже было, но всё-таки прошу всех, кто умеет программировать, дописать индикатор Зон безопасности Элдера в соответствии с описанием самого А. Элдера.
Т.е., чтобы при восходящем тренде зона не "падала" ниже предыдущего значения, а при нисходящем, чтобы не пробивала предыдущего значения.
Элдер пишет так: "Метод зоны безопасности измеряет уровень шума и размещает стоп-приказы на расстоянии от рынка, кратном уровню шума. Определить тренд мы можем по наклону 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);
}
//+------------------------------------------------------------------+