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 eaDynamicVolumeStep = 0.01; // Increase Volume Step
|
||||||
input double eaDynamicVolumeBalanceFactor = 200; // Balance Factor for Generate Dynamic Volume
|
input double eaDynamicVolumeBalanceFactor = 200; // Balance Factor for Generate Dynamic Volume
|
||||||
input double eaVolume = 0.05; // Static Volume
|
input double eaVolume = 0.05; // Static Volume
|
||||||
|
input double eaRiskPercentPerBalance = 0.25; // Risk Percent Per Balance on Each Trade
|
||||||
|
|
||||||
//
|
//
|
||||||
// Signalling ...
|
// Signalling ...
|
||||||
@@ -142,6 +143,7 @@ int OnInit()
|
|||||||
eaExpert.Volume(eaVolume);
|
eaExpert.Volume(eaVolume);
|
||||||
eaExpert.UseDynamicVolume(eaUseDynamicVolume);
|
eaExpert.UseDynamicVolume(eaUseDynamicVolume);
|
||||||
eaExpert.DynamicVolumeStep(eaDynamicVolumeStep);
|
eaExpert.DynamicVolumeStep(eaDynamicVolumeStep);
|
||||||
|
eaExpert.RiskPercentPerBalance(eaRiskPercentPerBalance);
|
||||||
eaExpert.DynamicVolumeBalanceFactor(eaDynamicVolumeBalanceFactor);
|
eaExpert.DynamicVolumeBalanceFactor(eaDynamicVolumeBalanceFactor);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -248,7 +250,7 @@ void OnStopLossTriggered(const XDeal &deal)
|
|||||||
*/
|
*/
|
||||||
void OnTakeProfitTriggered(const XDeal &deal)
|
void OnTakeProfitTriggered(const XDeal &deal)
|
||||||
{
|
{
|
||||||
eaExpert.HandleOnTakeProfitTriggered(deal);
|
eaExpert.HandleOnTakeProfitTriggered(deal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -21,9 +21,9 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Imports ...
|
// Imports ...
|
||||||
#include "../Libraries/x-121.smc.lib.mq5"
|
|
||||||
#include "../../Classes/x-saherelm.x-expert.class.mq5"
|
#include "../../Classes/x-saherelm.x-expert.class.mq5"
|
||||||
#include "../Classes/x-121.smc.x-tradehandler.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"
|
#include "../Strategy/x-121.smc.test.strategy.class.mq5"
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -127,6 +127,33 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
mDynamicVolumeBalanceFactor = value;
|
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 ...
|
* Get Static Volume ...
|
||||||
*
|
*
|
||||||
@@ -799,6 +826,36 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
signal.volume = Volume();
|
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
|
else
|
||||||
{
|
{
|
||||||
signal.volume = Volume();
|
signal.volume = Volume();
|
||||||
@@ -906,6 +963,7 @@ class XC121SMCExpert : public XCBaseExpert
|
|||||||
double mDynamicVolumeStep; // Increase Volume Step ...
|
double mDynamicVolumeStep; // Increase Volume Step ...
|
||||||
double mDynamicVolumeBalanceFactor; // Balance Factor for Generate Dynamic Volume ...
|
double mDynamicVolumeBalanceFactor; // Balance Factor for Generate Dynamic Volume ...
|
||||||
double mVolume; // Static Volume ...
|
double mVolume; // Static Volume ...
|
||||||
|
double mRiskPercentPerBalance; // Risk Percent Per Balance in Each Trade ...
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user