Add Support for Risk Per Balance on Each Trade ...

This commit is contained in:
2024-11-20 06:48:56 +03:30
parent b6eb538568
commit 6aeea1c5c7
2 changed files with 62 additions and 2 deletions
+59 -1
View File
@@ -21,9 +21,9 @@
//
// Imports ...
#include "../Libraries/x-121.smc.lib.mq5"
#include "../../Classes/x-saherelm.x-expert.class.mq5"
#include "../Classes/x-121.smc.x-tradehandler.class.mq5"
#include "../Libraries/x-121.smc.lib.mq5"
#include "../Strategy/x-121.smc.test.strategy.class.mq5"
//
@@ -127,6 +127,33 @@ class XC121SMCExpert : public XCBaseExpert
mDynamicVolumeBalanceFactor = value;
}
/**
* Get Risk Percent Per Balance in Each Trade ...
*
* @return ( double )
*/
double RiskPercentPerBalance()
{
return mRiskPercentPerBalance;
}
/**
* Set Risk Percent Per Balance in Each Trade ...
*
* @param value: Double
*/
void RiskPercentPerBalance(double value)
{
//
if (value < 0)
{
value = 0;
}
//
mRiskPercentPerBalance = value;
}
/**
* Get Static Volume ...
*
@@ -799,6 +826,36 @@ class XC121SMCExpert : public XCBaseExpert
signal.volume = Volume();
}
}
else if (RiskPercentPerBalance() > 0)
{
//
double riskPercent = RiskPercentPerBalance();
//
double balance = mTrader.mAccount.GetBalance();
double riskAmountPerBalance = (riskPercent * balance) / 100;
//
double risk = signal.GetRisk();
double points = GetPoints(signal.symbol);
double riskInPoints = risk / points;
//
double volume = mTrader.mAccount.CalculateVolume(
signal.symbol,
riskAmountPerBalance,
riskInPoints //
);
//
if (volume > 0)
{
volume = NormalizeVolume(volume, signal.symbol);
}
//
signal.volume = volume;
}
else
{
signal.volume = Volume();
@@ -906,6 +963,7 @@ class XC121SMCExpert : public XCBaseExpert
double mDynamicVolumeStep; // Increase Volume Step ...
double mDynamicVolumeBalanceFactor; // Balance Factor for Generate Dynamic Volume ...
double mVolume; // Static Volume ...
double mRiskPercentPerBalance; // Risk Percent Per Balance in Each Trade ...
//
};