Biblioteca2/Include/money.mqh

69 lines
1.9 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 14:43:36 +02:00
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);
}
};