sebegolov:
Добрый день, решил сам попробовать сделать индикатор типа ZigZag (прогать начал недавно). Вроде ошибок нет, но на графике он не отрисовывается.
Counted_bars=IndicatorCounted();i=Bars-Counted_bars-1;
if(High[i+n]>Max_A)return(0);
}
При запуске Counted_bars = 0. Тогда i+n больше количества баров Bars и индикатор прекращает работу с сообщением на вкладке Эксперты: Array out of range
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день, решил сам попробовать сделать индикатор типа ZigZag (прогать начал недавно). Вроде ошибок нет, но на графике он не отрисовывается.
#property link ""
#property version "1.00"
#property strict
#property indicator_chart_window
//--------------------------------
#property indicator_buffers 1 // Количество буферов
#property indicator_color1 Blue // Цвет линии 0 буфера
double Buf_0[];
double Max_B=0,
Min_B=10000;
int init()
{
SetIndexBuffer(0,Buf_0); //Назначение массива буфера
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); //стиль линии
return(0);}
//------------------------------
int start()
{
int i;
int n,
step=10;
int Counted_bars;
double Max_A,
Min_A;
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
//--------------------------------------------------------------------------------------------------------------+
while(i>=0) //цикл, который считает просчитывает значение на i-ом баре
{ Max_A=High[i]; //присвоили максимальное значение i-ого бара переменной Max_A
Min_A=Low[i]; //присвоили минимальное значение i-ого бара переменной Min_A
if(Max_A>Max_B)
Max_B=Max_A;
if(Min_A<Min_B)
Min_B=Min_A;
//-------------------------------------------------------------------------------------------------------------
if(i>=step)
{ for(n=0;n<step;n++) //цикл, который будет сравнивать значения баров на определённом интервале
{if(High[i+n]>Max_A)
{ Max_A=High[i+n];
}else
{ if(High[i+n]<Min_A)
Min_A=High[i+n]; }
}
}
if(i<step)
{
for(n=step;n>0;n--) //цикл, который будет сравнивать значения баров на определённом интервале
{
if(High[i-n]>Max_A)
{
Max_A=High[i-n];
}else
{
if(High[i-n]<Min_A)
Min_A=High[i-n];
}
}
}
if(Max_A>Max_B)
{
Buf_0[i]=Max_A;
}else
{
if(Min_A<Min_B)
Buf_0[i]=Min_A;
}
i--;
}
return(0);
}