//+------------------------------------------------------------------+ //| MoneyFixedMargin.mqh | //| Copyright 2000-2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #include // wizard description start //+------------------------------------------------------------------+ //| Description of the class | //| Title=Trading with fixed margin | //| Type=Money | //| Name=FixMargin | //| Class=CMoneyFixedMargin | //| Page= | //| Parameter=Percent,double,10.0,Percentage of margin | //+------------------------------------------------------------------+ // wizard description end //+------------------------------------------------------------------+ //| Class CMoneyFixedMargin. | //| Purpose: Class of money management with fixed percent margin. | //| Derives from class CExpertMoney. | //+------------------------------------------------------------------+ class CMoneyFixedMargin : public CExpertMoney { public: CMoneyFixedMargin(void); ~CMoneyFixedMargin(void); //--- virtual double CheckOpenLong(double price,double sl); virtual double CheckOpenShort(double price,double sl); }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ void CMoneyFixedMargin::CMoneyFixedMargin(void) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ void CMoneyFixedMargin::~CMoneyFixedMargin(void) { } //+------------------------------------------------------------------+ //| Getting lot size for open long position. | //+------------------------------------------------------------------+ double CMoneyFixedMargin::CheckOpenLong(double price,double sl) { if(m_symbol==NULL) return(0.0); //--- select lot size double lot; if(price==0.0) lot=m_account.MaxLotCheck(m_symbol.Name(),ORDER_TYPE_BUY,m_symbol.Ask(),m_percent); else lot=m_account.MaxLotCheck(m_symbol.Name(),ORDER_TYPE_BUY,price,m_percent); //--- return trading volume return(lot); } //+------------------------------------------------------------------+ //| Getting lot size for open short position. | //+------------------------------------------------------------------+ double CMoneyFixedMargin::CheckOpenShort(double price,double sl) { if(m_symbol==NULL) return(0.0); //--- select lot size double lot; if(price==0.0) lot=m_account.MaxLotCheck(m_symbol.Name(),ORDER_TYPE_SELL,m_symbol.Bid(),m_percent); else lot=m_account.MaxLotCheck(m_symbol.Name(),ORDER_TYPE_SELL,price,m_percent); //--- return trading volume return(lot); } //+------------------------------------------------------------------+