77 lines
3.5 KiB
MQL5
77 lines
3.5 KiB
MQL5
|
//+------------------------------------------------------------------+
|
||
|
//| MoneyFixedMargin.mqh |
|
||
|
//| Copyright 2000-2025, MetaQuotes Ltd. |
|
||
|
//| https://www.mql5.com |
|
||
|
//+------------------------------------------------------------------+
|
||
|
#include <Expert\ExpertMoney.mqh>
|
||
|
// 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);
|
||
|
}
|
||
|
//+------------------------------------------------------------------+
|