From 008ba9d05a98e522251ce712a7bf19ddd5aa5bb2 Mon Sep 17 00:00:00 2001 From: Hadi Khazaee Asl Date: Tue, 21 Oct 2025 01:03:32 +0330 Subject: [PATCH] last ... --- Classes/x-saherelm.x-signaller.class.mq5 | 17 +++++++++ Experts/x-saherelm.xfima.backtester.ea.mq5 | 37 ++++++++++++++++--- .../x-saherelm.xfima.signaller.class.mq5 | 23 +++++++----- 3 files changed, 63 insertions(+), 14 deletions(-) diff --git a/Classes/x-saherelm.x-signaller.class.mq5 b/Classes/x-saherelm.x-signaller.class.mq5 index d9862f62..43aaac61 100644 --- a/Classes/x-saherelm.x-signaller.class.mq5 +++ b/Classes/x-saherelm.x-signaller.class.mq5 @@ -65,6 +65,7 @@ class XCBaseSignaller : public XCBase int restingSignals; // Resting Signals ... datetime lastSignalAt; // Holding Last Signal's Time ... int restingDelay; // Resting Bars After Last Signal ... + int loosingTrades; // Loosing Trades ... // TCanAnalyse canAnalyseEventListener; @@ -325,6 +326,22 @@ class XCBaseSignaller : public XCBase { } + // + void LoseTrade() + { + // + restingSignals++; + loosingTrades++; + } + + // + void WinTrade() { + // + if (loosingTrades > 0) { + loosingTrades--; + } + } + // // Protected ... protected: diff --git a/Experts/x-saherelm.xfima.backtester.ea.mq5 b/Experts/x-saherelm.xfima.backtester.ea.mq5 index b66d0f50..43155ead 100644 --- a/Experts/x-saherelm.xfima.backtester.ea.mq5 +++ b/Experts/x-saherelm.xfima.backtester.ea.mq5 @@ -362,7 +362,7 @@ int OnInit() eaSignallerRiskInPoint, // Default Risk In Points ... eaSignallerVolume // Defaul Volume ... ); - fima1Signaller.slAdditionDistance = 15; + fima1Signaller.slAdditionDistance = 15; fima1Signaller.AddOnSignalEventHandler(OnSignalTriggered); // @@ -728,7 +728,8 @@ void OnStopLossTriggered(const XDeal &deal) // HandleBalanceReport(); - HandleLoosingPosition(deal.positionId, deal.profit); + HandleWinTrade(deal.positionId, deal.profit); + HandleLoseTrade(deal.positionId, deal.profit); } /** @@ -743,6 +744,7 @@ void OnTakeProfitTriggered(const XDeal &deal) // HandleBalanceReport(); + HandleWinTrade(deal.positionId, deal.profit); } /** @@ -767,7 +769,8 @@ void OnPositionForceClosed( // HandleBalanceReport(); - HandleLoosingPosition(ticket, position.profit); + HandleWinTrade(ticket, position.profit); + HandleLoseTrade(ticket, position.profit); } /** @@ -856,8 +859,9 @@ void OnTradeStateChanged(const XOnTradeHandlerState &state) * Test Resting Signals ... * * @param ticket: ulong, Position Ticket ... + * @param profit: double, Position Profit ... */ -void HandleLoosingPosition( +void HandleLoseTrade( ulong ticket = 0, double profit = 0 // ) @@ -879,7 +883,30 @@ void HandleLoosingPosition( // // Increase Resting Signals of Signallers ... - fima1Signaller.restingSignals++; + fima1Signaller.LoseTrade(); +} + +/** + * Handle Win Trade ... + * + * @param ticket: ulong, Position Ticket ... + * @param profit: double, Position Profit ... + */ +void HandleWinTrade( + ulong ticket = 0, + double profit = 0 // +) +{ + // + bool has = ticket > 0 && + profit > 0; + if (!has) + { + return; + } + + // + fima1Signaller.WinTrade(); } /** diff --git a/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 b/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 index 5107bb92..864eee5f 100644 --- a/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 +++ b/XFIMAEA/Classes/x-saherelm.xfima.signaller.class.mq5 @@ -403,7 +403,8 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // // Handle Partial Close Position if Reached TP 1.5 ... iTarget.Clean(); - iTarget.actingDistance = 1; + iTarget.doRF = true; + iTarget.actingDistance = 20; iTarget.volumeMultiplier = 0.5; iTarget.target = isBullish ? entry + (1.5 * risk) : entry - (1.5 * risk); iTarget.tpValue = isBullish ? entry + (2.5 * risk) : entry - (2.5 * risk); @@ -444,7 +445,10 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // // Reset Restrictions ... - ResetRestrictions(); + if (loosingTrades == 1) + { + ResetRestrictions(); + } } // @@ -535,16 +539,17 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller bool result = false; // - result = Strategy2HasSignal( - bar, - zone, - targets, - dir // - ); + // result = Strategy2HasSignal( + // bar, + // zone, + // targets, + // dir // + // ); // if (!result) { + // result = Strategy3HasSignal( bar, zone, @@ -556,7 +561,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller // if (result) { - Print("Salam"); + // Print("Salam"); } //