//+------------------------------------------------------------------+ //| TrailingMoving.mqh | //| Copyright 2016, Vasiliy Sokolov. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, Vasiliy Sokolov." #property link "http://www.mql5.com" #include "Trailing.mqh" #include "..\Indicators\MovingAverage.mqh" //+------------------------------------------------------------------+ //| Трейлинг-стоп на основе MovingAverage. Устанавливает стоп-лосс | //| позиции равным уровню скользящей средней | //+------------------------------------------------------------------+ class CTrailingMoving : public CTrailing { public: virtual bool Modify(void); CIndMovingAverage* Moving; virtual CTrailing* Copy(void); }; //+------------------------------------------------------------------+ //| Устанавливает стоп-лосс позиции равным уровню скользящей средней | //+------------------------------------------------------------------+ bool CTrailingMoving::Modify(void) { if(CheckPointer(Moving) == POINTER_INVALID) return false; double value = Moving.OutValue(1); if(m_position.Direction() == POSITION_TYPE_BUY && value > m_position.CurrentPrice()) m_position.CloseAtMarket(); else if(m_position.Direction() == POSITION_TYPE_SELL && value < m_position.CurrentPrice()) m_position.CloseAtMarket(); else if(m_position.StopLossValue() != value) return m_position.StopLossValue(value); return false; } //+------------------------------------------------------------------+ //| Возвращает точную копию экземпляра CTrailingMoving | //+------------------------------------------------------------------+ CTrailing* CTrailingMoving::Copy(void) { CTrailingMoving* mov = new CTrailingMoving(); mov.Moving = Moving; return mov; }