- Implemented complete trend-following strategy with EMA-based signals - Added 5 visual indicator lines (3 EMAs + 2 Border Lines) - Implemented breakthrough and pullback signal detection - Added dynamic lot sizing (0.01/0.02 based on pullback) - Implemented comprehensive filters: * Volume filter (20-bar average) * Spread filter (max 30 points) * Multiple Timeframe filter (H1 trading, D1 trend confirmation) * News filter (Thailand timezone) - Added advanced risk management: * Take Profit in USD * Stop Loss at Border Lines * Breakeven (100 points) * Trailing Stop (100 points) * Max drawdown protection (10%) - Created comprehensive documentation - Connected to Gitea repository
13 KiB
13 KiB
MAEA (Moving Average Expert Advisor) Implementation Plan
Project Overview
- Name: MAEA
- Type: MQL4 Expert Advisor for MetaTrader 4
- Strategy: Advanced trend-following with EMA-based signals, multiple filters, and risk management
- Repository: https://git.moreminimore.com/kunthawat/MAEA
- Timezone: Thailand (UTC+7)
Strategy Details
1. EMA Lines (3 Base Lines)
All EMAs use period 30 with different price sources:
- EMA High: EMA of High prices - Light Blue color
- EMA Medium: EMA of Close prices - Yellow color
- EMA Low: EMA of Low prices - Orange color
2. Border Lines (2 Dynamic Lines)
Calculated based on the range between EMAs:
- High Border Line: EMA High + (EMA Medium - EMA Low) - Purple color
- Low Border Line: EMA Low - (EMA Medium - EMA Low) - Purple color
Example Calculation:
EMA High = 3500
EMA Medium = 3400
EMA Low = 3300
Range = EMA Medium - EMA Low = 3400 - 3300 = 100
High Border = 3500 + 100 = 3600
Low Border = 3300 - 100 = 3200
3. Signal Types
3.1 Breakthrough Signal
- Buy Signal: Close price breaks above EMA High
- Sell Signal: Close price breaks below EMA Low
- Purpose: Triggers order opening
3.2 Pullback Signal
- Definition: Price hits a line and closes on the opposite side
- Buy Pullback: Price moves down to hit any line, then closes above the line
- Sell Pullback: Price moves up to hit any line, then closes below the line
- Purpose: Increases lot size when breakthrough occurs in the same direction
- Tracking: Separate tracking for buy and sell directions, resets when order opens
- Lot Size Impact:
- No pullback before breakthrough = 0.01 lot
- Pullback occurred before breakthrough = 0.02 lot
4. Order Opening Logic
- Only one order at a time
- Lot Size:
- 0.01 lot if no pullback occurred before breakthrough
- 0.02 lot if at least one pullback occurred before breakthrough in the same direction
- Trigger: Breakthrough signal only
- Filters Applied:
- Volume filter must pass
- Spread filter must pass
- MTF filter must pass (if enabled)
- News filter must pass (if enabled)
5. Risk Management
5.1 Take Profit
- Target specified in USD (e.g., $5)
- Closes order when profit reaches target amount
5.2 Stop Loss
- Buy Orders: SL at Low Border Line
- Sell Orders: SL at High Border Line
5.3 Breakeven
- Triggered when profit reaches specified number of points (e.g., 100 points)
- Moves Stop Loss to breakeven (entry price)
5.4 Trailing Stop
- Starts after breakeven is reached
- Trails Stop Loss by specified number of points from current price
- Default: 100 points trail distance
Additional Filters and Features
6. Volume Filter
- Calculation: Average volume of last 20 bars
- Condition: Trade only when current volume > average volume
- Purpose: Ensures sufficient market activity
7. Multiple Timeframe (MTF) Filter
- Timeframes: H1 (trading) and D1 (filter)
- Status: Optional feature (can be turned on/off)
- D1 Filter Logic:
- If D1 close > D1 EMA High: Only buy orders allowed
- If D1 close < D1 EMA Low: Only sell orders allowed
- If D1 close between D1 EMA High and D1 EMA Low: No orders allowed
- Behavior: Order opens immediately when filter condition is met
8. Spread Filter
- Purpose: Avoid trading during high spread periods
- Condition: Only open orders when current spread <= maximum allowed spread
- Default: 30 points
9. Risk Management
- Max Drawdown: Maximum percentage drawdown allowed
- Behavior: Stop trading if drawdown exceeds limit
- Recovery: Resume trading when drawdown is below limit
10. News Filter
- Purpose: Avoid trading during high-impact news events
- Implementation: Avoid specific times (e.g., NFP, FOMC releases)
- Timezone: Thailand (UTC+7) - all times must be converted accordingly
- Flexibility: User can configure multiple time ranges to avoid
Strategy Flow Diagram
graph TD
A[Start New Bar] --> B[Calculate EMAs]
B --> C[Calculate Border Lines]
C --> D[Check for Open Orders]
D -->|Has Open Order| E[Manage Open Order]
D -->|No Open Order| F[Check Pullback Signals]
E --> E1[Check Take Profit]
E1 -->|TP Reached| E2[Close Order]
E1 -->|TP Not Reached| E3[Check Breakeven]
E3 -->|Breakeven Reached| E4[Move SL to Entry]
E3 -->|Breakeven Not Reached| E5[Check Stop Loss]
E5 -->|SL Hit| E2
E5 -->|SL Not Hit| A
F --> F1[Close Below EMA High]
F1 -->|Yes| F2[Set Pullback Flag]
F1 -->|No| F3[Close Below EMA Medium]
F3 -->|Yes| F2
F3 -->|No| F4[Close Below EMA Low]
F4 -->|Yes| F2
F4 -->|No| F5[Check Breakthrough Signals]
F2 --> F5
F5 --> F6[Close Above EMA High]
F6 -->|Yes| F7[Open Buy Order]
F6 -->|No| F8[Close Below EMA Low]
F8 -->|Yes| F9[Open Sell Order]
F8 -->|No| A
F7 --> F10[Set Lot Size]
F10 -->|Pullback| F11[0.02 Lot]
F10 -->|No Pullback| F12[0.01 Lot]
F11 --> F13[Set SL at Low Border]
F12 --> F13
F13 --> F14[Set TP based on USD Target]
F14 --> F15[Reset Pullback Flag]
F15 --> A
F9 --> F16[Set Lot Size]
F16 -->|Pullback| F17[0.02 Lot]
F16 -->|No Pullback| F18[0.01 Lot]
F17 --> F19[Set SL at High Border]
F18 --> F19
F19 --> F20[Set TP based on USD Target]
F20 --> F21[Reset Pullback Flag]
F21 --> A
E2 --> F15
Implementation Steps
Phase 1: Project Setup & Git Configuration
- Create MQL4 project structure
- Initialize Git repository
- Configure remote to Gitea server (https://git.moreminimore.com/kunthawat/MAEA)
Phase 2: Core EA Structure
- Create
MAEA.mq4with basic EA framework - Define all input parameters (EMA period, lot sizes, TP, breakeven, trailing stop, filters, etc.)
- Set up indicator buffers for 5 visual lines
- Initialize global variables for state tracking
Phase 3: Indicator Calculations
- Implement EMA calculations for High, Medium, Low (period 30)
- Implement Border Line calculations (High Border = High + Range, Low Border = Low - Range)
- Add visual indicators with correct colors (Light Blue, Yellow, Orange, Purple)
- Implement Volume average calculation (20-bar average)
Phase 4: Signal Detection
- Implement breakthrough signal detection (price breaks High/Low EMA)
- Implement pullback signal detection (price hits line and closes on opposite side)
- Implement separate pullback tracking for buy and sell directions
- Implement pullback flag reset logic after order opens
Phase 5: Multiple Timeframe Filter
- Implement D1 EMA calculations for MTF filter
- Implement MTF filter logic (D1 > High = buy only, D1 < Low = sell only, between = no trade)
- Add enable/disable toggle for MTF filter
Phase 6: Additional Filters
- Implement volume filter (current volume > 20-bar average)
- Implement spread filter (current spread <= max spread)
- Implement news filter (avoid specific hours/days, Thailand timezone)
- Add enable/disable toggles for news filter
Phase 7: Order Management
- Implement order opening logic with all filter checks
- Implement dynamic lot sizing (0.01 no pullback, 0.02 with pullback)
- Implement Stop Loss placement at Border Lines
- Implement Take Profit calculation (convert USD target to pips)
- Implement Breakeven logic (move SL to entry at X points)
- Implement Trailing Stop logic (trail by X points after breakeven)
- Implement single order restriction
Phase 8: Risk Management
- Implement max drawdown calculation
- Implement drawdown protection (stop trading if exceeded)
- Implement trading resume logic when drawdown is below limit
Phase 9: Order Monitoring & Management
- Implement Take Profit checking on each tick
- Implement Breakeven checking and SL modification
- Implement Trailing Stop checking and SL modification
- Implement Stop Loss checking
- Implement order closure logic
Phase 10: Testing & Validation
- Test all EMA and Border Line calculations
- Test breakthrough and pullback signal detection
- Test all filters (volume, spread, MTF, news)
- Test order opening with correct lot sizes
- Test TP, SL, breakeven, and trailing stop
- Test drawdown protection
- Test visual indicators display
Phase 11: Documentation & Deployment
- Create comprehensive
README.mdwith strategy documentation - Add parameter descriptions and usage instructions
- Add troubleshooting guide
- Commit initial code to Git
- Push to Gitea repository
- Verify repository connection and code availability
Input Parameters
| Parameter | Description | Default Value |
|---|---|---|
EMAPeriod |
EMA period for all lines | 30 |
LotSizeNormal |
Lot size without pullback | 0.01 |
LotSizePullback |
Lot size with pullback | 0.02 |
TakeProfitUSD |
Take profit target in USD | 5.0 |
BreakevenPoints |
Points to trigger breakeven | 100 |
TrailingStopPoints |
Points for trailing stop distance | 100 |
MagicNumber |
EA unique identifier | 12345 |
MaxSpread |
Maximum allowed spread in points | 30 |
VolumePeriod |
Period for volume average calculation | 20 |
MaxDrawdownPercent |
Maximum drawdown percentage | 10.0 |
UseMTFFilter |
Enable/disable MTF filter | true |
UseNewsFilter |
Enable/disable news filter | true |
NewsAvoidHours |
Hours to avoid (comma-separated) | 14,15,20,21 |
NewsAvoidDays |
Days to avoid (comma-separated) | 1,5 |
Visual Indicators
| Line | Color | Description |
|---|---|---|
| EMA High | Light Blue (clrLightBlue) | EMA of High prices |
| EMA Medium | Yellow (clrYellow) | EMA of Close prices |
| EMA Low | Orange (clrOrange) | EMA of Low prices |
| High Border | Purple (clrPurple) | Upper dynamic border |
| Low Border | Purple (clrPurple) | Lower dynamic border |
Key Considerations
- Pullback Detection: Track price hitting lines and closing on opposite side separately for buy/sell
- Pullback Reset: Reset pullback flag immediately after opening an order
- Single Order: Only one order open at any time
- Dynamic SL: Stop Loss moves with Border Lines as they update
- Breakeven: Only moves SL to entry price, not to profit
- TP Calculation: Convert USD target to pips based on lot size and symbol
- Volume Filter: Only trade when current volume exceeds 20-bar average
- MTF Filter: D1 timeframe acts as trend filter, H1 for entry signals
- Spread Filter: Avoid high spread periods
- Timezone: All time-based filters use Thailand timezone (UTC+7)
- Trailing Stop: Activates after breakeven, trails by specified points
- Drawdown Protection: Stops trading if max drawdown exceeded
Technical Specifications
- Platform: MetaTrader 4
- Language: MQL4
- Trading Timeframe: H1 (recommended)
- Filter Timeframe: D1 (for MTF filter)
- Currency Pairs: All pairs (user-selectable)
- Account Types: Any MT4 account type
- Server Timezone: Thailand (UTC+7)
Testing Checklist
Core Strategy
- EMA calculations verify correctly (High, Medium, Low)
- Border Line calculations verify correctly
- Breakthrough signals trigger correctly
- Pullback signals detect correctly (buy and sell separately)
- Pullback flag resets after order opens
- Lot sizes apply correctly (0.01 vs 0.02)
Filters
- Volume filter works (20-bar average, current > average)
- Spread filter prevents high spread trades
- MTF filter works correctly (D1 > High = buy only, D1 < Low = sell only, between = no trade)
- MTF filter can be enabled/disabled
- News filter avoids specified times (Thailand timezone)
- News filter can be enabled/disabled
Order Management
- Stop Loss places at correct Border Lines
- Take Profit closes at correct USD amount
- Breakeven triggers at correct points
- Trailing stop activates after breakeven
- Trailing stop trails by correct distance
- Only one order opens at a time
Risk Management
- Max drawdown protection works
- Trading stops when drawdown exceeds limit
- Trading resumes when drawdown is below limit
Visual & Technical
- Visual indicators display with correct colors
- Git repository connects to Gitea successfully
- Code compiles without errors
- EA runs without runtime errors
Notes
- The strategy uses 5 visual lines on the chart
- Pullback tracking is separate for buy and sell directions
- Border Lines expand the range beyond the EMAs for wider stops
- The strategy is trend-following and works best in trending markets
- Multiple filters ensure quality trade entries
- All time-based calculations use Thailand timezone (UTC+7)
- MTF filter provides higher timeframe trend confirmation
- Risk management features protect account from excessive losses