diff --git a/Classes/x-saherelm.x121.xea.class.mq5 b/Classes/x-saherelm.x121.xea.class.mq5 index a8207476..02b7c27a 100644 --- a/Classes/x-saherelm.x121.xea.class.mq5 +++ b/Classes/x-saherelm.x121.xea.class.mq5 @@ -45,21 +45,10 @@ public: XSCX121EA( // // XTrade Class Requirements ... - int slippage, // Specify Slippage - ulong magicNumber, // Specify Magic Number - int manageInterval, // Manager Check Intervals Seconds - double maxAllowedSpread, // Max Allowed Spred for Opening Trades - int maxAllowedPositions, // Max Allowed Positions - double maxAllowedDrawdownFactor, // Max Allowed Drawdown Factor - double staticVolume, // Static Volume for Positions + int slippage, // Specify Slippage + ulong magicNumber, // Specify Magic Number // - // Position Management ... - bool allowLong = true, // Allow Long Trades - bool allowShort = true, // Allow Short Trades - double minProfitPerTrade = 0, // Min Profit Per Trade based On Volume Factor (Hedge) - double minProfitPerVolumeFactor = 0, // Min Volume Factor for Calculating Profit (Hedge) - // - // Event Handlers ... + // XSCTrade Event Handlers ... TOnStopLoss onStopLossTriggered = NULL, // On StopLoass Triggered Event Handler TOnTakeProfit onTakeProfitTriggered = NULL, // On TakeProfit Triggered Event Handler TOnDealsChanged onDealsChangedHandler = NULL, // On Deals Changed Event Handler @@ -67,36 +56,16 @@ public: TOnPositionsChanged onPositionsChangedHandler = NULL, // On Positions Changed Event Handler TOnTradeStateChanged onTradeStateChangedHandler = NULL, // On Trade State Changed Event Handler // - TOnSignal onSignalHandler = NULL, // On Signal Event Handler - // - // Log Handler ... - bool enableAlerts = true, // Enable Alerts - bool logAlerts = true, // Log Alerts - bool terminalAlerts = false, // Terminal Alerts - bool mailAlerts = false, // Mail Alerts - bool pushAlerts = false // Push Alerts + // Custom Event Handler ... + TOnSignal onSignalHandler = NULL // On Signal Event Handler ) : XSCBaseEA(slippage, magicNumber, - manageInterval, - maxAllowedSpread, - maxAllowedPositions, - maxAllowedDrawdownFactor, - staticVolume, - allowLong, - allowShort, - minProfitPerTrade, - minProfitPerVolumeFactor, onStopLossTriggered, onTakeProfitTriggered, onDealsChangedHandler, onOrdersChangedHandler, onPositionsChangedHandler, - onTradeStateChangedHandler, - enableAlerts, - logAlerts, - terminalAlerts, - mailAlerts, - pushAlerts // + onTradeStateChangedHandler // ) { } diff --git a/Classes/x-saherelm.xea.class.mq5 b/Classes/x-saherelm.xea.class.mq5 index 38136a76..6bd3fae8 100644 --- a/Classes/x-saherelm.xea.class.mq5 +++ b/Classes/x-saherelm.xea.class.mq5 @@ -2145,59 +2145,28 @@ public: XSCBaseEA( // // XTrade Class Requirements ... - int slippage, // Specify Slippage - ulong magicNumber, // Specify Magic Number - int manageInterval, // Manager Check Intervals Seconds - double maxAllowedSpread, // Max Allowed Spred for Opening Trades - int maxAllowedPositions, // Max Allowed Positions - double maxAllowedDrawdownFactor, // Max Allowed Drawdown Factor - double staticVolume, // Static Volume for Positions - // - // Position Management ... - bool allowLong = true, // Allow Long Trades - bool allowShort = true, // Allow Short Trades - double minProfitPerTrade = 0, // Min Profit Per Trade based On Volume Factor (Hedge) - double minProfitPerVolumeFactor = 0, // Min Volume Factor for Calculating Profit (Hedge) + int slippage, // Specify Slippage + ulong magicNumber, // Specify Magic Number // // Event Handlers ... - TOnStopLoss onStopLossTriggered = NULL, // On StopLoass Triggered Event Handler - TOnTakeProfit onTakeProfitTriggered = NULL, // On TakeProfit Triggered Event Handler - TOnDealsChanged onDealsChangedHandler = NULL, // On Deals Changed Event Handler - TOnOrdersChanged onOrdersChangedHandler = NULL, // On Orders Changed Event Handler - TOnPositionsChanged onPositionsChangedHandler = NULL, // On Positions Changed Event Handler - TOnTradeStateChanged onTradeStateChangedHandler = NULL, // On Trade State Changed Event Handler - // - // Log Handler ... - bool enableAlerts = true, // Enable Alerts - bool logAlerts = true, // Log Alerts - bool terminalAlerts = false, // Terminal Alerts - bool mailAlerts = false, // Mail Alerts - bool pushAlerts = false // Push Alerts + TOnStopLoss onStopLossTriggered = NULL, // On StopLoass Triggered Event Handler + TOnTakeProfit onTakeProfitTriggered = NULL, // On TakeProfit Triggered Event Handler + TOnDealsChanged onDealsChangedHandler = NULL, // On Deals Changed Event Handler + TOnOrdersChanged onOrdersChangedHandler = NULL, // On Orders Changed Event Handler + TOnPositionsChanged onPositionsChangedHandler = NULL, // On Positions Changed Event Handler + TOnTradeStateChanged onTradeStateChangedHandler = NULL // On Trade State Changed Event Handler ) { // // Instance XSCTrade Class ... mTrader = new XSCTrade( slippage, - magicNumber, - manageInterval, - maxAllowedSpread, - maxAllowedPositions, - maxAllowedDrawdownFactor - // + magicNumber // ); // mIsInTestMode = IsRunningOnTestMode(); - // - // Position Management ... - mAllowLong = allowLong; - mAllowShort = allowShort; - mMinProfitPerTrade = minProfitPerTrade; - mMinProfitPerVolumeFactor = minProfitPerVolumeFactor; - mStaticVolume = staticVolume; - // // Set Event Handlers ... mOnStopLossTriggered = onStopLossTriggered; @@ -2283,135 +2252,6 @@ public: return mTrader.GetMagicNumber(); } - // - // Retrieve Max Allowed Spread for Trading ... - double GetMaxAllowedSpread() - { - return mTrader.GetMaxAllowedSpread(); - } - - // - // Retrieve Max Allowed Same Time Positions Count ... - int GetMaxAllowedPositions() - { - return mTrader.GetMaxAllowedPositions(); - } - - // - // Retrieve Max Allowed Drawdown for Opening new Trades ... - double GetMaxAllowedDrawdownFactor() - { - return mTrader.GetMaxAllowedDrawdownFactor(); - } - - // - double GetStaticVolume() - { - return mStaticVolume; - } - - // - void SetStaticVolume(double value) - { - // - if (value <= 0) - { - value = 0.01; - } - - // - mStaticVolume = value; - } - - // - bool GetAllowLong() - { - return mAllowLong; - } - - // - void SetAllowLong(bool value) - { - mAllowLong = value; - } - - // - bool GetAllowShort() - { - return mAllowShort; - } - - // - void SetAllowShort(bool value) - { - mAllowShort = value; - } - - // - double GetMinProfitPerTrade() - { - return mMinProfitPerTrade; - } - - // - void SetMinProfitPerTrade(double value) - { - // - if (value <= 0) - { - value = 0; - } - - // - if (value == mMinProfitPerTrade) - { - return; - } - - // - mMinProfitPerTrade = value; - } - - // - double GetMinProfitPerVolumeFactor() - { - return mMinProfitPerVolumeFactor; - } - - // - void SetMinProfitPerVolumeFactor(double value) - { - // - if (value <= 0) - { - value = 0; - } - - // - if (value == mMinProfitPerVolumeFactor) - { - return; - } - - // - mMinProfitPerVolumeFactor = value; - } - - // - bool IsHedgeEnable() - { - // - bool result = - // - mMinProfitPerTrade > 0 && - mMinProfitPerVolumeFactor > 0 - // - ; - - // - return result; - } - // // Overrides ... @@ -2678,41 +2518,7 @@ public: } // - // Filter Signals Based on their Types ... - XSignal filteredSignals[]; - - // - // Try to Filter Signals ... - for (int i = 0; i < signalsCount; i++) - { - // - XSignal iSignal = signals[i]; - - // - bool isLong = IsLong(iSignal.type); - - // - if ((isLong && !GetAllowLong()) || (!isLong && !GetAllowShort())) - { - continue; - } - - // - AddRef( - iSignal, - filteredSignals // - ); - } - - // - int filteredSignalsCount = ArraySize(filteredSignals); - if (filteredSignalsCount <= 0) - { - return; - } - - // - int managedSignalsCount = HandleSignalManagement(filteredSignals); + int managedSignalsCount = HandleSignalManagement(signals); if (managedSignalsCount <= 0) { return; @@ -2723,7 +2529,7 @@ public: XSignal notExecuteds[]; ENUM_X_SIGNAL_EXECUTION_RESULT reasons[]; int executedSignalsCount = mTrader.ExecuteSpecifiedSignals( - filteredSignals, + signals, notExecuteds, // Not Executed Signals reasons // @@ -2734,7 +2540,7 @@ public: if (executedSignalsCount == 0) { // - message = "(" + ToString(filteredSignalsCount) + ") Signals Execution Failed ..."; + message = "(" + ToString(managedSignalsCount) + ") Signals Execution Failed ..."; // for (int j = 0; j < ArraySize(reasons); j++) @@ -2746,15 +2552,15 @@ public: message += "\n" + ToString(j) + ": " + iReason; } } - else if (executedSignalsCount < filteredSignalsCount) + else if (executedSignalsCount < managedSignalsCount) { // - int diff = filteredSignalsCount - executedSignalsCount; + int diff = managedSignalsCount - executedSignalsCount; // message = "Failed to Execute (" + ToString(diff) + ") Signals ..."; } - else if (executedSignalsCount == filteredSignalsCount) + else if (executedSignalsCount == managedSignalsCount) { message = "(" + ToString(executedSignalsCount) + ") Signals Executed Successfully ..."; } @@ -2830,39 +2636,6 @@ protected: } } - // - // Position Management ... - - // - // Calculate Required Profit for Hedging ... - double CalculateRequiredProfitForHedge( - XPosition &positions[] // Source - ) - { - // - double result = SpecifiedCalculateRequiredProfitForHedge( - positions, - mMinProfitPerTrade, - mMinProfitPerVolumeFactor // - ); - - // - return result; - } - - // - // Calculate Positions Profit Summary ... - double CalculatePositionsProfit( - XPosition &positions[] // Source - ) - { - // - double result = SpecifiedCalculatePositionsProfit(positions); - - // - return result; - } - // // Profit Tracker ... @@ -3411,11 +3184,12 @@ protected: // // Close All Specified Provider's Positions in Profit Summary ... void HandleGuardHedgeAction( - string provider, // Positions Provided by Specific Provider - string symbol, // Trading Symbol - ENUM_POSITION_TYPE type, // Trading Type - ENUM_TIMEFRAMES period, // Specified Time Frame - double minProfitForHedging = 1 // Specified Profit for Hedge + string provider, // Positions Provided by Specific Provider + string symbol, // Trading Symbol + ENUM_POSITION_TYPE type, // Trading Type + ENUM_TIMEFRAMES period, // Specified Time Frame + double minProfitForHedging = 1, // Specified Profit for Hedge + double minProfitForHedgingVolumeFactor = 0.01 // Specified Volume Factor for Hedge ) { // @@ -3435,8 +3209,12 @@ protected: } // - double profit = CalculatePositionsProfit(positions); - double requiredProfit = CalculateRequiredProfitForHedge(positions); + double profit = SpecifiedCalculatePositionsProfit(positions); + double requiredProfit = SpecifiedCalculateRequiredProfitForHedge( + positions, + minProfitForHedging, + minProfitForHedgingVolumeFactor // + ); // bool isReadyForHedge = profit >= requiredProfit; @@ -3885,14 +3663,6 @@ private: // Signal Event Listeners ... TOnSignal mOnSignalEventHandlers[]; - // - // Position Management ... - bool mAllowLong; // Allow Long Trades - bool mAllowShort; // Allow Short Trades - double mMinProfitPerTrade; // Min Profit Per Trade based On Volume Factor (Hedge) - double mMinProfitPerVolumeFactor; // Min Volume Factor for Calculating Profit (Hedge) - double mStaticVolume; // Static Volume for Positions - // // Event Handlers ... TOnStopLoss mOnStopLossTriggered; diff --git a/Classes/x-saherelm.xtrade.class.mq5 b/Classes/x-saherelm.xtrade.class.mq5 index 1554dada..81a7cec9 100644 --- a/Classes/x-saherelm.xtrade.class.mq5 +++ b/Classes/x-saherelm.xtrade.class.mq5 @@ -527,12 +527,11 @@ public: // // Constructors ... void XSCTrade( - int slippage, // Specify Slippage - ulong magicNumber, // Specify Magic Number - int manageInterval, // Manager Check Intervals Seconds - double maxAllowedSpread, // Max Allowed Spred for Opening Trades - int maxAllowedPositions, // Max Allowed Positions - double maxAllowedDrawdownFactor // Max Allowed Drawdown Factor + int slippage, // Specify Slippage + ulong magicNumber, // Specify Magic Number + double maxAllowedSpread = 0, // Max Allowed Spred for Opening Trades + int maxAllowedPositions = 0, // Max Allowed Positions + double maxAllowedDrawdownFactor = 0 // Max Allowed Drawdown Factor ) { // @@ -540,9 +539,6 @@ public: mSlippage = slippage; mMagicNumber = magicNumber; - // - mManageInterval = manageInterval; - // mMaxAllowedSpread = maxAllowedSpread; mMaxAllowedPositions = maxAllowedPositions; diff --git a/Experts/x-test.x121ea.mq5 b/Experts/x-test.x121ea.mq5 index 2242a4ee..bf870f22 100644 --- a/Experts/x-test.x121ea.mq5 +++ b/Experts/x-test.x121ea.mq5 @@ -197,17 +197,8 @@ bool InitialEA() // // Instantiate X121EA Class ... mX121EA = new XSCX121EA( - x121EASlippage, // Slippgae - x121EAMagicNumber, // Magic Number - x121EAManageInterval, // Manager Check Intervals Seconds - x121EAMaxAllowedSpread, // Max Allowed Spred for Opening Trades - x121EAMaxAllowedPositions, // Max Allowed Positions - x121EAMaxAllowedDrawdownFactor, // Max Allowed Drawdown Factor - x121EAVolume, // Static Volume for Positions - x121EAAllowLong, // Allow Long Trades - x121EAAllowShort, // Allow Short Trades - x121EAMinProfitPerTrade, // Min Profit Per Trade based On Volume Factor (Hedge) - x121EAMinProfitPerVolumeFactor // Min Volume Factor for Calculating Profit (Hedge) + x121EASlippage, // Slippgae + x121EAMagicNumber // Magic Number ); //