Для начала получим значение скользящей средней так, как мы это делали в указанной статье:
- Код: выделить все
double dblMA = iMA("0", 0, 100, 0, MODE_SMA, PRICE_CLOSE, 1);
Далее введем дополнительно две переменные:
- Код: выделить все
double dblPrice = Close[1];
string strTrend = "NO";
Первая переменная dblPrice типа double будет возвращать значение цены закрытия прошлого бара. В MQL доступ к 4 значениям баров (открытие, закрытие, макс. цена, мин. цена) осуществляется через зарезервированные массивы (в данном случае Close). К номеру массива обращаются через квадратные скобки "[ ]", а сами бары пронумерованы от текущего, который имеет номер 0 назад до первого бара на экране. Таким образом, прошлый бар будет иметь всегда номер "1", второй бар назад - "2" и т.д.
Итак, запись Close[1] - возвращает цену закрытия прошлого бара.
Примечание: если нам нужно будет другое значение цены (открытие, середина бара и т.п.), то, естественно, можно использовать другие зарезервированные, а также расчетные величины.
Вторая переменная strTrend типа string нужна для присвоения ей фактического названия имеющегося в данный момент тренда. Я использую следующие обозначения:
"NO" - значение не определено (в данном случае тренд не идентифицирован, что может быть при определенных требованиях);
"UP" - восходящий / бычий тренд (также я использую такое обозначения для сигнала от индикаторов на покупку);
"DN" - нисходящий / медвежий тренд (также я использую такое обозначения для сигнала от индикаторов на продажу);
Примечание: эти обозначения возникли у меня оттого, что я стараюсь формировать отдельные функции по каждой процедуре в советнике, что соответствует правильному стилю программирования и уходит корнями в объектно-ориентированное программирование. Вы, естественно, можете принять другие обозначения или иной подход к формированию выходного сигнала, полученного при расчетах в советнике.
Итак, вторая переменная инициирована изначально значением "NO".
Далее, напишем 2 строчки кода, для определения тренда по закрытию прошлого бара:
- Код: выделить все
if(dblPrice > dblMA) strTrend = "UP";
if(dblPrice < dblMA) strTrend = "DN";
Происходит сравнение переменной dblPrice со значением переменной dblMA и переменная strTrend получает значения, соответствующие или бычьему или медвежьему тренду (если эти два условия не выполняются, то значение переменной останется равной "NO").
Далее, выведем в качестве комментария рассчитанную информацию на экран:
- Код: выделить все
Comment( "\n", "Тренд: ", strTrend);
Запустив советник на графике с установленной на нем скользящей средней с аналогичными параметрами, увидим подобную картину:
Полный код функции OnTick():
- Код: выделить все
double dblMA = iMA("0", 0, 100, 0, MODE_SMA, PRICE_CLOSE, 1);
double dblPrice = Close[1];
string strTrend = "NO";
if(dblPrice > dblMA) strTrend = "UP";
if(dblPrice < dblMA) strTrend = "DN";
Comment( "\n", "Тренд: ", strTrend);
Советник выложен для скачивания ниже.