Помогите разобраться с алертом для индикатора

 
Друзья помогите разобраться! На примере стандартного индикатора Volumes для MT5. Индикатор может выводить
гистограму тиковых объемов в каждой новой свече(value) и соответственно показывает эту информацию в виде
баров(volumes) в своем окне. Каким образом можно реализовать алерт в виде звукового оповещения и текстового
уведомления при пересечении бара гистограмы индикатора заданного пользователем уровня, допустим 50?
Я так понимаю что тут есть два варианта подхода. Первый внести правку в сам индикатор. Или сделать скрипт
который берет значения из индикатора Volumes. Либо же вообще брать информацию с самого графика. Поскольку
тиковые объемы видны на каждой свече и без индикатора если в свойствах графика включить пункт "показывать
тиковые объемы". Интересует самый простой способ как такой алерт можно реализовать.
 

Лучше взять стандартный индикатор и сохранит его под другим именем и уже этот новый индикатор изменить.

 
barabashkakvn:

Лучше взять стандартный индикатор и сохранит его под другим именем и уже этот новый индикатор изменить.

 

Ок. Я представляю как открыть индикатор в метаэдиторе и как его потом скомпилировать. А вот какие переменные
и куда воткнуть? В общем виде опять же представляю примерно так :
if tick_volume=(или >)50
then print alert()
Или как-то так. Но ведь еще нужно чтобы тиковый объем сравнивался с эталоном на каждой новой свече, так?

Может тогда проще скриптом чем лезть в индикатор?  

 

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

Новые строки выделены цветом.

//+------------------------------------------------------------------+
//|                                                    Volumes_1.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_type1   DRAW_COLOR_HISTOGRAM
#property indicator_color1  Green,Red
#property indicator_style1  0
#property indicator_width1  1
#property indicator_minimum 0.0
//--- input data
input ENUM_APPLIED_VOLUME InpVolumeType=VOLUME_TICK; // Volumes
input int level=600;       // Сигнальный уровень 
//---- indicator buffers
double                    ExtVolumesBuffer[];
double                    ExtColorsBuffer[];

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

 

Соответственно для того чтобы при достижении сигнального уровня выводилось сообщение нужно добавить :

//---выводим сигнальный уровень на печать
print level

правильно?

А как добавить звуковое оповещение? 

 

Про проверку не увидел прошу прощения.

//---проверка сигнального уровня
if(level<600)
return(0);
else
print(уровень больше 600)

 Правильно? 

 
druzhische:

Про проверку не увидел прошу прощения.

//---проверка сигнального уровня
if(level<600)
return(0);
else
print(уровень больше 600)

 Правильно? 

Нет. Нужно сравнивать значение индикатора с переменной "level".
 
А вот тут я что-то запутался. Значение индикатора = CalculateVolume или tick_volume ?
 

Посмотрите справку по индикаторным буферам и по INDICATOR_DATA.

 

Я разобрался как прикрутить текстовое и звуковое оповещение.
В input data добавил :

input bool On_Alert = false; //making an alert
input bool On_Play_Sound = false; //making a sound signal
input string NameFileSound = "expert.wav"; //name of the file with sound

 С условиями все равно не понимаю:

//----
if(НЕИЗВЕСТАНАЯ ПЕРЕМЕННАЯ>level )
{
if(On_Play_Sound) PlaySound(NameFileSound);
if(On_Alert) Alert("Alert!");
}
//---- 

 На место неизвестной переменной ставил nRatesCount, сигналит при каждом изменении счетчика Volumes.
INDICATOR_DATA тоже ставил не получается.
Не понимаю какая переменная тут нужна. Ну помогите, просветите.

 
//---- indicator buffers
double                    ExtVolumesBuffer[];
Это индикаторный буфер. Т.е. если в этот буфер помещается какое-то значение, то это значение отобразится на графике. А на графике этот буфер у нас отображает, что? Правильно, объемы.
Причина обращения: