2026-03-06 03:57:21 +03:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| DefendModifier.mq5 |
|
|
|
|
|
//| Copyright 2026, MasterOfPuppets |
|
|
|
|
|
//| https://forge.mql5.io/masterofpuppets/mql5 |
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-03-06 04:04:03 +03:00
|
|
|
#ifndef MASTER_OF_PUPPETS_LIB_DEFEND_MODIFIER_MQ5
|
|
|
|
|
#define MASTER_OF_PUPPETS_LIB_DEFEND_MODIFIER_MQ5
|
2026-03-06 03:57:21 +03:00
|
|
|
|
2026-03-06 06:41:42 +03:00
|
|
|
#include <MasterOfPuppetsLib\Modifiers\DefendModifier.mqh>
|
|
|
|
|
#include <MasterOfPuppetsLib\Utils.mqh>
|
2026-03-06 03:57:21 +03:00
|
|
|
|
|
|
|
|
#property copyright "Copyright 2026, MasterOfPuppets"
|
|
|
|
|
#property link "https://forge.mql5.io/masterofpuppets/mql5"
|
|
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
//| Modify function |
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
void DefendModifier::Modify() const
|
|
|
|
|
{
|
2026-03-06 19:04:08 +03:00
|
|
|
if(m_withExpert && m_tradeContext.GetPositionInfo().Magic() != m_traderContext.GetMagic())
|
2026-03-06 03:57:21 +03:00
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
double deltaStopLoss = 0.0;
|
|
|
|
|
switch(m_tradeContext.GetPositionInfo().PositionType())
|
|
|
|
|
{
|
|
|
|
|
case ENUM_POSITION_TYPE::POSITION_TYPE_BUY:
|
|
|
|
|
deltaStopLoss = m_traderContext.GetStopLoss();
|
|
|
|
|
break;
|
|
|
|
|
case ENUM_POSITION_TYPE::POSITION_TYPE_SELL:
|
|
|
|
|
deltaStopLoss = -m_traderContext.GetStopLoss();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
double stopLoss = IsZero(m_tradeContext.GetPositionInfo().StopLoss())
|
|
|
|
|
? m_tradeContext.GetPositionInfo().PriceOpen() : m_tradeContext.GetPositionInfo().StopLoss();
|
|
|
|
|
m_tradeContext.GetTrade().PositionModify(m_tradeContext.GetPositionInfo().Ticket(),
|
|
|
|
|
m_tradeContext.GetSymbolInfo().NormalizePrice(stopLoss + deltaStopLoss),
|
|
|
|
|
m_tradeContext.GetPositionInfo().TakeProfit());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
//+------------------------------------------------------------------+
|