add XTargetManager Class and use it in XBacktesterEA Class ...

also i have to implement it's usage on XCExpert Class ...
extends XTarget approaches and add support to Distances ...
This commit is contained in:
2025-10-01 17:16:13 +03:30
parent 684d3028c4
commit 2669790493
7 changed files with 1054 additions and 201 deletions
@@ -23,6 +23,7 @@
#include "../Classes/x-saherelm.base.class.mq5"
#include "../Classes/x-saherelm.x-alert.class.mq5"
#include "../Classes/x-saherelm.x-chart.helper.class.mq5"
#include "../Classes/x-saherelm.x-target.manager.class.mq5"
#include "../Classes/x-saherelm.x-trade.class.mq5"
#include "../Classes/x-saherelm.x-volume.class.mq5"
@@ -80,8 +81,11 @@ class XCBackTesterEA : public XCBase
double volume; // Default volume Per Trade ...
//
XCAlert *eaAlert; // EA Scope Alert Handler ...
XCTrade *eaTrader; // EA Scope Trade Handler ...
XCAlert *eaAlert; // EA Scope Alert Handler ...
XCTrade *eaTrader; // EA Scope Trade Handler ...
XCTargetManager *eaTargetManager; // EA Scope Target Manager ...
//
XCChartHelper *eaChartHelper; // Chart Helper Class ...
//
@@ -273,6 +277,23 @@ class XCBackTesterEA : public XCBase
}
}
//
// Signal Executed Event Handlers ...
count = ArraySize(mOnSignalExecutedEventHandlers);
has = IsValidSize(count);
if (has)
{
//
for (int i = 0; i < count; i++)
{
eaTrader.AddOnSignalExecutedEventHandler(mOnSignalExecutedEventHandlers[i]);
}
}
//
// Init Target Managers ...
eaTargetManager = new XCTargetManager(eaTrader);
//
// Initial GUI ...
result = InitGUI();
@@ -294,6 +315,11 @@ class XCBackTesterEA : public XCBase
*/
void HandleOnDeInit()
{
//
eaTargetManager.Destroy();
delete eaTargetManager;
ZeroMemory(eaTargetManager);
//
delete eaTrader;
ZeroMemory(eaTrader);
@@ -326,7 +352,12 @@ class XCBackTesterEA : public XCBase
*/
void HandleOnTick()
{
//
UpdateGUI();
//
// Managing Targets ...
eaTargetManager.Manage();
}
/**
@@ -395,6 +426,9 @@ class XCBackTesterEA : public XCBase
//
// Update Position Buttons ...
UpdatePositionButtons();
//
eaTargetManager.HandleOnStopLossTriggered(deal);
}
/**
@@ -407,6 +441,9 @@ class XCBackTesterEA : public XCBase
//
// Update Position Buttons ...
UpdatePositionButtons();
//
eaTargetManager.HandleOnTakeProfitTriggered(deal);
}
/**
@@ -425,6 +462,13 @@ class XCBackTesterEA : public XCBase
//
// Update Position Buttons ...
UpdatePositionButtons();
//
eaTargetManager.HandleOnPositionForceClosed(
ticket,
position,
comment //
);
}
/**
@@ -502,6 +546,34 @@ class XCBackTesterEA : public XCBase
{
}
/**
* Handle New Signal Recieved ...
*
* @param signal: XSignal, reference to recieved Signal ...
*/
void HandleOnSignalTriggered(XSignal &signal)
{
//
ENUM_X_SIGNAL_EXECUTION_RESULT result;
bool isExcuted = eaTrader.ExecuteSignal(
signal,
result //
);
if (isExcuted)
{
}
}
/**
* Handle Signal Executed Event ...
*
* @param signal: XSignal, reference to Executed Signal ...
*/
void HandleOnSignalExecuted(XSignal &signal)
{
eaTargetManager.AddExecutedSignal(signal);
}
//
// Props and Setter / Getter (s) ...
@@ -652,6 +724,23 @@ class XCBackTesterEA : public XCBase
);
}
//
// Add New Signal Executed Event Handler ...
void AddOnSignalExecutedEventHandler(TOnSignal handler)
{
//
if (handler == NULL)
{
return;
}
//
Add(
handler,
mOnSignalExecutedEventHandlers //
);
}
//
// Protected ...
protected:
@@ -667,6 +756,7 @@ class XCBackTesterEA : public XCBase
TOnStopLoss mStopLossEventHandlers[];
TOnTakeProfit mTakeProfitEventHandlers[];
TOnForceClose mOnForceCloseEventHandlers[];
TOnSignal mOnSignalExecutedEventHandlers[];
TOnDealsChanged mDealsChangedEventHandlers[];
TOnOrdersChanged mOrdersChangedEventHandlers[];
TOnPartialClose mOnPartialCloseEventHandlers[];