3.3 KiB
3.3 KiB
MQL5 EA Improvements - Magic Number Isolation
Problem
When multiple EAs run together on the same symbol, they interfere with each other because magic numbers are not properly checked in all position-related functions.
Solution
- Created
MagicNumberHelpers.mqhwith magic-aware helper functions - Updated EAs to use these helper functions
- Created
_united/main.mq5- a unified EA that runs multiple strategies together
Fixed Functions
Helper Functions (MagicNumberHelpers.mqh)
PositionSelectByMagic()- Select position by symbol AND magic numberPositionSelectByTicketAndMagic()- Verify ticket has correct magic numberPositionExistsByMagic()- Check if position exists with magic numberGetPositionTicketByMagic()- Get ticket by symbol and magic numberClosePositionByMagic()- Close position with magic number verificationModifyPositionByMagic()- Modify position with magic number verificationGetPositionProfitByMagic()- Get profit with magic number checkGetPositionTypeByMagic()- Get position type with magic number checkCountPositionsByMagic()- Count positions with specific magic number
Fixed EAs
RSIScalpingXAUUSD
- ✅ Fixed
CheckExistingPosition()to usePositionSelectByTicketAndMagic() - ✅ Fixed
ClosePosition()to verify magic number before closing - ✅ Fixed entry signal check to use
PositionExistsByMagic()
MeanReversionXAUUSD
- ✅ Fixed all
PositionSelect(_Symbol)calls to usePositionSelectByMagic() - ✅ Fixed
SchließePosition()to useClosePositionByMagic() - ✅ Fixed
ÄndereStopLoss()to useModifyPositionByMagic() - ✅ Fixed all position existence checks to use
PositionExistsByMagic()
United EA
The _united/main.mq5 EA allows running multiple strategies together:
- Each strategy has its own unique magic number
- Strategies operate independently without interference
- Can enable/disable individual strategies via input parameters
- Currently implements:
- RSI Scalping Strategy
- Mean Reversion Strategy
- Framework for additional strategies (DarvasBox, RSICrossOver, RSIMidPoint)
Usage
For Individual EAs
Simply include the helper file:
#include "../_united/MagicNumberHelpers.mqh"
Then replace:
PositionSelect(_Symbol)→PositionSelectByMagic(_Symbol, MagicNumber)PositionSelectByTicket(ticket)→PositionSelectByTicketAndMagic(ticket, MagicNumber)trade.PositionClose(_Symbol)→ClosePositionByMagic(trade, _Symbol, MagicNumber)trade.PositionModify(_Symbol, ...)→ModifyPositionByMagic(trade, _Symbol, MagicNumber, ...)
For United EA
- Set unique magic numbers for each strategy
- Enable/disable strategies via input parameters
- Configure strategy-specific parameters
- Run on chart - all enabled strategies will operate independently
Remaining EAs to Fix
The following EAs should be updated similarly:
- DarvasBoxXAUUSD
- RSICrossOverReversalXAUUSD
- RSIMidPointHijackXAUUSD
- EMASlopeDistanceCocktailXAUUSD
- All RSIScalping variants (APPL, BTCUSD, MSFT, NVDA, TSLA)
Best Practices
- Always use magic-aware functions when checking/modifying positions
- Set unique magic numbers for each EA instance
- Verify magic number before any position operation
- Use United EA when running multiple strategies on same symbol