diff --git a/Experts/x-saherelm.xcaea.ea.mq5 b/Experts/x-saherelm.xcaea.ea.mq5 index ca328f1f..15bef723 100644 --- a/Experts/x-saherelm.xcaea.ea.mq5 +++ b/Experts/x-saherelm.xcaea.ea.mq5 @@ -53,13 +53,16 @@ input double eaConstantBalance = 0.0; // Constant Ba // // Management ... input group "Management"; -input bool eaAllowTrade = true; // Allow Trade on Signals -input bool eaAllowLongs = true; // Allow Long Trades -input bool eaAllowShorts = true; // Allow Short Trades -input int eaMaxAllowedTradesPerDay = 3; // Max Allowed Trades per Day -input int eaMaxAllowedSLsPerDay = 2; // Max Allowed SL(s) per Day -input string eaSessionStartTime = ""; // Trade Start Time -input string eaSessionEndTime = ""; // Trade End Time +input bool eaAllowTrade = true; // Allow Trade on Signals +input bool eaAllowLongs = true; // Allow Long Trades +input bool eaAllowShorts = true; // Allow Short Trades +input int eaMaxAllowedTradesPerDay = 3; // Max Allowed Trades per Day +input int eaMaxAllowedSLsPerDay = 2; // Max Allowed SL(s) per Day +input string eaSessionStartTime = ""; // Trade Start Time +input string eaSessionEndTime = ""; // Trade End Time +input int eaMaxAllowedPositions = 5; // Max Allowed Same Time Trades +input double eaMaxAllowedSpread = 25; // Max Allowed Spread For Trade +input double eaMaxAllowedDrawdownFactor = 0.3; // Max Allowed DrawDown for Trade // // Alert ... @@ -95,11 +98,6 @@ XCXCAEASignaller *eaSignaller; XCXCAEATradeManager *eaTradeManager; XCAEAStrategyConditions eaConditions; -// -int eaMaxAllowedPositions = 5; -double eaMaxAllowedSpread = 25; -double eaMaxAllowedDrawdownFactor = 0.3; - // string eaTag = ""; @@ -184,6 +182,15 @@ void OnTick() int count = 0; bool has = false; + // + if (eaTimeTracker.IsNewDay()) + { + eaTradeManager.HandleNewDay(); + } + + // + HandleTimeReport(); + // // Handle Position Management / Protections ... eaTradeManager.Manage(); @@ -383,12 +390,6 @@ void OnTick() eaSignal, eaConditions // ); - if (has) - { - // - // Do What we Want on Successfully Execution Signal ... - Print("Signal Executed ..."); - } // eaSignal.Clean(); diff --git a/Libraries/x-saherelm.x-trade.lib.mq5 b/Libraries/x-saherelm.x-trade.lib.mq5 index 999728d2..6fba42a1 100644 --- a/Libraries/x-saherelm.x-trade.lib.mq5 +++ b/Libraries/x-saherelm.x-trade.lib.mq5 @@ -1137,7 +1137,7 @@ struct XSignal // // TP ... double fullTPLevel; // Full TP ... - bool isPartiallyClosed; // Check Partially Closed Before or not ... + bool isPartiallyClosed; // Check Partially Closed Before or not ... double partialCloseMultiplier; // Amount of Partial Close ... double partialCloseOnTPLevel; // Do Partial Close on TP Level ... @@ -2087,7 +2087,7 @@ struct XSignal } // - string GetMessage() + string GetMessage(string action = NULL) { // string result = NULL; @@ -2100,7 +2100,11 @@ struct XSignal // result = ToString(type) + - " Signal Provided by: " + provider + + " Signal" + + (!IsValid(action) + ? "" + : " " + action) + + " by: " + provider + " on (" + symbol + ")" + " in: " + ToString(period); diff --git a/XCAEA/Classes/xcaea.x-trade.manager.class.mq5 b/XCAEA/Classes/xcaea.x-trade.manager.class.mq5 index 44adf9c6..e9c2499d 100644 --- a/XCAEA/Classes/xcaea.x-trade.manager.class.mq5 +++ b/XCAEA/Classes/xcaea.x-trade.manager.class.mq5 @@ -711,6 +711,15 @@ class XCXCAEATradeManager : public XCBaseAlert // // Do Partial Closing ... double volume = iPosition.volume * volumeMultiplier; + + // + // Normalizing Volume ... + volume = NormalizeVolume( + volume, + iPosition.symbol // + ); + + // string comment = "PC On Target ..."; has = trader.ClosePartial( iPosition.ticket, @@ -772,7 +781,7 @@ class XCXCAEATradeManager : public XCBaseAlert if (reportSignals) { // - string message = signal.GetMessage(); + string message = signal.GetMessage("Provided"); Alert(message); } @@ -885,7 +894,20 @@ class XCXCAEATradeManager : public XCBaseAlert { // string executionMessage = ToString(executionResult); - Alert(executionMessage); + + // + string message = NULL; + if (result) + { + message = signal.GetMessage("Executed"); + } + else + { + message = signal.GetMessage("Failed due (" + executionMessage + ")"); + } + + // + Alert(message); } // @@ -1092,6 +1114,15 @@ class XCXCAEATradeManager : public XCBaseAlert { } + /** + * Handle New Day ... + */ + void HandleNewDay() + { + // + // Clean Managed SL(s) and TP(s) and Positions ... + } + /** * Find Executed Trade by Providing Position Ticket ... * diff --git a/XCAEA/Libraries/xcaea.signaller.lib.mq5 b/XCAEA/Libraries/xcaea.signaller.lib.mq5 index 85119687..b1594009 100644 --- a/XCAEA/Libraries/xcaea.signaller.lib.mq5 +++ b/XCAEA/Libraries/xcaea.signaller.lib.mq5 @@ -1505,9 +1505,6 @@ bool CanTriggerCond0( dir = canTriggerLong ? X_DIRECTION_BULLISH : X_DIRECTION_BEARISH; - - // - Print("Triggered ..."); } // @@ -1628,9 +1625,6 @@ bool CanTriggerCond1( dir = canTriggerLong ? X_DIRECTION_BULLISH : X_DIRECTION_BEARISH; - - // - Print("Triggered ..."); } // @@ -1731,9 +1725,6 @@ bool CanTriggerCond2( dir = canTriggerLong ? X_DIRECTION_BULLISH : X_DIRECTION_BEARISH; - - // - Print("Triggered ..."); } //