From 295d0bb5c6fa52043cf13571a8e12b38716bf513 Mon Sep 17 00:00:00 2001 From: 6LYTH3 Date: Thu, 17 Apr 2025 15:34:57 +0700 Subject: [PATCH] Adding position info count by magic number --- .../Trade/PositionInfo_mql4.mqh | 22 +++++++++++++++++++ .../Trade/PositionInfo_mql5.mqh | 21 ++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/Include/Orchard/Frameworks/Framework_3.06/Trade/PositionInfo_mql4.mqh b/Include/Orchard/Frameworks/Framework_3.06/Trade/PositionInfo_mql4.mqh index f05541c..7d4aa43 100644 --- a/Include/Orchard/Frameworks/Framework_3.06/Trade/PositionInfo_mql4.mqh +++ b/Include/Orchard/Frameworks/Framework_3.06/Trade/PositionInfo_mql4.mqh @@ -69,4 +69,26 @@ class CPositionInfoCustom : public CPositionInfo { public: int Total() { return ( OrdersTotal() ); } + int Count( const string symbol, int magic_number ); +}; + +int CPositionInfo::Count(string symbol, int magic_number) +{ + int positionCount = 0; // Counter for positions + + // Loop through all open orders + for(int i = OrdersTotal() - 1; i >= 0; i--) + { + // Select order by position + if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) + { + // Check if order matches symbol and magic number + if(OrderSymbol() == symbol && OrderMagicNumber() == magic_number) + { + positionCount++; + } + } + } + + return(positionCount); }; \ No newline at end of file diff --git a/Include/Orchard/Frameworks/Framework_3.06/Trade/PositionInfo_mql5.mqh b/Include/Orchard/Frameworks/Framework_3.06/Trade/PositionInfo_mql5.mqh index 6a2f7e8..cb3da57 100644 --- a/Include/Orchard/Frameworks/Framework_3.06/Trade/PositionInfo_mql5.mqh +++ b/Include/Orchard/Frameworks/Framework_3.06/Trade/PositionInfo_mql5.mqh @@ -36,4 +36,25 @@ class CPositionInfoCustom : public CPositionInfo { public: int Total() { return ( PositionsTotal() ); } + int Count( const string symbol, int magic_number ); +}; + +int CPositionInfoCustom::Count( const string symbol, int magic_number ) { + CPositionInfo positionInfo; // Create an instance of CPositionInfo + int positionCount = 0; // Counter for positions on the current symbol + // Loop through all open positions + for(int i = PositionsTotal() - 1; i >= 0; i--) + { + // Select position by index + ulong ticket = PositionGetTicket(i); + if(positionInfo.SelectByTicket(ticket)) + { + // Check if the position is for the current symbol + if(positionInfo.Symbol() == symbol && positionInfo.Magic() == magic_number) + { + positionCount++; + } + } + } + return (positionCount); };