48 lines
2 KiB
MQL5
48 lines
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"
|
|||
|
|
|||
|
//+------------------------------------------------------------------+
|
|||
|
//| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MovingAverage. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD> |
|
|||
|
//| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|||
|
//+------------------------------------------------------------------+
|
|||
|
class CTrailingMoving : public CTrailing
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual bool Modify(void);
|
|||
|
CIndMovingAverage* Moving;
|
|||
|
virtual CTrailing* Copy(void);
|
|||
|
};
|
|||
|
//+------------------------------------------------------------------+
|
|||
|
//| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|||
|
//+------------------------------------------------------------------+
|
|||
|
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;
|
|||
|
}
|
|||
|
//+------------------------------------------------------------------+
|
|||
|
//| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CTrailingMoving |
|
|||
|
//+------------------------------------------------------------------+
|
|||
|
CTrailing* CTrailingMoving::Copy(void)
|
|||
|
{
|
|||
|
CTrailingMoving* mov = new CTrailingMoving();
|
|||
|
mov.Moving = Moving;
|
|||
|
return mov;
|
|||
|
}
|