Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Мастер MQL5 - Торговые сигналы по пересечению ценой скользящей средней - эксперт для MetaTrader 5
- Просмотров:
- 8062
- Рейтинг:
- Опубликован:
- 2011.01.07 11:54
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
В статье Создание эксперта без программирования с помощью Мастера MQL5 описаны шаги по автоматическому созданию кода советника при помощи Мастера MQL5.
Здесь мы расскажем о трендовой стратегии, основанной на пересечении ценой скользящей средней. Эта стратегия включена в стандартную поставку терминала и называется "Signals based on price crossover with MA". Основные положения стратегии:
- Покупка: при пересечении ценой скользящей средней снизу вверх.
- Продажа: при пересечении ценой скользящей средней сверху вниз.
- Дополнительно реализована фильтрация ложных сигналов путем проверки возрастания/убывания скользящей средней.
Торговая стратегия реализована в классе CSignalMA из Стандартной библиотеки (расположена в MQL5\Include\Expert\Signal\SignalMA.mqh)
Рисунок 1. Торговые сигналы стратегии пересечения ценой скользящей средней
Торговые сигналы
Модуль с торговыми сигналами по данной стратегии реализован в классе CSignalMA, в нем есть несколько защищенных (protected) методов, которые используются для доступа к значениям цен и индикаторов:
double MA(int ind) // возвращает значение средней на указанном баре double Open(int ind) // возвращает цену открытия на указанном баре double Close(int ind) // возвращает цену закрытия на указанном баре double StateMA(int ind) // возвращает положительное число, если средняя возрастает и отрицательное, если убывает double StateOpen(int ind) // возвращает разность между ценой открытия и скользящей средней double StateClose(int ind) // возвращает разность между ценой закрытия и скользящей средней
1. Открытие длинной позиции
Определение факта пересечения ценой скользящей средней снизу вверх и проверка возрастания скользящей средней:
- Open(1)<MA(1): цена открытия ниже скользящей средней;
- Close(1)>MA(1): цена закрытия выше скользящей средней;
- MA(1)>MA(2): проверка возрастания скользящей средней (фильтрация ложных сигналов).
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для покупки | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- цена пересекла скользящую среднюю снизу вверх и скользящая средняя возрастает return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); }
2. Закрытие длинной позиции
Определение факта пересечения ценой скользящей средней сверху вниз и проверка убывания скользящей средней:
- Open(1)>MA(1): цена открытия выше скользящей средней;
- Close(1)<MA(1): цена закрытия ниже скользящей средней;
- MA(1)<MA(2): проверка убывания скользящей средней (фильтрация ложных сигналов).
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для закрытия длинной позиции | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseLong(double& price) { price=0.0; //--- цена пересекла скользящую среднюю сверху вниз и скользящая средняя убывает return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
3. Открытие короткой позиции
Правила открытия короткой позиции аналогичны правилам закрытия длинной позиции.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для продажи | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- цена пересекла скользящую среднюю сверху вниз и скользящая средняя убывает return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
4. Закрытие короткой позиции
Правила закрытия короткой позиции аналогичны правилам открытия длинной позиции.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для закрытия короткой позиции | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseShort(double& price) { price=0.0; //--- цена пересекла скользящую среднюю снизу вверх и скользящая средняя возрастает return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); } //+------------------------------------------------------------------+
Создание эксперта на основе торговых сигналов при помощи Мастера MQL5
Чтобы создать торгового робота по данной стратегии при помощи Мастера MQL5, выберите на втором шаге тип сигналов "Signals based on price crossover with MA":
Рисунок 2. Выбор модуля сигналов пересечения ценой скользящей средней в Мастере MQL5
На последующих шагах укажите нужный тип трейлинга и систему управления капиталом. Код эксперта будет создан автоматически, теперь его нужно скомпилировать и можно приступать к тестированию.
Результаты тестирования
Результаты тестирования советника на исторических данных (EURUSD H1, период тестирования: 1.1.2010-05.01.2011, MA_period=12, MA_Shift=0).
В данном советнике использовался модуль торговли фиксированным объемом 0.1 лота (Trading Fixed Lot), трейлинг не использовался (Trailing not used).
Рисунок 3. Результаты тестирования советника, использующего стратегию пересечения ценой скользящей средней
Файл SignalMA.mqh, содержащий класс торговых сигналов CSignalMA (входит в Стандартную библиотеку MetaTrader 5) располагается в папке MQL5\Include\Expert\Signal.
Код советника, созданного Мастером MQL5, прилагается в файле crossoverma.mq5.
Индикатор строит канал по уравнению линейной регрессии y=b+a*x.
ZigzagColor_ChannelИндикатор ZigzagColor, рисующий канал.
Торговые сигналы по взаимному расположению трех экспоненциально сглаженных скользящих средних "Signals based on three EMA".
DXMAИндикатор скользящей средней с учетом DMI (Directional Movement Index).