604 lines
20 KiB
Markdown
604 lines
20 KiB
Markdown
|
|
# Configuration Recommendations for ERMT_PME EA
|
||
|
|
## Exposing Hardcoded Variables for Better User Control
|
||
|
|
|
||
|
|
**Analysis Date**: 2025-11-04
|
||
|
|
**EA Version**: ERMT_PME v1.2
|
||
|
|
**Purpose**: Identify hardcoded variables that should be exposed as user inputs
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Executive Summary
|
||
|
|
|
||
|
|
Current analysis reveals **over 100 hardcoded variables** that should be exposed as user inputs for better control and customization. These variables are organized into **13 functional groups** with clear interaction patterns.
|
||
|
|
|
||
|
|
### Key Findings
|
||
|
|
|
||
|
|
| Category | Hardcoded Variables | Priority |
|
||
|
|
|----------|-------------------|----------|
|
||
|
|
| **Risk Management** | 7 | 🔴 HIGH |
|
||
|
|
| **Profit Protection** | 12 | 🔴 HIGH |
|
||
|
|
| **Exit Management** | 10 | 🟡 MEDIUM |
|
||
|
|
| **Market Adaptation** | 19 | 🟡 MEDIUM |
|
||
|
|
| **Trailing Stops** | 8 | 🟡 MEDIUM |
|
||
|
|
| **Session Management** | 7 | 🟢 LOW |
|
||
|
|
| **Display Settings** | 4 | 🟢 LOW |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Priority 1: Critical Risk Management Variables (URGENT)
|
||
|
|
|
||
|
|
### Current State (Hardcoded)
|
||
|
|
|
||
|
|
**File**: [ERMT_PME_1.2.mq5](ERMT_PME_1.2.mq5#L72-L76)
|
||
|
|
```mql5
|
||
|
|
// === RISK PROTECTION (Wider Tolerances) ===
|
||
|
|
double InpMaxLossPerTrade = 10; // Should be INPUT
|
||
|
|
double InpMaxDailyLoss = 20.0; // Should be INPUT
|
||
|
|
double InpMaxDrawdown = 30.0; // Should be INPUT
|
||
|
|
double InpMaxCorrelation = 0.85; // Should be INPUT
|
||
|
|
```
|
||
|
|
|
||
|
|
### Recommended Change
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
// === RISK PROTECTION ===
|
||
|
|
input group "Risk Management"
|
||
|
|
input double InpMaxLossPerTrade = 5.0; // Max Loss Per Trade (%)
|
||
|
|
input double InpMaxDailyLoss = 10.0; // Max Daily Loss (%)
|
||
|
|
input double InpMaxDrawdown = 20.0; // Max Account Drawdown (%)
|
||
|
|
input double InpMaxCorrelation = 0.70; // Max Position Correlation
|
||
|
|
```
|
||
|
|
|
||
|
|
### Why This Matters
|
||
|
|
|
||
|
|
**Risk**: Without user control, the EA can risk **10% per trade** and **20% daily**, which is:
|
||
|
|
- ❌ Excessive for most retail accounts
|
||
|
|
- ❌ Violates standard risk management (1-2% per trade)
|
||
|
|
- ❌ Can lead to rapid account depletion
|
||
|
|
|
||
|
|
**Solution**: Make these inputs so users can:
|
||
|
|
- ✅ Set conservative values (1-2% per trade)
|
||
|
|
- ✅ Adjust based on account size
|
||
|
|
- ✅ Match their risk tolerance
|
||
|
|
|
||
|
|
### Trading Style Presets
|
||
|
|
|
||
|
|
| Style | Per Trade | Daily Loss | Drawdown | Use Case |
|
||
|
|
|-------|-----------|------------|----------|----------|
|
||
|
|
| **Ultra Conservative** | 0.5-1% | 2-3% | 5-10% | Retirement accounts |
|
||
|
|
| **Conservative** | 1-2% | 3-5% | 10-15% | Long-term growth |
|
||
|
|
| **Balanced** | 2-3% | 5-10% | 15-20% | Standard trading |
|
||
|
|
| **Aggressive** | 3-5% | 10-15% | 20-30% | Experienced traders |
|
||
|
|
| **Very Aggressive** | 5-10% | 15-20% | 30-40% | Prop traders |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Priority 2: Trailing Stop Configuration
|
||
|
|
|
||
|
|
### Current State (Hardcoded)
|
||
|
|
|
||
|
|
**File**: [ERMT_PME_1.2.mq5](ERMT_PME_1.2.mq5#L126-L134)
|
||
|
|
```mql5
|
||
|
|
// === TRAILING STOP CONFIGURATION (Wider) ===
|
||
|
|
input ENUM_TRAILING_METHOD InpTrailingMethod = TRAIL_ATR; // Already input
|
||
|
|
double InpTrailStart = 60; // Should be INPUT
|
||
|
|
double InpTrailDistance = 40; // Should be INPUT
|
||
|
|
double InpTrailStep = 15; // Should be INPUT
|
||
|
|
bool InpAdaptiveTrailing = true; // Should be INPUT
|
||
|
|
double InpLowVolatilityMultiplier = 0.8; // Should be INPUT
|
||
|
|
double InpHighVolatilityMultiplier = 1.5; // Should be INPUT
|
||
|
|
double InpVolatilityThreshold = 1.2; // Should be INPUT
|
||
|
|
```
|
||
|
|
|
||
|
|
### Recommended Change
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
// === TRAILING STOP CONFIGURATION ===
|
||
|
|
input group "Trailing Stop Management"
|
||
|
|
input ENUM_TRAILING_METHOD InpTrailingMethod = TRAIL_ATR; // Trailing Method
|
||
|
|
input double InpTrailStart = 60; // Start Trailing After (pts)
|
||
|
|
input double InpTrailDistance = 40; // Trail Distance (pts)
|
||
|
|
input double InpTrailStep = 15; // Minimum Trail Step (pts)
|
||
|
|
input bool InpAdaptiveTrailing = true; // Enable Adaptive Trailing
|
||
|
|
input double InpLowVolatilityMultiplier = 0.8; // Low Vol Multiplier
|
||
|
|
input double InpHighVolatilityMultiplier = 1.5; // High Vol Multiplier
|
||
|
|
input double InpVolatilityThreshold = 1.2; // Volatility Threshold
|
||
|
|
```
|
||
|
|
|
||
|
|
### Why This Matters
|
||
|
|
|
||
|
|
**Issue**: Fixed trailing parameters don't adapt to:
|
||
|
|
- Different instruments (stocks vs forex)
|
||
|
|
- Different timeframes (M5 vs H4)
|
||
|
|
- Different market conditions (trending vs ranging)
|
||
|
|
|
||
|
|
**Solution**: Expose these so users can:
|
||
|
|
- ✅ Set wider trails for longer timeframes
|
||
|
|
- ✅ Adjust for instrument volatility
|
||
|
|
- ✅ Fine-tune for their trading style
|
||
|
|
|
||
|
|
### Trailing Style Presets
|
||
|
|
|
||
|
|
| Style | Trail Start | Trail Distance | Step | Adaptive | Use Case |
|
||
|
|
|-------|-------------|----------------|------|----------|----------|
|
||
|
|
| **Tight** | 30pts | 20pts | 10pts | ✅ Yes | Scalping, M5 |
|
||
|
|
| **Standard** | 60pts | 40pts | 15pts | ✅ Yes | Intraday, H1 |
|
||
|
|
| **Loose** | 100pts | 60pts | 20pts | ✅ Yes | Swing, H4+ |
|
||
|
|
| **Very Loose** | 150pts | 80pts | 30pts | ✅ Yes | Position, Daily |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Priority 3: Partial Closure Strategy
|
||
|
|
|
||
|
|
### Current State (Hardcoded)
|
||
|
|
|
||
|
|
**File**: [ERMT_PME_1.2.mq5](ERMT_PME_1.2.mq5#L137-L148)
|
||
|
|
```mql5
|
||
|
|
// === PARTIAL CLOSE CONFIGURATION (Delayed) ===
|
||
|
|
bool InpPartialEnabled = true; // Should be INPUT
|
||
|
|
int InpPartialLevels = 4; // Should be INPUT
|
||
|
|
|
||
|
|
// Partial Close Levels (4 levels)
|
||
|
|
double InpPartial1_Trigger = 50; // Should be INPUT
|
||
|
|
double InpPartial1_Percent = 20; // Should be INPUT
|
||
|
|
double InpPartial2_Trigger = 100; // Should be INPUT
|
||
|
|
double InpPartial2_Percent = 25; // Should be INPUT
|
||
|
|
double InpPartial3_Trigger = 200; // Should be INPUT
|
||
|
|
double InpPartial3_Percent = 25; // Should be INPUT
|
||
|
|
double InpPartial4_Trigger = 400; // Should be INPUT
|
||
|
|
double InpPartial4_Percent = 15; // Should be INPUT
|
||
|
|
```
|
||
|
|
|
||
|
|
### Recommended Change
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
// === PARTIAL CLOSE CONFIGURATION ===
|
||
|
|
input group "Partial Profit Taking"
|
||
|
|
input bool InpPartialEnabled = true; // Enable Partial Closes
|
||
|
|
input int InpPartialLevels = 4; // Number of Partial Levels (1-10)
|
||
|
|
|
||
|
|
// Level 1: Early Profit
|
||
|
|
input double InpPartial1_Trigger = 50; // Level 1 Trigger (pts)
|
||
|
|
input double InpPartial1_Percent = 20; // Level 1 Close (%)
|
||
|
|
|
||
|
|
// Level 2: Intermediate Profit
|
||
|
|
input double InpPartial2_Trigger = 100; // Level 2 Trigger (pts)
|
||
|
|
input double InpPartial2_Percent = 25; // Level 2 Close (%)
|
||
|
|
|
||
|
|
// Level 3: Strong Profit
|
||
|
|
input double InpPartial3_Trigger = 200; // Level 3 Trigger (pts)
|
||
|
|
input double InpPartial3_Percent = 25; // Level 3 Close (%)
|
||
|
|
|
||
|
|
// Level 4: Exceptional Profit
|
||
|
|
input double InpPartial4_Trigger = 400; // Level 4 Trigger (pts)
|
||
|
|
input double InpPartial4_Percent = 15; // Level 4 Close (%)
|
||
|
|
|
||
|
|
// Remaining = Runner (15% in this config)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Partial Strategy Comparison
|
||
|
|
|
||
|
|
#### Conservative: "Bank It Early"
|
||
|
|
```mql5
|
||
|
|
InpPartialLevels = 3;
|
||
|
|
Level 1: 30pts → 40% closed (40% banked)
|
||
|
|
Level 2: 60pts → 30% closed (70% banked total)
|
||
|
|
Level 3: 100pts → 20% closed (90% banked total)
|
||
|
|
Runner: 10% remaining
|
||
|
|
```
|
||
|
|
**Profile**: Risk-averse, prefers guaranteed profits, smaller runners
|
||
|
|
|
||
|
|
#### Balanced: "Hybrid Approach" (Current)
|
||
|
|
```mql5
|
||
|
|
InpPartialLevels = 4;
|
||
|
|
Level 1: 50pts → 20% closed (20% banked)
|
||
|
|
Level 2: 100pts → 25% closed (45% banked total)
|
||
|
|
Level 3: 200pts → 25% closed (70% banked total)
|
||
|
|
Level 4: 400pts → 15% closed (85% banked total)
|
||
|
|
Runner: 15% remaining
|
||
|
|
```
|
||
|
|
**Profile**: Balanced profit-taking, moderate runners
|
||
|
|
|
||
|
|
#### Aggressive: "Let It Run"
|
||
|
|
```mql5
|
||
|
|
InpPartialLevels = 3;
|
||
|
|
Level 1: 100pts → 15% closed (15% banked)
|
||
|
|
Level 2: 200pts → 15% closed (30% banked total)
|
||
|
|
Level 3: 400pts → 20% closed (50% banked total)
|
||
|
|
Runner: 50% remaining
|
||
|
|
```
|
||
|
|
**Profile**: Trend-following, large runners, maximum profit capture
|
||
|
|
|
||
|
|
#### Scalping: "Quick Profits"
|
||
|
|
```mql5
|
||
|
|
InpPartialLevels = 2;
|
||
|
|
Level 1: 10pts → 50% closed (50% banked)
|
||
|
|
Level 2: 20pts → 30% closed (80% banked total)
|
||
|
|
Runner: 20% remaining
|
||
|
|
```
|
||
|
|
**Profile**: Fast-paced, small targets, high turnover
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Priority 4: Dynamic Stop Management
|
||
|
|
|
||
|
|
### Current State (Hardcoded)
|
||
|
|
|
||
|
|
**File**: [ERMT_PME_1.2.mq5](ERMT_PME_1.2.mq5#L84-L88)
|
||
|
|
```mql5
|
||
|
|
// === DYNAMIC STOP MANAGEMENT ===
|
||
|
|
bool InpDynamicStops = true; // Should be INPUT
|
||
|
|
bool InpTightenOnProfit = true; // Should be INPUT
|
||
|
|
double InpTightenThreshold = 75; // Should be INPUT
|
||
|
|
bool InpProtectProfits = true; // Should be INPUT
|
||
|
|
double InpProtectionThreshold = 100; // Should be INPUT
|
||
|
|
```
|
||
|
|
|
||
|
|
### Recommended Change
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
// === DYNAMIC STOP MANAGEMENT ===
|
||
|
|
input group "Dynamic Stop Adjustment"
|
||
|
|
input bool InpDynamicStops = true; // Enable Dynamic Stops
|
||
|
|
input bool InpTightenOnProfit = true; // Tighten Stops in Profit
|
||
|
|
input double InpTightenThreshold = 75; // Tighten After (pts)
|
||
|
|
input bool InpProtectProfits = true; // Enable Profit Protection
|
||
|
|
input double InpProtectionThreshold = 100; // Protect After (pts)
|
||
|
|
```
|
||
|
|
|
||
|
|
### How This Works
|
||
|
|
|
||
|
|
```
|
||
|
|
Position Lifecycle with Dynamic Stops:
|
||
|
|
|
||
|
|
Entry → 40pts → PROTECTION Phase (10pts lock)
|
||
|
|
→ 75pts → TIGHTEN threshold
|
||
|
|
→ Stops begin tightening progressively
|
||
|
|
→ 100pts → PROTECTION threshold
|
||
|
|
→ Profit protection activates
|
||
|
|
→ 200pts → RUNNER Phase (100pts lock)
|
||
|
|
```
|
||
|
|
|
||
|
|
**Without Dynamic Stops**:
|
||
|
|
- Static stop at entry -50pts
|
||
|
|
- No adaptation to profit development
|
||
|
|
- Risk: Full retracement from 150pts → Stop hit at -50pts
|
||
|
|
|
||
|
|
**With Dynamic Stops**:
|
||
|
|
- Stop moves with profit
|
||
|
|
- At 150pts: Stop at +50pts minimum (phase lock)
|
||
|
|
- Risk: Limited retracement, worst case +50pts exit
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Configuration Groups & Interactions
|
||
|
|
|
||
|
|
### Group A: Breakeven System (DISABLED - Replaced by Phase Locks)
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
#if USE_BREAKEVEN_SYSTEM
|
||
|
|
input bool InpBreakevenEnabled = true;
|
||
|
|
input double InpBreakevenTrigger = 40;
|
||
|
|
input double InpBreakevenOffset = 8;
|
||
|
|
input bool InpMultiLevelBE = true;
|
||
|
|
#else
|
||
|
|
bool InpBreakevenEnabled = false; // Currently DISABLED
|
||
|
|
#endif
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: ❌ Disabled in favor of phase-based profit locking
|
||
|
|
**Reason**: Conflicts with phase locks at 40pts trigger point
|
||
|
|
|
||
|
|
### Group B: Phase-Based Profit Locking (PRIMARY SYSTEM)
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
input group "Phase-Based Profit Locking"
|
||
|
|
input bool InpUsePhaseProfitLocks = true; // ✅ Already exposed
|
||
|
|
input double InpPhaseLockBreathingRoom = 50; // ✅ Already exposed
|
||
|
|
input bool InpMaintainLockOnRetreat = true; // ✅ Already exposed
|
||
|
|
input double InpRetreatLockMultiplier = 1.2; // ✅ Already exposed
|
||
|
|
|
||
|
|
// Phase Minimum Locks
|
||
|
|
input double InpPhase1MinLock = 10; // ✅ Already exposed
|
||
|
|
input double InpPhase2MinLock = 25; // ✅ Already exposed
|
||
|
|
input double InpPhase3MinLock = 50; // ✅ Already exposed
|
||
|
|
input double InpPhase4MinLock = 100; // ✅ Already exposed
|
||
|
|
input double InpPhase5MinLock = 200; // ✅ Already exposed
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: ✅ Well-configured, already exposed as inputs
|
||
|
|
**Note**: These are the **primary profit protection** system
|
||
|
|
|
||
|
|
### Group C: Session-Based Adjustments
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
// === SESSION-BASED ADJUSTMENTS ===
|
||
|
|
bool InpSessionBasedManagement = true; // Should be INPUT
|
||
|
|
double InpAsianTrailMultiplier = 1.2; // Should be INPUT
|
||
|
|
double InpAsianPartialMultiplier = 1.5; // Should be INPUT
|
||
|
|
double InpLondonTrailMultiplier = 1.0; // Should be INPUT
|
||
|
|
double InpLondonPartialMultiplier = 1.0; // Should be INPUT
|
||
|
|
double InpNewYorkTrailMultiplier = 0.9; // Should be INPUT
|
||
|
|
double InpNewYorkPartialMultiplier = 0.8; // Should be INPUT
|
||
|
|
```
|
||
|
|
|
||
|
|
### Recommended Change
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
// === SESSION-BASED ADJUSTMENTS ===
|
||
|
|
input group "Session Management"
|
||
|
|
input bool InpSessionBasedManagement = true; // Enable Session Adaptation
|
||
|
|
|
||
|
|
// Asian Session (Low volatility, wider stops)
|
||
|
|
input double InpAsianTrailMultiplier = 1.2; // Asian Trail Multiplier
|
||
|
|
input double InpAsianPartialMultiplier = 1.5; // Asian Partial Multiplier
|
||
|
|
|
||
|
|
// London Session (High volatility, standard)
|
||
|
|
input double InpLondonTrailMultiplier = 1.0; // London Trail Multiplier
|
||
|
|
input double InpLondonPartialMultiplier = 1.0; // London Partial Multiplier
|
||
|
|
|
||
|
|
// New York Session (High volatility, tighter)
|
||
|
|
input double InpNewYorkTrailMultiplier = 0.9; // NY Trail Multiplier
|
||
|
|
input double InpNewYorkPartialMultiplier = 0.8; // NY Partial Multiplier
|
||
|
|
```
|
||
|
|
|
||
|
|
### Session Profiles
|
||
|
|
|
||
|
|
| Session | Characteristics | Trail Mult. | Partial Mult. | Strategy |
|
||
|
|
|---------|----------------|-------------|---------------|----------|
|
||
|
|
| **Asian** | Low volatility, wide ranges | 1.2-1.5× | 1.3-1.5× | Wider stops, later partials |
|
||
|
|
| **London** | High volatility, trending | 1.0× | 1.0× | Standard settings |
|
||
|
|
| **NY** | High volatility, reversals | 0.8-0.9× | 0.8-0.9× | Tighter stops, earlier partials |
|
||
|
|
| **Overlap** | Highest volatility | 0.7-0.8× | 0.7-0.8× | Very tight, quick profits |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Implementation Priority Roadmap
|
||
|
|
|
||
|
|
### Phase 1: Critical Variables (Next Release)
|
||
|
|
|
||
|
|
**Must Have**:
|
||
|
|
1. ✅ Risk limits (Max loss per trade, daily, drawdown)
|
||
|
|
2. ✅ Trailing parameters (Start, distance, step)
|
||
|
|
3. ✅ Partial closure settings (Triggers, percentages)
|
||
|
|
4. ✅ Dynamic stop thresholds
|
||
|
|
|
||
|
|
**Estimated Work**: 2-3 hours
|
||
|
|
**Impact**: HIGH - Gives users essential control
|
||
|
|
|
||
|
|
### Phase 2: Market Adaptation (Following Release)
|
||
|
|
|
||
|
|
**Should Have**:
|
||
|
|
1. ✅ Session multipliers
|
||
|
|
2. ✅ Volatility adjustments
|
||
|
|
3. ✅ Momentum thresholds
|
||
|
|
4. ✅ Time filters
|
||
|
|
|
||
|
|
**Estimated Work**: 3-4 hours
|
||
|
|
**Impact**: MEDIUM - Improves adaptability
|
||
|
|
|
||
|
|
### Phase 3: Advanced Features (Future)
|
||
|
|
|
||
|
|
**Nice to Have**:
|
||
|
|
1. ✅ Technical exit signals
|
||
|
|
2. ✅ Volume analysis parameters
|
||
|
|
3. ✅ Support/resistance buffers
|
||
|
|
4. ✅ Advanced protection mechanisms
|
||
|
|
|
||
|
|
**Estimated Work**: 4-5 hours
|
||
|
|
**Impact**: LOW - For power users
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Preset Configuration System
|
||
|
|
|
||
|
|
### Recommended Implementation
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
//| Trading Style Presets |
|
||
|
|
//+------------------------------------------------------------------+
|
||
|
|
enum ENUM_TRADING_STYLE
|
||
|
|
{
|
||
|
|
STYLE_ULTRA_CONSERVATIVE, // Ultra Conservative (0.5-1% risk)
|
||
|
|
STYLE_CONSERVATIVE, // Conservative (1-2% risk)
|
||
|
|
STYLE_BALANCED, // Balanced (2-3% risk)
|
||
|
|
STYLE_AGGRESSIVE, // Aggressive (3-5% risk)
|
||
|
|
STYLE_VERY_AGGRESSIVE, // Very Aggressive (5-10% risk)
|
||
|
|
STYLE_CUSTOM // Custom (user-defined)
|
||
|
|
};
|
||
|
|
|
||
|
|
input group "=== Quick Setup ==="
|
||
|
|
input ENUM_TRADING_STYLE InpTradingStyle = STYLE_BALANCED; // Select Trading Style
|
||
|
|
input bool InpUsePreset = true; // Use Preset Configuration
|
||
|
|
```
|
||
|
|
|
||
|
|
### Preset Values Table
|
||
|
|
|
||
|
|
| Parameter | Ultra Cons. | Conserv. | Balanced | Aggress. | Very Aggr. |
|
||
|
|
|-----------|-------------|----------|----------|----------|------------|
|
||
|
|
| **Max Loss/Trade** | 0.5% | 1% | 3% | 5% | 10% |
|
||
|
|
| **Max Daily Loss** | 2% | 3% | 10% | 15% | 20% |
|
||
|
|
| **Max Drawdown** | 5% | 10% | 20% | 30% | 40% |
|
||
|
|
| **Trail Start** | 30pts | 40pts | 60pts | 80pts | 100pts |
|
||
|
|
| **Trail Distance** | 20pts | 30pts | 40pts | 50pts | 60pts |
|
||
|
|
| **Partial 1 Trigger** | 30pts | 40pts | 50pts | 80pts | 100pts |
|
||
|
|
| **Partial 1 %** | 40% | 30% | 20% | 15% | 10% |
|
||
|
|
| **Runner %** | 10% | 15% | 15% | 30% | 50% |
|
||
|
|
| **Phase 1 Lock** | 15pts | 12pts | 10pts | 8pts | 5pts |
|
||
|
|
| **Breathing Room** | 30% | 40% | 50% | 60% | 70% |
|
||
|
|
|
||
|
|
### Code Implementation Example
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
void ApplyTradingStylePreset()
|
||
|
|
{
|
||
|
|
if(!InpUsePreset) return; // User wants custom settings
|
||
|
|
|
||
|
|
switch(InpTradingStyle)
|
||
|
|
{
|
||
|
|
case STYLE_ULTRA_CONSERVATIVE:
|
||
|
|
g_config.max_loss_per_trade = 0.5;
|
||
|
|
g_config.max_daily_loss = 2.0;
|
||
|
|
g_config.max_drawdown = 5.0;
|
||
|
|
g_config.trail_start = 30;
|
||
|
|
g_config.trail_distance = 20;
|
||
|
|
g_config.partial_1_trigger = 30;
|
||
|
|
g_config.partial_1_percent = 40;
|
||
|
|
g_config.runner_percentage = 10;
|
||
|
|
g_config.phase1_min_lock = 15;
|
||
|
|
g_config.breathing_room = 30;
|
||
|
|
break;
|
||
|
|
|
||
|
|
case STYLE_CONSERVATIVE:
|
||
|
|
// ... conservative settings
|
||
|
|
break;
|
||
|
|
|
||
|
|
case STYLE_BALANCED:
|
||
|
|
// ... balanced settings (current defaults)
|
||
|
|
break;
|
||
|
|
|
||
|
|
case STYLE_AGGRESSIVE:
|
||
|
|
// ... aggressive settings
|
||
|
|
break;
|
||
|
|
|
||
|
|
case STYLE_VERY_AGGRESSIVE:
|
||
|
|
// ... very aggressive settings
|
||
|
|
break;
|
||
|
|
|
||
|
|
case STYLE_CUSTOM:
|
||
|
|
// Use user-defined input parameters
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(g_utils != NULL)
|
||
|
|
{
|
||
|
|
g_utils.Log(StringFormat("Applied %s preset configuration",
|
||
|
|
EnumToString(InpTradingStyle)), LOG_INFO);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Validation & Safety
|
||
|
|
|
||
|
|
### Input Validation Requirements
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
bool ValidateInputParameters()
|
||
|
|
{
|
||
|
|
bool valid = true;
|
||
|
|
|
||
|
|
// Risk limits
|
||
|
|
if(InpMaxLossPerTrade < 0.1 || InpMaxLossPerTrade > 20)
|
||
|
|
{
|
||
|
|
Print("ERROR: Max loss per trade must be between 0.1% and 20%");
|
||
|
|
valid = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Phase triggers must be ascending
|
||
|
|
if(InpPhase1Trigger >= InpPhase2Trigger ||
|
||
|
|
InpPhase2Trigger >= InpPhase3Trigger ||
|
||
|
|
InpPhase3Trigger >= InpPhase4Trigger ||
|
||
|
|
InpPhase4Trigger >= InpPhase5Trigger)
|
||
|
|
{
|
||
|
|
Print("ERROR: Phase triggers must be in ascending order");
|
||
|
|
valid = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Partial percentages must not exceed 100% total
|
||
|
|
double total_partial = InpPartial1_Percent + InpPartial2_Percent +
|
||
|
|
InpPartial3_Percent + InpPartial4_Percent;
|
||
|
|
if(total_partial > 95) // Allow max 95% closed, 5% min runner
|
||
|
|
{
|
||
|
|
Print("ERROR: Total partial closes exceed 95%");
|
||
|
|
valid = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Trail distance must be positive
|
||
|
|
if(InpTrailDistance <= 0)
|
||
|
|
{
|
||
|
|
Print("ERROR: Trail distance must be positive");
|
||
|
|
valid = false;
|
||
|
|
}
|
||
|
|
|
||
|
|
return valid;
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Warning System
|
||
|
|
|
||
|
|
```mql5
|
||
|
|
void WarnAboutAggressiveSettings()
|
||
|
|
{
|
||
|
|
string warnings = "";
|
||
|
|
|
||
|
|
if(InpMaxLossPerTrade > 5)
|
||
|
|
warnings += "⚠️ WARNING: Max loss per trade exceeds 5% (very aggressive)\n";
|
||
|
|
|
||
|
|
if(InpMaxDailyLoss > 15)
|
||
|
|
warnings += "⚠️ WARNING: Max daily loss exceeds 15% (very aggressive)\n";
|
||
|
|
|
||
|
|
if(InpRunnerPercentage > 40)
|
||
|
|
warnings += "⚠️ WARNING: Runner percentage exceeds 40% (high risk)\n";
|
||
|
|
|
||
|
|
if(InpPhaseLockBreathingRoom > 70)
|
||
|
|
warnings += "⚠️ WARNING: Breathing room exceeds 70% (loose protection)\n";
|
||
|
|
|
||
|
|
if(warnings != "")
|
||
|
|
{
|
||
|
|
Print("=== AGGRESSIVE SETTINGS DETECTED ===");
|
||
|
|
Print(warnings);
|
||
|
|
Print("Consider using STYLE_BALANCED for safer trading");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Summary & Next Steps
|
||
|
|
|
||
|
|
### Current Status
|
||
|
|
- ✅ Phase-based profit locking: **Well-configured** (already inputs)
|
||
|
|
- ⚠️ Risk management: **Needs urgent attention** (hardcoded at risky levels)
|
||
|
|
- ⚠️ Trailing stops: **Needs configuration** (fixed for all instruments)
|
||
|
|
- ⚠️ Partial closures: **Needs flexibility** (one-size-fits-all)
|
||
|
|
|
||
|
|
### Recommended Actions
|
||
|
|
|
||
|
|
**Immediate (Before Next Use)**:
|
||
|
|
1. Expose risk management variables as inputs
|
||
|
|
2. Add input validation and warnings
|
||
|
|
3. Document recommended settings for different account sizes
|
||
|
|
|
||
|
|
**Short-Term (Next Update)**:
|
||
|
|
1. Expose trailing and partial configuration
|
||
|
|
2. Implement preset system (Conservative/Balanced/Aggressive)
|
||
|
|
3. Add session-based adjustments
|
||
|
|
|
||
|
|
**Long-Term (Future Enhancements)**:
|
||
|
|
1. Add configuration save/load functionality
|
||
|
|
2. Implement A/B testing framework
|
||
|
|
3. Create performance tracking by configuration
|
||
|
|
|
||
|
|
### Expected Benefits
|
||
|
|
|
||
|
|
**For Users**:
|
||
|
|
- ✅ Better risk control (1-2% per trade instead of 10%)
|
||
|
|
- ✅ Customization for trading style
|
||
|
|
- ✅ Adaptation to different instruments/timeframes
|
||
|
|
- ✅ Quick setup with presets
|
||
|
|
|
||
|
|
**For EA Performance**:
|
||
|
|
- ✅ Reduced drawdowns (proper risk sizing)
|
||
|
|
- ✅ Better profit capture (optimized partials)
|
||
|
|
- ✅ Improved adaptability (session/volatility adjustments)
|
||
|
|
- ✅ Higher consistency (matched to market conditions)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Analysis Complete**: 2025-11-04
|
||
|
|
**Priority**: 🔴 HIGH - Implement Phase 1 variables immediately
|
||
|
|
**Impact**: Critical for safe operation and user control
|
||
|
|
|