48 lines
No EOL
2 KiB
MQL5
48 lines
No EOL
2 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| 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;
|
|
} |