diff --git a/Classes/x-saherelm.x-expert.class.mq5 b/Classes/x-saherelm.x-expert.class.mq5 index 1bc5d5d0..ab3942bb 100644 --- a/Classes/x-saherelm.x-expert.class.mq5 +++ b/Classes/x-saherelm.x-expert.class.mq5 @@ -605,7 +605,6 @@ class XCBaseExpert : public XCBase * @return ( bool ) */ bool HandleCanAnalyseEventTriggered( - string name, string symbol, ENUM_TIMEFRAMES period, datetime time // @@ -613,7 +612,6 @@ class XCBaseExpert : public XCBase { // return eaTradeManager.CanAnalyse( - name, symbol, period, time // diff --git a/Classes/x-saherelm.x-trade-manager.class.mq5 b/Classes/x-saherelm.x-trade-manager.class.mq5 index 8bacb715..aad4fbb0 100644 --- a/Classes/x-saherelm.x-trade-manager.class.mq5 +++ b/Classes/x-saherelm.x-trade-manager.class.mq5 @@ -752,7 +752,6 @@ class XCTradeManager : public XCBase * @return ( bool ) */ bool CanAnalyse( - string name, string symbol, ENUM_TIMEFRAMES period, datetime time // @@ -765,8 +764,7 @@ class XCTradeManager : public XCBase // Finding Symbol Configuration Index ... int idx = FindSymbolConfigurationIndex( symbol, - period, - name // + period // ); // @@ -857,7 +855,6 @@ class XCTradeManager : public XCBase // // Check Sessions and Restrictions ... result = CanAnalyse( - signal.provider, signal.symbol, signal.period, signal.time // @@ -875,8 +872,7 @@ class XCTradeManager : public XCBase // Check Signal Spread ... int idx = FindSymbolConfigurationIndex( signal.symbol, - signal.period, - signal.provider // + signal.period // ); if (IsValidIndex(idx)) { @@ -897,19 +893,30 @@ class XCTradeManager : public XCBase // // Checking Max Allowed Positions ... - XPosition positions[]; - ENUM_X_POSITION_TYPES mType = IsLong(signal.type) - ? X_POSITION_TYPE_LONG - : X_POSITION_TYPE_SHORT; - int positionsCount = trader.GetPositions( - positions, - symbolTradeConfigs[idx].symbol, - signal.provider, - symbolTradeConfigs[idx].period, - mType, - true, // Filter By Magic ... - true // Force Clean ... - ); + if (symbolTradeConfigs[idx].maxAllowedPositions > 0) + { + // + XPosition positions[]; + ENUM_X_POSITION_TYPES mType = IsLong(signal.type) + ? X_POSITION_TYPE_LONG + : X_POSITION_TYPE_SHORT; + int positionsCount = trader.GetPositions( + positions, + symbolTradeConfigs[idx].symbol, + NULL, // All Providers ... + symbolTradeConfigs[idx].period, + mType, + true, // Filter By Magic ... + true // Force Clean ... + ); + result = !IsValidSize(positionsCount) || + (IsValidSize(positionsCount) && + positionsCount < symbolTradeConfigs[idx].maxAllowedPositions); + + // + // Cleanup Resources ... + SpecifiedClean(positions); + } } // @@ -2151,6 +2158,7 @@ class XCTradeManager : public XCBase // // Check Initialization ... bool has = iConfig.Init( + "Default", _Symbol, _Period // ); @@ -2264,8 +2272,7 @@ class XCTradeManager : public XCBase // int FindSymbolConfigurationIndex( string symbol, - ENUM_TIMEFRAMES period, - string name // + ENUM_TIMEFRAMES period // ) { // @@ -2274,7 +2281,6 @@ class XCTradeManager : public XCBase // // Validate Args ... if ( - !IsSpecifiedValid(name) || !IsSpecifiedValid(symbol) || !IsSpecifiedValid(period) || !HasChild(symbolTradeConfigs)) @@ -2287,8 +2293,7 @@ class XCTradeManager : public XCBase for (int i = 0; i < count; i++) { // - if (symbolTradeConfigs[i].name == name && - symbolTradeConfigs[i].symbol == symbol && + if (symbolTradeConfigs[i].symbol == symbol && symbolTradeConfigs[i].period == period) { // diff --git a/Libraries/x-saherelm.x-trade.lib.mq5 b/Libraries/x-saherelm.x-trade.lib.mq5 index 09db4419..2fd18e10 100644 --- a/Libraries/x-saherelm.x-trade.lib.mq5 +++ b/Libraries/x-saherelm.x-trade.lib.mq5 @@ -3023,7 +3023,7 @@ struct XSymbolTradeConfig _period = NormalizePeriod(_period); // - name = name; + name = _name; symbol = _symbol; period = _period; maxAllowedSpread = _maxAllowedSpread; @@ -3772,7 +3772,6 @@ typedef void (*TOnSignal)(XSignal &signal); // typedef bool (*TCanAnalyse)( - string name, string _symbol, ENUM_TIMEFRAMES _period, datetime _time // diff --git a/XFIMA/Classes/x-saherelm.xfima.expert.class.mq5 b/XFIMA/Classes/x-saherelm.xfima.expert.class.mq5 index 8d3729be..c23be68d 100644 --- a/XFIMA/Classes/x-saherelm.xfima.expert.class.mq5 +++ b/XFIMA/Classes/x-saherelm.xfima.expert.class.mq5 @@ -56,42 +56,40 @@ class XCXFIMAExpret : public XCBaseExpert // // Instantiate Signaller ... - if (symbolConfig.name == "XFIMA1") + + // + // XFIMA Inputs ... + + // + XFIMAInputs fimaInputs; + fimaInputs.Default(); + fimaInputs.Hide(); + + // + // Instantiate Signaller Class ... + XCXFIMAStrategy1Signaller *fima1Signaller = new XCXFIMAStrategy1Signaller( + symbolConfig.symbol, + symbolConfig.period, + fimaInputs, + false // Process All Ticks ... + ); + if (!fima1Signaller.IsValid()) { // - // XFIMA Inputs ... - - // - XFIMAInputs fimaInputs; - fimaInputs.Default(); - fimaInputs.Hide(); - - // - // Instantiate Signaller Class ... - XCXFIMAStrategy1Signaller *fima1Signaller = new XCXFIMAStrategy1Signaller( - symbolConfig.symbol, - symbolConfig.period, - fimaInputs, - false // Process All Ticks ... - ); - if (!fima1Signaller.IsValid()) - { - // - fima1Signaller.Destroy(); - delete fima1Signaller; - ZeroMemory(fima1Signaller); - return; - } - - // - // Register Signaller ... - RegisterSignaller((XCBaseSignaller *)fima1Signaller); - - // - // Cleanup Resources ... - fimaInputs.Clean(); + fima1Signaller.Destroy(); + delete fima1Signaller; ZeroMemory(fima1Signaller); + return; } + + // + // Register Signaller ... + RegisterSignaller((XCBaseSignaller *)fima1Signaller); + + // + // Cleanup Resources ... + fimaInputs.Clean(); + ZeroMemory(fima1Signaller); } /**