Add Support for Risk Per Balance on Each Trade ...
This commit is contained in:
@@ -48,6 +48,7 @@ input bool eaUseDynamicVolume = false; // Use Dynamic Volume
|
||||
input double eaDynamicVolumeStep = 0.01; // Increase Volume Step
|
||||
input double eaDynamicVolumeBalanceFactor = 200; // Balance Factor for Generate Dynamic Volume
|
||||
input double eaVolume = 0.05; // Static Volume
|
||||
input double eaRiskPercentPerBalance = 0.25; // Risk Percent Per Balance on Each Trade
|
||||
|
||||
//
|
||||
// Signalling ...
|
||||
@@ -142,6 +143,7 @@ int OnInit()
|
||||
eaExpert.Volume(eaVolume);
|
||||
eaExpert.UseDynamicVolume(eaUseDynamicVolume);
|
||||
eaExpert.DynamicVolumeStep(eaDynamicVolumeStep);
|
||||
eaExpert.RiskPercentPerBalance(eaRiskPercentPerBalance);
|
||||
eaExpert.DynamicVolumeBalanceFactor(eaDynamicVolumeBalanceFactor);
|
||||
|
||||
//
|
||||
@@ -248,7 +250,7 @@ void OnStopLossTriggered(const XDeal &deal)
|
||||
*/
|
||||
void OnTakeProfitTriggered(const XDeal &deal)
|
||||
{
|
||||
eaExpert.HandleOnTakeProfitTriggered(deal);
|
||||
eaExpert.HandleOnTakeProfitTriggered(deal);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 ...
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user