11 KiB
Base EMA Reversal Indicator - User Guide
Version: 1.0 Date: 2025-01-22 File: Base_EMA_Reversal.mq5
📋 Overview
The Base EMA Reversal Indicator identifies potential reversal opportunities using a multi-stage state machine approach with EMA confluence. The indicator tracks both buy and sell opportunities through base formation, EMA confirmation, and pullback detection.
🎯 Strategy Logic
Core Concept
When price touches EMA (50/100/200), TWO possible outcomes:
- Pullback: Price revisits previous high/low → SIGNAL
- Breakthrough: Price makes new high/low → Continue watching
State Machine (States 0-3)
Buy Side
- State 0: Startup/Reset (only at initialization)
- State 1: Finding Base - Track lowest price continuously
- State 2: EMA Touched - Price closed ABOVE EMA 50/100/200
- State 3: Decision/Signal - Within 2 bars of EMA touch
- Pullback to BaseLow (within 50 points) → BUY SIGNAL
- Cross EMA below again → Cancel, back to State 1
Sell Side (Mirror of Buy Side)
- State 0: Startup/Reset (only at initialization)
- State 1: Finding Base - Track highest price continuously
- State 2: EMA Touched - Price closed BELOW EMA 50/100/200
- State 3: Decision/Signal - Within 2 bars of EMA touch
- Pullback to BaseHigh (within 50 points) → SELL SIGNAL
- Cross EMA above again → Cancel, back to State 1
TP Selection Logic
- Buy Signals: Find LOWEST valid EMA ABOVE price from [300, 400, 500, 600]
- Sell Signals: Find HIGHEST valid EMA BELOW price from [300, 400, 500, 600]
- ATR Fallback: If no valid EMA position, use ATR × 2
📊 Buffer Structure (8 Buffers)
| Index | Buffer Name | Purpose | Value Type | When Populated |
|---|---|---|---|---|
| 0 | BUY_SIGNAL | Buy entry price | Price | Signal bars only |
| 1 | SELL_SIGNAL | Sell entry price | Price | Signal bars only |
| 2 | BUY_SL | Buy stop loss | Price (BaseLow) | Signal bars only |
| 3 | SELL_SL | Sell stop loss | Price (BaseHigh) | Signal bars only |
| 4 | BUY_TP | Buy take profit | Price (EMA or ATR) | Signal bars only |
| 5 | SELL_TP | Sell take profit | Price (EMA or ATR) | Signal bars only |
| 6 | BUY_STATE | Buy state tracker | 0-3 | Every bar |
| 7 | SELL_STATE | Sell state tracker | 0-3 | Every bar |
Important: Signal buffers (0-5) = EMPTY_VALUE when not applicable. EA will check for non-EMPTY_VALUE to detect signals.
⚙️ Input Parameters
EMA Settings
| Parameter | Default | Description |
|---|---|---|
| EMA 50 Period | 50 | Fast EMA (confirmation) |
| EMA 100 Period | 100 | Medium-fast EMA (confirmation) |
| EMA 200 Period | 200 | Medium EMA (confirmation) |
| EMA 300 Period | 300 | TP1 target |
| EMA 400 Period | 400 | TP2 target |
| EMA 500 Period | 500 | TP3 target |
| EMA 600 Period | 600 | TP4 target |
Setup Settings
| Parameter | Default | Description |
|---|---|---|
| Lookback Period | 100 | Bars for initial base detection |
| Base Threshold | 50 | Pullback tolerance (points) |
| Pullback Bars | 2 | Max bars to wait for pullback |
| Skip Bars | 50 | Bars skipped at startup |
ATR Settings
| Parameter | Default | Description |
|---|---|---|
| ATR Period | 14 | ATR period for TP fallback |
Display Settings
| Parameter | Default | Description |
|---|---|---|
| Show Stage Labels | true | Display state labels on chart |
🚀 Installation
Step 1: Copy Files to MetaTrader 5
-
Navigate to your MetaTrader 5 data folder:
- Windows:
C:\Users\{Username}\AppData\Roaming\MetaQuotes\Terminal\{TerminalID}\MQL5\ - Mac: Open MetaTrader 5 → File → Open Data Folder
- Windows:
-
Copy
Base_EMA_Reversal.mq5to:MQL5/Indicators/
Step 2: Compile the Indicator
- Open MetaEditor 5 (press F4 in MetaTrader 5)
- File → Open → Select
Base_EMA_Reversal.mq5 - Press F7 or click "Compile"
- Verify 0 errors in "Errors" tab (warnings are OK)
- Close MetaEditor 5
Step 3: Install Indicator on Chart
- In MetaTrader 5, right-click on "Navigator" → "Refresh"
- Drag
Base EMA Reversalfrom Navigator → Indicators to EURUSD H1 chart - Configure parameters if needed
- Click OK
Step 4: Enable Visual Elements
Ensure you can see:
- ✅ 7 EMA lines (Red, Orange, Yellow, Green, Blue, Purple, Magenta)
- ✅ Stage labels "B:X S:Y" on each bar (color-coded)
- ✅ Buy signals (Lime ↑ arrows)
- ✅ Sell signals (Red ↓ arrows)
- ✅ SL markers (Gray dots)
- ✅ TP markers (Blue +)
🎨 Visual Elements
EMA Lines (7 EMAs) - NOW VISIBLE!
- EMA 50: Red (Plot 7)
- EMA 100: Orange (Plot 8)
- EMA 200: Yellow (Plot 9)
- EMA 300: Green (Plot 10)
- EMA 400: Blue (Plot 11)
- EMA 500: Purple (Plot 12)
- EMA 600: Magenta (Plot 13)
Signal Arrows
- Buy Signal: Arrow code 233 (↑), Lime color
- Sell Signal: Arrow code 234 (↓), Red color
Signal Labels (Only on Signal Bars - Large Font)
- Buy Signal Labels: "BUY SIGNAL" - Lime color, Font Size 14
- Sell Signal Labels: "SELL SIGNAL" - Red color, Font Size 14
- No labels on non-signal bars (reduced clutter)
SL/TP Markers
- SL: Gray dot (code 159)
- TP: Blue plus sign (code 160)
🔧 Integration with Universal Buffer Reader EA
EA Configuration
Configure the Universal Buffer Reader EA with these parameters:
| EA Parameter | Value |
|---|---|
| IndicatorName | "Base_EMA_Reversal" |
| BuySignalBuffer | 0 |
| SellSignalBuffer | 1 |
| BuySLBuffer | 2 |
| SellSLBuffer | 3 |
| SellSLBuffer | 6 |
| BuyTPBuffer | 4 |
| SellTPBuffer | 5 |
How EA Reads Signals
The EA's SignalDetector.mqh checks:
bool has_buy = (buy_signal != EMPTY_VALUE && buy_signal != 0);
bool has_sell = (sell_signal != EMPTY_VALUE && sell_signal != 0);
Our indicator:
- Sets signal price when signal occurs at bar close
- Sets EMPTY_VALUE on all other bars
- EA will only execute trades when buffers have valid values
🧪 Testing Recommendations
1. Demo Account Testing (REQUIRED)
Always test on a demo account first!
- Test for at least 1-2 weeks
- Monitor all trades closely
- Check all features are working:
- EMA touch detection
- Pullback identification
- Signal generation
- SL/TP levels
- State transitions
- ATR fallback
2. Visual Verification
On EURUSD H1 chart:
- Check EMA lines are smooth and correct colors
- Verify stage labels change colors as states progress
- Watch for signal arrows at appropriate locations
- Monitor Experts tab for signal print messages
3. Backtesting
- Open Strategy Tester (press F4 or View → Strategy Tester)
- Select
Base EMA Reversal - Select symbol (EURUSD) and timeframe (H1)
- Select test period (last 6 months recommended)
- Click "Start"
- Review results:
- Signal frequency
- Win rate
- Risk/reward ratio
- ATR fallback usage
4. Forward Testing
After successful backtesting:
- Test on demo account with live data
- Monitor for 2-4 weeks
- Compare results with backtest
- Adjust parameters if needed
📊 Monitoring and Analysis
Experts Tab
Watch for these messages:
BUY SIGNAL at [timestamp] Price: [price] SL: [sl] TP: [tp]SELL SIGNAL at [timestamp] Price: [price] SL: [sl] TP: [tp]Initialization: BaseLow = [value], BaseHigh = [value]BaseLow recalculated: [value] after buy signalBaseHigh recalculated: [value] after sell signal
Signal Quality Indicators
Monitor:
- State Transitions: Should flow smoothly 1 → 2 → 3 → 1
- Timeout Frequency: How often signals cancel due to timeout?
- Pullback Success Rate: What % of EMA touches result in signals?
- ATR Fallback Usage: How often is TP calculated via ATR?
⚠️ Common Issues and Solutions
Issue: No Signals Appearing
Symptoms: Indicator loads but no arrows appear
Solutions:
- Check minimum data requirement (need 600+ bars)
- Verify EMA touch detection is working (watch Experts tab)
- Confirm base levels are updating (check print messages)
- Increase Lookback Period parameter
Issue: Too Many False Signals
Symptoms: Signals appearing frequently but price doesn't reverse
Solutions:
- Increase Base Threshold (from 50 to 100+)
- Reduce Pullback Bars (from 2 to 1)
- Add additional confirmation logic (e.g., close above EMA for 2 bars)
Issue: Stage Labels Too Cluttered
Symptoms: Chart difficult to read due to too many labels
Solutions:
- Set
Show Stage Labels = falseto disable - Use smaller timeframe (H4 instead of M15)
- Filter by state (only show State 2-3 labels)
Issue: EA Not Executing Trades
Symptoms: Universal Buffer Reader EA sees indicator but no trades
Solutions:
- Verify EA parameters match buffer indices (0-5)
- Check AutoTrading is enabled (green button)
- Verify EA has permission to trade
- Enable debug prints in EA to see signal detection
🔒 Risk Management
Important Considerations
- No Stop Loss Warning: If SL hits immediately, BaseLow/High may be too close to entry
- TP Verification: If EMA TP seems unrealistic, ATR fallback will activate
- Pullback Window: 2 bars is narrow - may miss valid setups
- Base Threshold: 50 points may be too tight for volatile symbols
Recommended Settings by Symbol
| Symbol | Base Threshold | Pullback Bars |
|---|---|---|
| EURUSD (Majors) | 30-50 | 2 |
| GBPUSD (Volatile) | 50-80 | 2-3 |
| XAUUSD (Gold) | 100-200 | 3 |
| Crypto (BTC/ETH) | 200-500 | 5 |
📝 Code Summary
File Statistics
- Lines: 641
- Functions: 7 (OnInit, OnDeinit, OnCalculate, CalculateBuyTP, CalculateSellTP, RecalculateBaseBuy, RecalculateBaseSell, UpdateStageLabels)
- State Variables: 9 (buy_state, sell_state, BaseLow, BaseHigh, last_signal_time, buy_ema_touched, sell_ema_touched, ema_touch_bar, buy_touch_ema_count, sell_touch_ema_count)
- Indicator Handles: 8 (7 EMAs + 1 ATR)
Key Logic Patterns
- Array indexing: Series (index 0 = current bar)
- State machine: Event-driven (EMA touch → Decision → Reset)
- Buffer clearing: EMPTY_VALUE on non-signal bars
- Object management: Unique prefix "EMA_Stage_"
🎓 Next Steps
After initial testing:
- ✅ Optimize Parameters: Use Strategy Tester to find optimal values
- ✅ Add Filters: Consider time filters, trend filters
- ✅ Multi-Timeframe: Test on H4, D1 timeframes
- ✅ Performance Tuning: Reduce object count for faster chart
- ✅ Backtest Extensively: 6-12 months of data minimum
📞 Getting Help
Debug Mode
If experiencing issues, enable InpShowStageLabels = false to reduce visual clutter and check Experts tab for print messages.
Print Messages
Key messages to watch:
- Initialization messages
- Signal generation messages
- Base recalculation messages
- Any error messages
Log Analysis
Review Strategy Tester logs to:
- Count total signals
- Analyze win/loss ratio
- Check SL/TP effectiveness
- Identify best performing timeframes
Last Updated: 2025-01-22 Version: 1.0
Happy Trading! 📈