This commit is contained in:
2025-10-01 20:38:37 +03:30
parent abd377c7fb
commit 712bac2225
4 changed files with 124 additions and 16 deletions
+70 -7
View File
@@ -27,6 +27,7 @@
#include "../Classes/x-saherelm.x-chart.helper.class.mq5"
#include "../Classes/x-saherelm.x-guard.class.mq5"
#include "../Classes/x-saherelm.x-signaller.class.mq5"
#include "../Classes/x-saherelm.x-target.class.mq5"
#include "../Classes/x-saherelm.x-trade-manager.class.mq5"
#include "../Classes/x-saherelm.x-volume.class.mq5"
@@ -121,11 +122,12 @@ class XCBaseExpert : public XCBase
//
XCAlert *eaAlert; // EA Scope Alert Handler ...
XCVolume *eaVolume; // EA Scope Voluem Handler ...
XCGuard *eaGuard; // EA Scope Guard Handler ...
XCTrade *eaTrader; // EA Scope Trade Handler ...
XCTradeManager *eaTradeManager; // EA Scope Trade Handler ...
XCVolume *eaVolume; // EA Scope Voluem Handler ...
XCTarget *eaTarget; // EA Scope Target Handler ...
XTimeTracker eaTimeTracker; // EA Scope Time Tracker ...
XCTradeManager *eaTradeManager; // EA Scope Trade Manager Handler ...
//
// Specified Event Handlers ...
@@ -319,6 +321,19 @@ class XCBaseExpert : 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]);
}
}
//
// Initialize Guard Handler ...
eaGuard = new XCGuard(
@@ -330,13 +345,18 @@ class XCBaseExpert : public XCBase
// Attach Event Handler ...
eaGuard.onGuardEventListener = onGuardedEventHandler;
//
// Initialize Target Handler ...
eaTarget = new XCTarget(eaTrader, eaAlert);
//
// Initialize Trae Manager ...
eaTradeManager = new XCTradeManager(
eaAlert,
eaTrader,
eaVolume,
eaGuard //
eaGuard,
eaTarget //
);
//
@@ -423,6 +443,11 @@ class XCBaseExpert : public XCBase
delete eaVolume;
ZeroMemory(eaVolume);
//
eaTarget.Destroy();
delete eaTarget;
ZeroMemory(eaTarget);
//
delete eaTradeManager;
ZeroMemory(eaTradeManager);
@@ -536,13 +561,29 @@ class XCBaseExpert : public XCBase
}
/**
* Check For Guard Event Handler ...
* Handle Signal Executed Event ...
*
* @param guards: XGuard[]
* @param signal: XSignal, reference to Executed Signal ...
*/
void HandleOnSignalExecuted(XSignal &signal)
{
eaTradeManager.target.AddExecutedSignal(signal);
}
/**
* Check For Guard ...
*
* @param guards: XGuard, reference Collection to holds result ...
* @param positions: XPosition, refrence collection to Provides Positions ...
* @param barIndex: int, Specified Bar index ...
*
* @return ( int )
*/
int CheckForGuardTriggered(XGuard &guards[])
int CheckForGuardTriggered(
XGuard &guards[],
XPosition &positions[],
int barIndex = 0 //
)
{
//
int result = 0;
@@ -559,7 +600,11 @@ class XCBaseExpert : public XCBase
{
//
XGuard iGuards[];
int iGuardsCount = eaSignallers[i].CheckForGuard(iGuards);
int iGuardsCount = eaSignallers[i].CheckForGuard(
iGuards,
positions,
barIndex //
);
if (IsValidSize(iGuardsCount))
{
//
@@ -803,6 +848,23 @@ class XCBaseExpert : public XCBase
);
}
//
// Add New Signal Executed Event Handler ...
void AddOnSignalExecutedEventHandler(TOnSignal handler)
{
//
if (handler == NULL)
{
return;
}
//
Add(
handler,
mOnSignalExecutedEventHandlers //
);
}
//
// Trade Event Handlers ...
@@ -1077,6 +1139,7 @@ class XCBaseExpert : public XCBase
TOnSignal mOnSignalEventHandlers[];
TOnStopLoss mStopLossEventHandlers[];
TOnTakeProfit mTakeProfitEventHandlers[];
TOnSignal mOnSignalExecutedEventHandlers[];
TOnForceClose mOnForceCloseEventHandlers[];
TOnDealsChanged mDealsChangedEventHandlers[];
TOnOrdersChanged mOrdersChangedEventHandlers[];
+27 -5
View File
@@ -40,6 +40,7 @@ class XCTradeManager : public XCBase
XCAlert *alert;
XCGuard *guard;
XCTrade *trader;
XCTarget *target;
XCVolume *volume;
XTimeTracker timeTracker;
XCDataCollector *collector;
@@ -56,7 +57,8 @@ class XCTradeManager : public XCBase
XCAlert *_alert,
XCTrade *_trader,
XCVolume *_volume,
XCGuard *_guard //
XCGuard *_guard,
XCTarget *_target //
)
{
//
@@ -64,6 +66,7 @@ class XCTradeManager : public XCBase
guard = _guard;
volume = _volume;
trader = _trader;
target = _target;
//
drawer = new XCPOIDrawer();
@@ -104,10 +107,6 @@ class XCTradeManager : public XCBase
//
timeTracker.Clean();
//
ZeroMemory(alert);
ZeroMemory(trader);
//
delete drawer;
ZeroMemory(drawer);
@@ -1202,6 +1201,9 @@ class XCTradeManager : public XCBase
//
RemoveTrade(idx);
//
target.HandleOnTakeProfitTriggered(deal);
}
/**
@@ -1284,6 +1286,9 @@ class XCTradeManager : public XCBase
//
RemoveTrade(idx);
//
target.HandleOnStopLossTriggered(deal);
}
/**
@@ -1371,6 +1376,13 @@ class XCTradeManager : public XCBase
//
RemoveTrade(idx);
//
target.HandleOnPositionForceClosed(
position.ticket,
position,
position.comment //
);
}
/**
@@ -1501,6 +1513,16 @@ class XCTradeManager : public XCBase
{
}
/**
* Handle Signal Executed Event ...
*
* @param signal: XSignal, reference to Executed Signal ...
*/
void HandleSignalExecuted(XSignal &signal)
{
target.AddExecutedSignal(signal);
}
//
// Protected ...
protected:
+11
View File
@@ -241,6 +241,7 @@ int OnInit()
eaExpert.AddOnDealsChangedEventHandler(OnDealsChanged);
eaExpert.AddOnStopLossEventHandler(OnStopLossTriggered);
eaExpert.AddOnOrdersChangedEventHandler(OnOrdersChanged);
eaExpert.AddOnSignalExecutedEventHandler(OnSignalExecuted);
eaExpert.canAnalyseEventHandler = CanAnalyseEventTriggered;
eaExpert.AddOnTakeProfitEventHandler(OnTakeProfitTriggered);
eaExpert.checkForGuardEventHandler = CheckForGuardTriggered;
@@ -401,6 +402,16 @@ void OnSignalTriggered(XSignal &signal)
eaExpert.HandleOnSignalTriggered(signal);
}
/**
* Trigger OnSignal Executed Event ...
*
* @param signal: XSignal
*/
void OnSignalExecuted(XSignal &signal)
{
eaExpert.HandleOnSignalExecuted(signal);
}
/**
* Handle StopLoss Triggered Positions ...
*
+16 -4
View File
@@ -363,6 +363,7 @@ bool CanAnalyseEventTriggered(
datetime time //
)
{
//
return eaExpert.HandleCanAnalyseEventTriggered(
symbol,
period,
@@ -371,15 +372,26 @@ bool CanAnalyseEventTriggered(
}
/**
* Check For Guard Event Handler ...
* Check For Guard ...
*
* @param guards: XGuard[]
* @param guards: XGuard, reference Collection to holds result ...
* @param positions: XPosition, refrence collection to Provides Positions ...
* @param barIndex: int, Specified Bar index ...
*
* @return ( int )
*/
int CheckForGuardTriggered(XGuard &guards[])
int CheckForGuardTriggered(
XGuard &guards[],
XPosition &positions[],
int barIndex = 0 //
)
{
return eaExpert.CheckForGuardTriggered(guards);
//
return eaExpert.CheckForGuardTriggered(
guards,
positions,
barIndex //
);
}
/**