last works on FIMA Back Tester ...
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
// - [] ProcessTick: Processing All Ticks
|
||||
// - [] ProcessNewBar: Processing All New Bars
|
||||
// - [] CheckForGuard: Check For Guards
|
||||
// - [] NormalizeSignal: Normalizing Prepared Signal ...
|
||||
// - [] CheckAdditionslSignallerValidations: Additional Class Validations
|
||||
//
|
||||
// - Dont Forget to Call OnSignal Event in Process Methods when
|
||||
@@ -37,6 +38,7 @@
|
||||
// Imports ...
|
||||
#include "../Classes/x-saherelm.base.class.mq5"
|
||||
#include "../Libraries/x-saherelm.x-trade.lib.mq5"
|
||||
#include "../Classes/x-saherelm.x-market.pattern.class.mq5"
|
||||
|
||||
//
|
||||
// Definitions ...
|
||||
@@ -57,6 +59,9 @@ class XCBaseSignaller : public XCBase
|
||||
//
|
||||
TCanAnalyse canAnalyseEventListener;
|
||||
|
||||
//
|
||||
XCMarketPatternDetector *patternDetector;
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
XCBaseSignaller(
|
||||
@@ -92,6 +97,9 @@ class XCBaseSignaller : public XCBase
|
||||
// Set Dfault Values ...
|
||||
mProcessedTicksCount = 0;
|
||||
mLastCheckedBarTime = NULL;
|
||||
|
||||
//
|
||||
patternDetector = new XCMarketPatternDetector();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -101,6 +109,10 @@ class XCBaseSignaller : public XCBase
|
||||
//
|
||||
// Cleanup Event Listeners ...
|
||||
SpecifiedClean(onSignalEventListeners);
|
||||
|
||||
//
|
||||
delete patternDetector;
|
||||
ZeroMemory(patternDetector);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -286,6 +298,15 @@ class XCBaseSignaller : public XCBase
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizing Signal by Signaller Custom Props ...
|
||||
*
|
||||
* @param signal: XSignal ...
|
||||
*/
|
||||
void virtual NormalizeSignal(XSignal &signal)
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Protected ...
|
||||
protected:
|
||||
@@ -381,11 +402,20 @@ class XCBaseSignaller : public XCBase
|
||||
*
|
||||
* @param signal: XSignal, holding result Signal ...
|
||||
* @param forDir: ENUM_X_DIRECTION
|
||||
* @param targets: XTarget Array, Provides Signal Targets (Price) ...
|
||||
* @param r2r: double, Provides Signal (r2r), if not Provided uses Default R2R ...
|
||||
* @param slPrice: double, Provides Signal SL Price, if not Provided uses riskInPoint ...
|
||||
* @param riskInPoint: double, Provides Signal Risk Amount which Multiplied to Points, if not Provided uses DefaultRiskInPoint ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool PrepareSignal(
|
||||
XSignal &signal,
|
||||
ENUM_X_DIRECTION forDir //
|
||||
ENUM_X_DIRECTION forDir,
|
||||
XTarget &targets[], //
|
||||
double r2r = 0,
|
||||
double slPrice = 0,
|
||||
double riskInPoint = 0 //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -417,8 +447,19 @@ class XCBaseSignaller : public XCBase
|
||||
double entry = GetEntry(symbol, forDir);
|
||||
|
||||
//
|
||||
double risk = (defaultSignalRiskInPoint * point);
|
||||
double reward = (risk * defaultSignalR2R) + spread;
|
||||
riskInPoint = riskInPoint > 0 && slPrice <= 0
|
||||
? riskInPoint
|
||||
: defaultSignalRiskInPoint;
|
||||
double risk = (riskInPoint * point);
|
||||
risk = slPrice > 0
|
||||
? MathAbs(entry - slPrice)
|
||||
: risk;
|
||||
|
||||
//
|
||||
r2r = r2r > 0
|
||||
? r2r
|
||||
: defaultSignalR2R;
|
||||
double reward = (risk * r2r) + spread;
|
||||
|
||||
//
|
||||
double tp =
|
||||
@@ -448,9 +489,33 @@ class XCBaseSignaller : public XCBase
|
||||
: POSITION_TYPE_SELL;
|
||||
signal.mode = X_ORDER_MODE_MARKET;
|
||||
|
||||
//
|
||||
// Apply Targets ...
|
||||
if (HasChild(targets))
|
||||
{
|
||||
//
|
||||
ApplyTargetsOnSignal(
|
||||
forDir,
|
||||
targets,
|
||||
signal //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Signal ...
|
||||
result = signal.IsValid();
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
NormalizeSignal(signal);
|
||||
result = signal.IsValid();
|
||||
}
|
||||
|
||||
//
|
||||
if (!result)
|
||||
{
|
||||
signal.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user