Советники: Crossing Moving Average

 

Crossing Moving Average:

Советник работает только в момент рождения нового бара. Объем позиций всегда постоянный и он задается в параметре Lots. Параметры Стоп Лосс (Stop Loss), Тейк Профит (Take Profit) и трейлинг (Trailing Stop) можно отключать - для этого необходимо задать этим параметрам значение "0.0"). Последний параметр Trailing Step - шаг трейлинга.

Используется два индикатора Moving Average (First и Second). Пересечение определятся очень простым способом (необходимо отметить, что это не самый точный способ, зато самый простой) - анализом значений индикаторов на двух соседних барах:

//--- Buy Signal
   if(MA_First[1]>MA_Second[1]+ExtMA_MinimumDistance && MA_First[2]<MA_Second[2]-ExtMA_MinimumDistance)
...
//--- Sell signal
   if(MA_First[1]<MA_Second[1]-ExtMA_MinimumDistance && MA_First[2]>MA_Second[2]+ExtMA_MinimumDistance)
...

Здесь:

  • MA_First[1] - значение индикатора First на баре #1;
  • MA_First[2] - значение индикатора First на баре #2;
  • MA_Second[1] - значение индикатора Second на баре #1;
  • MA_Second[2] - значение индикатора Second на баре #2;
  • ExtMA_MinimumDistance - рассчитанный параметр минимального расстояния между индикаторами (Minimum distance between MA's), кстати этот параметр можно полностью отключать: для этого необходимо задать его как "0.0" во входных параметрах.

Затем каждый сигнал проверяется по фильтру индикатором Momentum - проверяется преодоление параметра Momentum filter.

Визуально это выглядит так:

Crossing Moving Average Algorithm

Тест на EURUSD M15:

Crossing Moving Average

Автор: Vladimir Karputov

 
Здравствуйте Владимир,
Что именно контролируется параметром «MOM_Filter = 0.1»?
Стандартный индикатор импульса на MT5 не имеет такого уровня, как "0,1", потому что (?)
Momentum - Oscillators - MetaTrader 5 Help
Momentum - Oscillators - MetaTrader 5 Help
  • www.metatrader5.com
The Momentum Technical Indicator measures the change of price of a financial instrument over a given time span. There are basically two ways to use...
 
Edviao:
Здравствуйте Владимир,
Что именно контролируется параметром «MOM_Filter = 0.1»?
Стандартный индикатор импульса на MT5 не имеет такого уровня, как "0,1", потому что (?)

Это как бы минимальный отступ. Применяется при определении сигнала:

//--- Buy Signal
   if(MA_First[1]>MA_Second[1]+ExtMA_MinimumDistance && MA_First[2]<MA_Second[2]-ExtMA_MinimumDistance)
      if(curMom>InpMOM_Filter && curMom>prevMom)
        {
         ClosePositions(POSITION_TYPE_SELL);
         double sl=(InpStopLoss==0)?0.0:m_symbol.Ask()-ExtStopLoss;
         if(sl>=m_symbol.Bid()) // incident: the position isn't opened yet, and has to be already closed
           {
            PrevBars=0;
            return;
           }
         double tp=(InpTakeProfit==0)?0.0:m_symbol.Ask()+ExtTakeProfit;
         OpenBuy(sl,tp);
        }
//--- Sell signal
   if(MA_First[1]<MA_Second[1]-ExtMA_MinimumDistance && MA_First[2]>MA_Second[2]+ExtMA_MinimumDistance)
      if(curMom<-InpMOM_Filter && curMom<prevMom)
        {
         ClosePositions(POSITION_TYPE_BUY);
         double sl=(InpStopLoss==0)?0.0:m_symbol.Bid()+ExtStopLoss;
         if(sl<=m_symbol.Ask()) // incident: the position isn't opened yet, and has to be already closed
           {
            PrevBars=0;
            return;
           }
         double tp=(InpTakeProfit==0)?0.0:m_symbol.Bid()-ExtTakeProfit;
         OpenSell(sl,tp);
        }