last works on FIMA Back Tester ...

This commit is contained in:
2025-09-19 15:10:55 +03:30
parent 38d741da18
commit 5872d9f29b
4 changed files with 395 additions and 48 deletions
+68 -3
View File
@@ -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;