83 lines
3.3 KiB
Markdown
83 lines
3.3 KiB
Markdown
# 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
|
|
1. Created `MagicNumberHelpers.mqh` with magic-aware helper functions
|
|
2. Updated EAs to use these helper functions
|
|
3. 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 number
|
|
- `PositionSelectByTicketAndMagic()` - Verify ticket has correct magic number
|
|
- `PositionExistsByMagic()` - Check if position exists with magic number
|
|
- `GetPositionTicketByMagic()` - Get ticket by symbol and magic number
|
|
- `ClosePositionByMagic()` - Close position with magic number verification
|
|
- `ModifyPositionByMagic()` - Modify position with magic number verification
|
|
- `GetPositionProfitByMagic()` - Get profit with magic number check
|
|
- `GetPositionTypeByMagic()` - Get position type with magic number check
|
|
- `CountPositionsByMagic()` - Count positions with specific magic number
|
|
|
|
## Fixed EAs
|
|
|
|
### RSIScalpingXAUUSD
|
|
- ✅ Fixed `CheckExistingPosition()` to use `PositionSelectByTicketAndMagic()`
|
|
- ✅ Fixed `ClosePosition()` to verify magic number before closing
|
|
- ✅ Fixed entry signal check to use `PositionExistsByMagic()`
|
|
|
|
### MeanReversionXAUUSD
|
|
- ✅ Fixed all `PositionSelect(_Symbol)` calls to use `PositionSelectByMagic()`
|
|
- ✅ Fixed `SchließePosition()` to use `ClosePositionByMagic()`
|
|
- ✅ Fixed `ÄndereStopLoss()` to use `ModifyPositionByMagic()`
|
|
- ✅ 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:
|
|
```mql5
|
|
#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
|
|
1. Set unique magic numbers for each strategy
|
|
2. Enable/disable strategies via input parameters
|
|
3. Configure strategy-specific parameters
|
|
4. 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
|
|
|
|
1. **Always use magic-aware functions** when checking/modifying positions
|
|
2. **Set unique magic numbers** for each EA instance
|
|
3. **Verify magic number** before any position operation
|
|
4. **Use United EA** when running multiple strategies on same symbol
|