Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
Мастер MQL5 - Торговые сигналы по пересечению ценой средней с подтверждением от индикатора ADX - эксперт для MetaTrader 5
- Просмотров:
- 5618
- Рейтинг:
- Опубликован:
- 2011.01.10 16:50
- Обновлен:
- 2016.11.22 07:33
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
В статье Создание эксперта без программирования с помощью Мастера MQL5 описаны шаги по автоматическому созданию кода советника при помощи Мастера MQL5.
Здесь мы расскажем о трендовой стратегии, основанной на пересечении ценой скользящей средней c подтверждением при помощи индикатора ADX. Эта стратегия включена в стандартную поставку терминала и называется "Signals based on price crossover with MA confirmed by ADX".
Основные положения стратегии:
- Покупка: цена закрытия завершенного бара выше скользящей средней, при этом скользящая средняя возрастает на предыдущем и текущем барах.
- Продажа: цена закрытия завершенного бара ниже скользящей средней, при этом скользящая средняя убывает на предыдущем и текущем барах.
- Дополнительно реализована фильтрация ложных сигналов путем анализа наличия направления (DI+, DI-) и силы трендового движения (ADX>ADXmin).
Торговая стратегия реализована в классе CSignalADX_MA.
Рисунок 1. Торговые сигналы стратегии пересечения ценой скользящей средней с подтверждением ADX
Торговые сигналы
Модуль с торговыми сигналами по данной стратегии реализован в классе CSignalADX_MA, в нем есть несколько защищенных (protected) методов, которые используются для доступа к значениям цен и индикаторов:
double PlusADX(int ind) // возвращает значение линии DI+ на указанном баре double MainADX(int ind) // возвращает значение основной линии на указанном баре double MinusADX(int ind) // возвращает значение линии DI- на указанном баре double EMA(int ind) // возвращает значение скользящей средней на указанном баре double Close(int ind) // возвращает значение цены закрытия на указанном баре double StateADX(int ind) // возвращает разность между линиями DI+ и DI- double StateEMA(int ind) // возвращает положительное значение, если EMA возрастает и отрицательное, если убывает double StateClose(int ind) // возвращает разность между ценой закрытия и скользящей средней
1. Открытие длинной позиции
Условия открытия длинной позиции:
- StateEMA(0)<0 и StateEMA(1)>0: скользящая средняя возрастает на текущем и предыдущем баре;
- StateClose(1)>0: цена закрытия завершенного бара выше скользящей средней;
- MainADX(0)>minimum_ADX: значение ADX на текущем баре больше минимально заданного;
- StateADX(0)>0: на текущем баре значение DI+>DI-.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для покупки | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- условие 1: скользящая средняя возрастает на текущем и предыдущем баре bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0); //--- условие 2: цена закрытия завершенного бара выше скользящей средней bool Buy_Condition_2=(StateClose(1)>0); //--- условие 3: значение ADX на текущем баре больше минимально заданного bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX); //--- условие 4: на текущем баре значение DI+ больше, чем DI- bool Buy_Condition_4=(StateADX(0)>0); //--- price=0.0; sl =m_symbol.Ask()-m_stop_loss*m_adjusted_point; tp =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- проверка одновременного выполнения всех 4 условий return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4); }
2. Закрытие длинной позиции
Условия закрытия длинной позиции:
- StateEMA(0)<0 и StateEMA(1)<0: скользящая средняя убывает на текущем и предыдущем баре;
- StateClose(1)<0: цена закрытия завершенного бара ниже скользящей средней;
- MainADX(0)>minimum_ADX: значение ADX на текущем баре больше минимально заданного;
- StateADX(0)<0: на текущем баре значение DI->DI+.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для закрытия длинной позиции | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseLong(double& price) { //--- условие 1: скользящая средняя убывает на текущем и предыдущем баре bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0); //--- условие 2: цена закрытия завершенного бара ниже скользящей средней bool Sell_Condition_2=(StateClose(1)<0); //--- условие 3: значение ADX на текущем баре больше минимально заданного bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX); //--- условие 4: на текущем баре DI- больше, чем DI+ bool Sell_Condition_4=(StateADX(0)<0); //--- price=0.0; //--- проверка одновременного выполнения всех 4 условий return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4); }
3. Открытие короткой позиции
Правила открытия короткой позиции аналогичны правилам закрытия длинной позиции.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для продажи | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- условие 1: скользящая средняя убывает на текущем и предыдущем баре bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0); //--- условие 2: цена закрытия завершенного бара ниже скользящей средней bool Sell_Condition_2=(StateClose(1)<0); //--- условие 3: значение ADX на текущем баре больше минимально заданного bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX); //--- условие 4: на текущем баре DI- больше, чем DI+ bool Sell_Condition_4=(StateADX(0)<0); //--- price=0.0; sl =m_symbol.Bid()+m_stop_loss*m_adjusted_point; tp =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- проверка одновременного выполнения всех 4 условий return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4); }
4. Закрытие короткой позиции
Правила закрытия короткой позиции аналогичны правилам открытия длинной позиции.
//+------------------------------------------------------------------+ //| Проверяет выполнение условий для закрытия короткой позиции | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseShort(double& price) { //--- условие 1: скользящая средняя возрастает на текущем и предыдущем баре bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0); //--- условие 2: цена закрытия завершенного бара выше скользящей средней bool Buy_Condition_2=(StateClose(1)>0); //--- условие 3: значение ADX на текущем баре больше минимально заданного bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX); //--- условие 4: на текущем баре значение DI+ больше, чем DI- bool Buy_Condition_4=(StateADX(0)>0); //--- price=0.0; //--- проверка одновременного выполнения всех 4 условий return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4); }
Создание эксперта на основе торговых сигналов при помощи Мастера MQL5
Чтобы создать торгового робота по данной стратегии при помощи Мастера MQL5, выберите на втором шаге тип сигналов "Signals based on price crossover with MA confirmed by ADX":
Рисунок 2. Выбор модуля сигналов пересечения ценой скользящей средней с подтверждением от ADX в Мастере MQL5
На последующих шагах укажите нужный тип трейлинга и систему управления капиталом. Код эксперта будет создан автоматически, теперь его нужно скомпилировать и можно приступать к тестированию.
Результаты тестирования
Результаты тестирования советника на исторических данных (EURUSD H1, период тестирования: 1.1.2010-05.01.2011, PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).
В данном советнике использовался модуль торговли фиксированным объемом 0.1 лота (Trading Fixed Lot), трейлинг не использовался (Trailing not used).
Рисунок 3. Результаты тестирования советника, использующего стратегию пересечения ценой скользящей средней с подтверждением от ADX
Файл SignalADX-MA.mqh, содержащий класс торговых сигналов CSignalADX_MA нужно скопировать в папку
каталог_данных_терминала\MQL5\Include\Expert\Signal.
Код советника, созданного Мастером MQL5, прилагается в файле ma_crossover_adx.mq5.
Индикатор скользящей средней с учетом DMI (Directional Movement Index).
Мастер MQL5 - Торговые сигналы по взаимному расположению трех скользящих среднихТорговые сигналы по взаимному расположению трех экспоненциально сглаженных скользящих средних "Signals based on three EMA".
Скрипт, генерирующий собственный исходный текст. Решение классической задачи на MQL5. Прикладного значения не имеет. Впрочем, может быть полезен изучающим программирование и алгоритмизацию.
Мастер MQL5 - Торговые сигналы по пересечению двух экспоненциальных скользящих среднихТорговые сигналы по пересечению двух экспоненциально сглаженных скользящих средних "Signals based on crossover of two EMA".