Код по которому я поместил рисунок выглядит так:
#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 DarkBlue // Цвет первой линии
#property indicator_color2 Crimson // Цвет второй линии
extern int History =5000; // Колич.баров в расчётной истории
double Max1, // Глобальная переменная Max1
Min1; // Глобальная переменная Min1
double Buf_0[], // Объявление индикаторного массива Buf_0
Buf_1[]; // Объявление индикаторного массива Buf_1
//-------------------------------------------------------------------
int init() // Специальная функция init()
{
SetIndexBuffer(0,Buf_0); // Назначение массива буферу
SetIndexStyle (0,DRAW_ARROW,STYLE_SOLID,4); // Стиль линии
SetIndexArrow(0, 158); // Порядковый номер линии и номер значка
SetIndexBuffer(1,Buf_1); // Назначение массива буферу
SetIndexStyle (1,DRAW_ARROW,STYLE_SOLID,4); // Стиль линии
SetIndexArrow(1, 158); // Порядковый номер линии и номер значка
return; // Выход из спец. ф-ии init()
}
//-------------------------------------------------------------------
int start() // Специальная функция start()
{
int counted_bars=IndicatorCounted(); // Количество просчитанных баров
int i, // Индекс бара
n, // Cчетчик
CTHB, // Счетчик для HighB
CTLB; // Счетчик для HighB
int HighA, // Максимум A
HighB, // Максимум B
HighC, // Максимум C
LowA, // Минимум A
LowB, // Минимум B
LowC; // Минимум C
//-------------------------------------------------------------------
i=Bars-counted_bars-1; // Индекс первого непосчитанного
if (i>History-1) // Если много баров то
i=History-1; // рассчитывать заданное колич
while(i>=0) // Цикл по непосчитанным барам
{
//----------------
n=i; // Начальное значение счетчика n
n--; // Расчёт счетчика
CTHB=0; // Начальное значение счетчика CTHB
CTLB=0; // Начальное значение счетчика CTHB
HighA=n+2; // Парамет HighA
HighB=n+1; // Парамет HighB
HighC=n; // Парамет HighC
LowA=n+2; // Парамет LowA
LowB=n+1; // Парамет LowB
LowC=n; // Парамет LowC
//----------------
if (High[HighA]<=High[HighB]>=High[HighC] || CTHB<=0) // Если выполняется условие, то
{
CTHB=HighB; // CTHB получает значение HighB
}
if (CTHB>0 || High[HighB]<Low[LowC]) // Если выполняется условие, то
{
Max1=iHigh(NULL, 0, CTHB); // Max1 получает результат
CTHB=0; // Счетчик CTHB обнуляется
}
//----------------
if (Low[LowA]>=Low[LowB]<=Low[LowC] || CTLB<=0) // Если выполняется условие, то
{
CTLB=LowB; // CTLB получает значение LowB
}
if (CTLB>0 || High[LowB]<Low[HighC]) // Если выполняется условие, то
{
Min1=iLow(NULL, 0, CTLB); // Min1 получает результат
CTLB=0; // Счетчик CTLB обнуляется
}
//----------------
Buf_0[i]=Min1; // Значение 0 буфера на i-ом баре
Buf_1[i]=Max1; // Значение 1 буфера на i-ом баре
i--; // Расчёт индекса следующего бара
}
return(0); // Выход из спец. ф-ии start()
}
//-------------------------------------------------------------------
int deinit() // Специальная функция deinit()
{
return(0); // Выход из спец. ф-ии deinit()
}
//+------------------------------------------------------------------+
Но логичнее сделать так:
#property indicator_chart_window // Индик. рисуется в основном окне
#property indicator_buffers 2 // Количество буферов
#property indicator_color1 DarkBlue // Цвет первой линии
#property indicator_color2 Crimson // Цвет второй линии
extern int History =5000; // Колич.баров в расчётной истории
double Max1, // Глобальная переменная Max1
Min1; // Глобальная переменная Min1
double Buf_0[], // Объявление индикаторного массива Buf_0
Buf_1[]; // Объявление индикаторного массива Buf_1
//-------------------------------------------------------------------
int init() // Специальная функция init()
{
SetIndexBuffer(0,Buf_0); // Назначение массива буферу
SetIndexStyle (0,DRAW_ARROW,STYLE_SOLID,4); // Стиль линии
SetIndexArrow(0, 158); // Порядковый номер линии и номер значка
SetIndexBuffer(1,Buf_1); // Назначение массива буферу
SetIndexStyle (1,DRAW_ARROW,STYLE_SOLID,4); // Стиль линии
SetIndexArrow(1, 158); // Порядковый номер линии и номер значка
return; // Выход из спец. ф-ии init()
}
//-------------------------------------------------------------------
int start() // Специальная функция start()
{
int counted_bars=IndicatorCounted(); // Количество просчитанных баров
int i, // Индекс бара
n, // Cчетчик
CTHB, // Счетчик для HighB
CTLB; // Счетчик для HighB
int HighA, // Максимум A
HighB, // Максимум B
HighC, // Максимум C
LowA, // Минимум A
LowB, // Минимум B
LowC; // Минимум C
//-------------------------------------------------------------------
i=Bars-counted_bars-1; // Индекс первого непосчитанного
if (i>History-1) // Если много баров то
i=History-1; // рассчитывать заданное колич
while(i>=0) // Цикл по непосчитанным барам
{
//----------------
n=History-1; // Начальное значение счетчика n
n--; // Расчёт счетчика
CTHB=0; // Начальное значение счетчика CTHB
CTLB=0; // Начальное значение счетчика CTHB
HighA=n+2; // Парамет HighA
HighB=n+1; // Парамет HighB
HighC=n; // Парамет HighC
LowA=n+2; // Парамет LowA
LowB=n+1; // Парамет LowB
LowC=n; // Парамет LowC
//----------------
if (High[HighA]<=High[HighB]>=High[HighC] && CTHB<=0) // Если выполняется условие, то
{
CTHB=HighB; // CTHB получает значение HighB
}
if (CTHB>0 && Low[CTHB]>High[LowC]) // Если выполняется условие, то
{
Max1=iHigh(NULL, 0, CTHB); // Max1 получает результат
CTHB=0; // Счетчик CTHB обнуляется
}
//----------------
if (Low[LowA]>=Low[LowB]<=Low[LowC] && CTLB<=0) // Если выполняется условие, то
{
CTLB=LowB; // CTLB получает значение LowB
}
if (CTLB>0 && High[CTLB]<Low[HighC]) // Если выполняется условие, то
{
Min1=iLow(NULL, 0, CTLB); // Min1 получает результат
CTLB=0; // Счетчик CTLB обнуляется
}
//----------------
Buf_0[i]=Min1; // Значение 0 буфера на i-ом баре
Buf_1[i]=Max1; // Значение 1 буфера на i-ом баре
i--; // Расчёт индекса следующего бара
}
return(0); // Выход из спец. ф-ии start()
}
//-------------------------------------------------------------------
int deinit() // Специальная функция deinit()
{
return(0); // Выход из спец. ф-ии deinit()
}
//+------------------------------------------------------------------+
Но когда так делаю вообще не чего не отображается,
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Я только начал учиться программированию, раньше создавал программки в Exsel. Написал код для своего индикатора и получилась следующая картинка:
Как видно на рисунке синие и красные точки выставляются на каждой свече. Не подскажите ли как сделать так чтобы точки выставлялись только когда выполняется определенное условие? Сколько не пытался либо точки выставляются так, либо их вообще нет.
Буду очень благодарен за помощь.
Контакты для связи:
stellarspase@mail.ru
ICQ: 424-104-601