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-chart.helper.class.mq5"
#include "../Classes/x-saherelm.x-guard.class.mq5" #include "../Classes/x-saherelm.x-guard.class.mq5"
#include "../Classes/x-saherelm.x-signaller.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-trade-manager.class.mq5"
#include "../Classes/x-saherelm.x-volume.class.mq5" #include "../Classes/x-saherelm.x-volume.class.mq5"
@@ -121,11 +122,12 @@ class XCBaseExpert : public XCBase
// //
XCAlert *eaAlert; // EA Scope Alert Handler ... XCAlert *eaAlert; // EA Scope Alert Handler ...
XCVolume *eaVolume; // EA Scope Voluem Handler ...
XCGuard *eaGuard; // EA Scope Guard Handler ... XCGuard *eaGuard; // EA Scope Guard Handler ...
XCTrade *eaTrader; // EA Scope Trade 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 ... XTimeTracker eaTimeTracker; // EA Scope Time Tracker ...
XCTradeManager *eaTradeManager; // EA Scope Trade Manager Handler ...
// //
// Specified Event Handlers ... // 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 ... // Initialize Guard Handler ...
eaGuard = new XCGuard( eaGuard = new XCGuard(
@@ -330,13 +345,18 @@ class XCBaseExpert : public XCBase
// Attach Event Handler ... // Attach Event Handler ...
eaGuard.onGuardEventListener = onGuardedEventHandler; eaGuard.onGuardEventListener = onGuardedEventHandler;
//
// Initialize Target Handler ...
eaTarget = new XCTarget(eaTrader, eaAlert);
// //
// Initialize Trae Manager ... // Initialize Trae Manager ...
eaTradeManager = new XCTradeManager( eaTradeManager = new XCTradeManager(
eaAlert, eaAlert,
eaTrader, eaTrader,
eaVolume, eaVolume,
eaGuard // eaGuard,
eaTarget //
); );
// //
@@ -423,6 +443,11 @@ class XCBaseExpert : public XCBase
delete eaVolume; delete eaVolume;
ZeroMemory(eaVolume); ZeroMemory(eaVolume);
//
eaTarget.Destroy();
delete eaTarget;
ZeroMemory(eaTarget);
// //
delete eaTradeManager; delete eaTradeManager;
ZeroMemory(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 ) * @return ( int )
*/ */
int CheckForGuardTriggered(XGuard &guards[]) int CheckForGuardTriggered(
XGuard &guards[],
XPosition &positions[],
int barIndex = 0 //
)
{ {
// //
int result = 0; int result = 0;
@@ -559,7 +600,11 @@ class XCBaseExpert : public XCBase
{ {
// //
XGuard iGuards[]; XGuard iGuards[];
int iGuardsCount = eaSignallers[i].CheckForGuard(iGuards); int iGuardsCount = eaSignallers[i].CheckForGuard(
iGuards,
positions,
barIndex //
);
if (IsValidSize(iGuardsCount)) 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 ... // Trade Event Handlers ...
@@ -1077,6 +1139,7 @@ class XCBaseExpert : public XCBase
TOnSignal mOnSignalEventHandlers[]; TOnSignal mOnSignalEventHandlers[];
TOnStopLoss mStopLossEventHandlers[]; TOnStopLoss mStopLossEventHandlers[];
TOnTakeProfit mTakeProfitEventHandlers[]; TOnTakeProfit mTakeProfitEventHandlers[];
TOnSignal mOnSignalExecutedEventHandlers[];
TOnForceClose mOnForceCloseEventHandlers[]; TOnForceClose mOnForceCloseEventHandlers[];
TOnDealsChanged mDealsChangedEventHandlers[]; TOnDealsChanged mDealsChangedEventHandlers[];
TOnOrdersChanged mOrdersChangedEventHandlers[]; TOnOrdersChanged mOrdersChangedEventHandlers[];
+27 -5
View File
@@ -40,6 +40,7 @@ class XCTradeManager : public XCBase
XCAlert *alert; XCAlert *alert;
XCGuard *guard; XCGuard *guard;
XCTrade *trader; XCTrade *trader;
XCTarget *target;
XCVolume *volume; XCVolume *volume;
XTimeTracker timeTracker; XTimeTracker timeTracker;
XCDataCollector *collector; XCDataCollector *collector;
@@ -56,7 +57,8 @@ class XCTradeManager : public XCBase
XCAlert *_alert, XCAlert *_alert,
XCTrade *_trader, XCTrade *_trader,
XCVolume *_volume, XCVolume *_volume,
XCGuard *_guard // XCGuard *_guard,
XCTarget *_target //
) )
{ {
// //
@@ -64,6 +66,7 @@ class XCTradeManager : public XCBase
guard = _guard; guard = _guard;
volume = _volume; volume = _volume;
trader = _trader; trader = _trader;
target = _target;
// //
drawer = new XCPOIDrawer(); drawer = new XCPOIDrawer();
@@ -104,10 +107,6 @@ class XCTradeManager : public XCBase
// //
timeTracker.Clean(); timeTracker.Clean();
//
ZeroMemory(alert);
ZeroMemory(trader);
// //
delete drawer; delete drawer;
ZeroMemory(drawer); ZeroMemory(drawer);
@@ -1202,6 +1201,9 @@ class XCTradeManager : public XCBase
// //
RemoveTrade(idx); RemoveTrade(idx);
//
target.HandleOnTakeProfitTriggered(deal);
} }
/** /**
@@ -1284,6 +1286,9 @@ class XCTradeManager : public XCBase
// //
RemoveTrade(idx); RemoveTrade(idx);
//
target.HandleOnStopLossTriggered(deal);
} }
/** /**
@@ -1371,6 +1376,13 @@ class XCTradeManager : public XCBase
// //
RemoveTrade(idx); 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 ...
protected: protected:
+11
View File
@@ -241,6 +241,7 @@ int OnInit()
eaExpert.AddOnDealsChangedEventHandler(OnDealsChanged); eaExpert.AddOnDealsChangedEventHandler(OnDealsChanged);
eaExpert.AddOnStopLossEventHandler(OnStopLossTriggered); eaExpert.AddOnStopLossEventHandler(OnStopLossTriggered);
eaExpert.AddOnOrdersChangedEventHandler(OnOrdersChanged); eaExpert.AddOnOrdersChangedEventHandler(OnOrdersChanged);
eaExpert.AddOnSignalExecutedEventHandler(OnSignalExecuted);
eaExpert.canAnalyseEventHandler = CanAnalyseEventTriggered; eaExpert.canAnalyseEventHandler = CanAnalyseEventTriggered;
eaExpert.AddOnTakeProfitEventHandler(OnTakeProfitTriggered); eaExpert.AddOnTakeProfitEventHandler(OnTakeProfitTriggered);
eaExpert.checkForGuardEventHandler = CheckForGuardTriggered; eaExpert.checkForGuardEventHandler = CheckForGuardTriggered;
@@ -401,6 +402,16 @@ void OnSignalTriggered(XSignal &signal)
eaExpert.HandleOnSignalTriggered(signal); eaExpert.HandleOnSignalTriggered(signal);
} }
/**
* Trigger OnSignal Executed Event ...
*
* @param signal: XSignal
*/
void OnSignalExecuted(XSignal &signal)
{
eaExpert.HandleOnSignalExecuted(signal);
}
/** /**
* Handle StopLoss Triggered Positions ... * Handle StopLoss Triggered Positions ...
* *
+16 -4
View File
@@ -363,6 +363,7 @@ bool CanAnalyseEventTriggered(
datetime time // datetime time //
) )
{ {
//
return eaExpert.HandleCanAnalyseEventTriggered( return eaExpert.HandleCanAnalyseEventTriggered(
symbol, symbol,
period, 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 ) * @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 //
);
} }
/** /**