UTE/Strategy/Trailings/TrailingMoving.mqh

48 lines
2 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:34:43 +02:00
//+------------------------------------------------------------------+
//| 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;
}