69 lines
No EOL
1.9 KiB
MQL5
69 lines
No EOL
1.9 KiB
MQL5
enum ENUM_MONEY_MGMT
|
|
{
|
|
MMTAccount,//Saldo em conta
|
|
MMTFixed//Saldo fixo
|
|
};
|
|
|
|
class MoneyMgmt
|
|
{
|
|
public:
|
|
ENUM_MONEY_MGMT mgmt;
|
|
double MyCapital;
|
|
double MyMargin;
|
|
double MyMarginFrac;
|
|
MoneyMgmt(void)
|
|
{
|
|
mgmt=MMTAccount;
|
|
MyCapital=0;
|
|
MyMargin=0;
|
|
MyMarginFrac=2;
|
|
}
|
|
double Balance(void)
|
|
{
|
|
switch (mgmt)
|
|
{
|
|
case MMTAccount:return AccountInfoDouble(ACCOUNT_BALANCE);break;
|
|
case MMTFixed:return(MyCapital);break;
|
|
}
|
|
return(0);
|
|
}
|
|
double Equity(AssetData &data[])
|
|
{
|
|
switch (mgmt)
|
|
{
|
|
case MMTAccount:return AccountInfoDouble(ACCOUNT_EQUITY);break;
|
|
case MMTFixed:return(MyCapital+FloatProfit(data));break;
|
|
}
|
|
return(0);
|
|
}
|
|
double MarginFree(AssetData &data[])
|
|
{
|
|
switch (mgmt)
|
|
{
|
|
case MMTAccount:return (MyMarginFrac*AccountInfoDouble(ACCOUNT_BALANCE)-Invested(data));break;
|
|
case MMTFixed:return(MyMargin-Invested(data));break;
|
|
}
|
|
return(0);
|
|
}
|
|
double FloatProfit(AssetData &data[])
|
|
{
|
|
switch (mgmt)
|
|
{
|
|
case MMTAccount:return AccountInfoDouble(ACCOUNT_PROFIT);break;
|
|
case MMTFixed:
|
|
{
|
|
double profit=0;
|
|
for (int i=0;i<ArraySize(data);i++) if (PositionSelect(data[i].ticker)&&(UseAssetLock?data[i].mydata.AssetLock.CheckOwner(EAMAGIC):true)) profit+=PositionGetDouble(POSITION_PROFIT);
|
|
return(profit);
|
|
break;
|
|
}
|
|
}
|
|
return(0);
|
|
}
|
|
double Invested(AssetData &data[])
|
|
{
|
|
double invested=0;
|
|
for (int i=0;i<ArraySize(data);i++) if (PositionSelect(data[i].ticker)&&(UseAssetLock?data[i].mydata.AssetLock.CheckOwner(EAMAGIC):true)) invested+=PositionGetDouble(POSITION_VOLUME)*PositionGetDouble(POSITION_PRICE_OPEN);
|
|
return(invested);
|
|
}
|
|
}; |