mql5/Experts/Advisors/ERMT_PMEx/Guides/CONFIGURATION_RECOMMENDATIONS.md

604 lines
20 KiB
Markdown
Raw Permalink Normal View History

# 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