mql5/Profiles/Tester/ERMT_PME_2.1_M5.EURUSD.M5.last_year.400.ini
darashikoh 3ba25ed9e0 fix(M5): Add stop level validation to prevent infinite BE retry loops
CRITICAL FIX:
- MoveToBreakeven() now validates against broker stop level before modification
- Prevents "Invalid stops" error causing infinite retry spam
- Marks breakeven_applied=true even on failed modify to stop retries

RELATED FIXES:
- Disabled analyzer cleanup in OnDeinit to prevent error 506 pointer access crash
- Analyzer GenerateAnalysisReport() file I/O unsafe during shutdown
- TODO: Refactor analyzer report generation to be shutdown-safe

Changes to PositionManager_PME_Complete.mqh:
- Lines 854-876: Added ValidateStopLoss() check in MoveToBreakeven()
- Failsafe: Mark BE attempted even if modify fails post-validation
- Prevents tick-spam when BE trigger met but SL too close to market price

Changes to ERMT_PME_2.1_M5.mq5:
- Lines 893-906: Commented out g_analyzer cleanup block in OnDeinit()
- Temporary disable pending shutdown-safe refactor

Testing:
- Before: "failed modify #7... [Invalid stops]" spam, backtest hangs
- After: Clean execution, BE either succeeds or silently skips
- Parametric optimization now completes successfully

Dependencies: Requires M5 v2.1 changes from previous commit
2026-03-03 11:16:01 +00:00

116 lines
8.8 KiB
INI

;Expert Advisor single test: ERMT_PME_2.1_M5, EURUSD M5, real ticks, last year
[Tester]
Expert=Advisors\ERMT_PMEx\ERMT_PME_2.1_M5.ex5
Symbol=EURUSD
Period=M5
Optimization=0
Model=4
Dates=2
ForwardMode=0
Deposit=1000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=-1
OptimizationCriterion=0
Visual=0
[TesterInputs]
; === Management Control ===
InpInstanceID=PME2
InpManageAllPositions=true||false||0||true||N
InpMagicFilter=0||0||1||10||N
InpDefaultMode=3||0||0||4||N
InpStartLevel=1||0||0||3||N
; === Entry Mode (Backtesting) ===
InpEnableEntries=true||false||0||true||N
InpEntryMagic=77777||77777||1||777770||N
InpEntryRiskPercent=2.0||1.0||0.100000||10.000000||N
InpEntryLots=0.0||0.0||0.000000||0.000000||N
InpStopLossPoints=300||300||100||1000||N
InpTakeProfitRR=3.0||3.0||0.300000||30.000000||N
InpMinBarsBetweenEntries=10||10||1||100||N
; === Risk Protection ===
InpMaxLossPerTrade=3.0||3.0||0.300000||30.000000||N
InpMaxDailyLoss=10.0||10.0||1.000000||100.000000||N
InpMaxDrawdown=25.0||25.0||2.500000||250.000000||N
InpMaxCorrelation=0.8||0.8||0.080000||8.000000||N
; === Emergency Protection ===
InpApplyEmergencyStops=false||false||0||true||N
InpEmergencySLMultiplier=7||2.5||0.250000||25.000000||N
InpEmergencyTPMultiplier=4.0||4.0||0.400000||40.000000||N
; === Stop Loss Management ===
InpDynamicStops=false||false||0||true||N
InpTightenOnProfit=true||false||0||true||N
InpTightenThreshold=50.0||50.0||5.000000||500.000000||N
InpProtectProfits=true||false||0||true||N
; === Breakeven Settings ===
InpBreakevenEnabled=false||false||0||true||N
InpBreakevenTrigger=150||30.0||3.000000||300.000000||N
InpBreakevenOffset=50||5.0||0.500000||50.000000||N
InpMultiLevelBE=false||false||0||true||N
; === Trailing Stop ===
InpTrailingMethod=0||0||0||8||N
InpTrailStart=50.0||50.0||5.000000||500.000000||N
InpTrailDistance=30.0||30.0||3.000000||300.000000||N
InpTrailStep=10.0||10.0||1.000000||100.000000||N
InpAdaptiveTrailing=true||false||0||true||N
; === Partial Close ===
InpPartialEnabled=false||false||0||true||N
InpPartialTrigger1=50.0||50.0||5.000000||500.000000||N
InpPartialPercent1=30.0||30.0||3.000000||300.000000||N
InpPartialTrigger2=100.0||100.0||10.000000||1000.000000||N
InpPartialPercent2=25.0||25.0||2.500000||250.000000||N
; === Exit Management ===
InpUseTechnicalExits=false||false||0||true||N
InpTimeBasedExits=false||false||0||true||N
InpMaxBarsInTrade=500||500||1||5000||N
InpReduceRiskOverTime=false||false||0||true||N
; === Time Filters ===
InpUseTimeFilter=false||false||0||true||N
InpStartHour=8||8||1||80||N
InpEndHour=20||20||1||200||N
InpFridayClose=true||false||0||true||N
InpFridayCloseHour=21||21||1||210||N
; === Display Settings ===
InpShowDashboard=true||false||0||true||N
InpDashboardX=20||20||1||200||N
InpDashboardY=50||50||1||500||N
InpUpdateFrequency=2||2||1||20||N
; === System Settings ===
InpLogLevel=3||0||0||5||N
InpSaveReports=true||false||0||true||N
InpEmailAlerts=false||false||0||true||N
InpPushAlerts=false||false||0||true||N
InpSoundAlerts=true||false||0||true||N
; === M5 Bar Counting Mode ===
InpEnableM5Mode=true||false||0||true||N
InpM5Partial1=35.0||35.0||3.500000||350.000000||N
InpM5Partial2=60.0||60.0||6.000000||600.000000||N
InpM5Partial3=100.0||100.0||10.000000||1000.000000||N
InpM5Partial4=150.0||150.0||15.000000||1500.000000||N
InpM5Phase1=60||60||1||600||N
InpM5Phase2=180||180||1||1800||N
InpM5MaxBars=300||300||1||3000||N
InpM5DisasterTrigger=100.0||100.0||100||1000.000000||N
InpM5DisasterDistance=150.0||150.0||100||1000||N
InpBarCountEntry=5||3||0||0||N
; === Graduated Stop-Loss (v2.1) ===
InpUseGraduatedStops=true||false||0||true||N
InpInitialStopATR=7||3.5||0.5||7||Y
InpPhase1StopATR=5||2.5||0.250000||5||Y
InpPhase2StopATR=3||2.0||0.25||3||Y
InpMatureStopATR=1.5||1.5||0.25||2||Y
; === Delayed Breakeven (v2.1) ===
InpUseDelayedBreakeven=true||false||0||true||N
InpMinBarsBeforeBE=20||20||1||200||N
InpMinProfitBarsForBE=5||5||1||50||N
InpRequireProfitStability=true||false||0||true||N
; === Delayed Trailing (v2.1) ===
InpUseDelayedTrailing=true||false||0||true||N
InpMinBarsBeforeTrail=40||40||1||400||N
InpTrailMinProfit=60.0||60.0||6.000000||600.000000||N
; === Reversal Speed Tracking (v2.1) ===
InpShowReversalMetrics=true||false||0||true||N
InpAdjustForReversalSpeed=true||false||0||true||N
InpFastReversalBars=12||12||1||120||N
InpSlowReversalBars=60||60||1||600||N