Скачать MetaTrader 5

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

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

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

druzhische
26
druzhische  
barabashkakvn:

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

 

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

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

Vladimir Karputov
Модератор
50076
Vladimir Karputov  

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

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

//+------------------------------------------------------------------+
//|                                                    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[];

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

druzhische
26
druzhische  

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

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

правильно?

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

druzhische
26
druzhische  

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

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

 Правильно? 

Vladimir Karputov
Модератор
50076
Vladimir Karputov  
druzhische:

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

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

 Правильно? 

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

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

druzhische
26
druzhische  

Я разобрался как прикрутить текстовое и звуковое оповещение.
В 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 тоже ставил не получается.
Не понимаю какая переменная тут нужна. Ну помогите, просветите.

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