Full optimization system for LEGSTECH_EA_V2: - Flask + SocketIO live dashboard (dark premium UI) - MT5 process control (auto-kill, clean launch, retry) - HTML report parser (UTF-16 LE, 597 trades, metrics) - Pre-run validation and actionable error messages - Analysis engines: Reversal, TimePerfomance, EntryExit, EquityCurve - Composite scoring (Calmar-primary) - Mutation engine with knowledge_base.yaml - Validation gate: IS + Walk-Forward - Reports folder with HTML/CSV per run - Double-click launcher batch file
395 lines
10 KiB
YAML
395 lines
10 KiB
YAML
# Parameter Manifest — LEGSTECH_EA_V2
|
|
# Generated from: LEGSTECH_EA_V2.set
|
|
# Format: value = default, min/max/step = optimization bounds
|
|
# Types: float | int | bool | enum
|
|
# ─────────────────────────────────────────────────────────────
|
|
|
|
parameters:
|
|
|
|
# ── Bot / Mode ─────────────────────────────────────────────
|
|
InpBotMode:
|
|
type: enum
|
|
values: [0, 1, 2] # 0, 1, 2 per .set range 0→2 step 1
|
|
default: 1
|
|
category: mode
|
|
description: "Bot operating mode"
|
|
|
|
# ── Timeframe Selection (PERIOD_ codes) ────────────────────
|
|
# These are MT5 ENUM_TIMEFRAMES integer codes. Not optimized — fixed.
|
|
InpHTF:
|
|
type: fixed
|
|
default: 16408 # PERIOD_H4
|
|
category: timeframe
|
|
InpMTF:
|
|
type: fixed
|
|
default: 16388 # PERIOD_H1
|
|
category: timeframe
|
|
InpLTF:
|
|
type: fixed
|
|
default: 16385 # PERIOD_M30
|
|
category: timeframe
|
|
|
|
# ── Risk Management ────────────────────────────────────────
|
|
InpRiskType:
|
|
type: enum
|
|
values: [0, 1] # 0=fixed lot, 1=percent risk
|
|
default: 1
|
|
category: risk
|
|
|
|
InpFixedLot:
|
|
type: float
|
|
min: 0.01
|
|
max: 1.0
|
|
step: 0.01
|
|
default: 0.01
|
|
category: risk
|
|
depends_on_value: {InpRiskType: 0} # only active when using fixed lot mode
|
|
|
|
InpRiskPercent:
|
|
type: float
|
|
min: 0.5
|
|
max: 3.0
|
|
step: 0.5
|
|
default: 1.0
|
|
category: risk
|
|
depends_on_value: {InpRiskType: 1} # only active when using percent risk mode
|
|
|
|
InpMaxDailyLossPct:
|
|
type: float
|
|
min: 1.0
|
|
max: 5.0
|
|
step: 0.5
|
|
default: 3.0
|
|
category: risk
|
|
|
|
InpMaxTradesPerDay:
|
|
type: int
|
|
min: 1
|
|
max: 10
|
|
step: 1
|
|
default: 5
|
|
category: risk
|
|
|
|
# ── Stop Loss ──────────────────────────────────────────────
|
|
InpSLType:
|
|
type: enum
|
|
values: [0, 1] # 0=fixed pips, 1=ATR-based
|
|
default: 0
|
|
category: sl
|
|
|
|
InpSLBuffer:
|
|
type: float
|
|
min: 5.0
|
|
max: 30.0
|
|
step: 5.0
|
|
default: 10.0
|
|
category: sl
|
|
description: "Buffer pips added to SL"
|
|
|
|
InpFixedSLPips:
|
|
type: float
|
|
min: 50.0
|
|
max: 200.0
|
|
step: 10.0
|
|
default: 100.0
|
|
category: sl
|
|
depends_on_value: {InpSLType: 0}
|
|
|
|
InpMaxSLPips:
|
|
type: float
|
|
min: 100.0
|
|
max: 400.0
|
|
step: 50.0
|
|
default: 200.0
|
|
category: sl
|
|
description: "Hard cap on calculated SL size"
|
|
|
|
InpUseFractalSL:
|
|
type: bool
|
|
default: false # 0 in .set
|
|
category: sl
|
|
|
|
# ── Take Profit ────────────────────────────────────────────
|
|
InpTPType:
|
|
type: enum
|
|
values: [0, 1] # 0=RR ratio, 1=fixed pips
|
|
default: 0
|
|
category: tp
|
|
|
|
InpRRRatio:
|
|
type: float
|
|
min: 1.0
|
|
max: 3.0
|
|
step: 0.5
|
|
default: 1.5
|
|
category: tp
|
|
depends_on_value: {InpTPType: 0}
|
|
|
|
InpFixedTPPips:
|
|
type: float
|
|
min: 50.0
|
|
max: 200.0
|
|
step: 10.0
|
|
default: 100.0
|
|
category: tp
|
|
depends_on_value: {InpTPType: 1}
|
|
|
|
InpUseFractalFilter:
|
|
type: bool
|
|
default: false # 0 in .set
|
|
category: tp
|
|
|
|
# ── Session Filter ─────────────────────────────────────────
|
|
InpUseSession:
|
|
type: bool
|
|
default: true # 1 in .set
|
|
category: filter_session
|
|
|
|
InpSessionStart:
|
|
type: int
|
|
min: 0
|
|
max: 23
|
|
step: 1
|
|
default: 7
|
|
category: filter_session
|
|
depends_on: InpUseSession
|
|
description: "Session start hour (broker local time)"
|
|
|
|
InpSessionEnd:
|
|
type: int
|
|
min: 0
|
|
max: 23
|
|
step: 1
|
|
default: 20
|
|
category: filter_session
|
|
depends_on: InpUseSession
|
|
description: "Session end hour (broker local time)"
|
|
|
|
# ── Trade Limits ───────────────────────────────────────────
|
|
InpMaxOpenTrades:
|
|
type: int
|
|
min: 1
|
|
max: 3
|
|
step: 1
|
|
default: 1
|
|
category: risk
|
|
|
|
InpAllowMultiple:
|
|
type: bool
|
|
default: false # 0 in .set
|
|
category: risk
|
|
|
|
# ── Execution ─────────────────────────────────────────────
|
|
InpMagicNumber:
|
|
type: fixed
|
|
default: 202402
|
|
category: execution
|
|
description: "Fixed — do not optimize"
|
|
|
|
InpSlippage:
|
|
type: int
|
|
min: 5
|
|
max: 30
|
|
step: 5
|
|
default: 10
|
|
category: execution
|
|
|
|
# ── Trailing Stop ─────────────────────────────────────────
|
|
InpUseTrailing:
|
|
type: bool
|
|
default: true # 1 in .set
|
|
category: exit_trail
|
|
|
|
InpTrailStartPips:
|
|
type: float
|
|
min: 10.0
|
|
max: 50.0
|
|
step: 5.0
|
|
default: 20.0
|
|
category: exit_trail
|
|
depends_on: InpUseTrailing
|
|
|
|
InpTrailStepPips:
|
|
type: float
|
|
min: 5.0
|
|
max: 30.0
|
|
step: 5.0
|
|
default: 10.0
|
|
category: exit_trail
|
|
depends_on: InpUseTrailing
|
|
|
|
# ── Break Even ────────────────────────────────────────────
|
|
InpUseBreakeven:
|
|
type: bool
|
|
default: true # 1 in .set
|
|
category: exit_be
|
|
|
|
InpBEPips:
|
|
type: float
|
|
min: 10.0
|
|
max: 40.0
|
|
step: 5.0
|
|
default: 15.0
|
|
category: exit_be
|
|
depends_on: InpUseBreakeven
|
|
description: "Pips in profit to activate breakeven"
|
|
|
|
InpBEBufferPips:
|
|
type: float
|
|
min: 1.0
|
|
max: 5.0
|
|
step: 1.0
|
|
default: 2.0
|
|
category: exit_be
|
|
depends_on: InpUseBreakeven
|
|
description: "Buffer pips above entry for breakeven SL"
|
|
|
|
# ── EMA Filter ────────────────────────────────────────────
|
|
InpUseEMA:
|
|
type: bool
|
|
default: true # 1 in .set
|
|
category: filter_ema
|
|
|
|
InpEMAPeriod:
|
|
type: int
|
|
min: 20
|
|
max: 100
|
|
step: 10
|
|
default: 50
|
|
category: filter_ema
|
|
depends_on: InpUseEMA
|
|
|
|
InpRequireEMASlope:
|
|
type: bool
|
|
default: true # 1 in .set
|
|
category: filter_ema
|
|
depends_on: InpUseEMA
|
|
|
|
InpEMASlopeBars:
|
|
type: int
|
|
min: 1
|
|
max: 3
|
|
step: 1
|
|
default: 1
|
|
category: filter_ema
|
|
depends_on: InpRequireEMASlope
|
|
|
|
# ── Entry Mode ────────────────────────────────────────────
|
|
InpEntryMode:
|
|
type: enum
|
|
values: [0, 1]
|
|
default: 1
|
|
category: entry
|
|
|
|
InpSLBufferMode:
|
|
type: enum
|
|
values: [0, 1]
|
|
default: 1
|
|
category: sl
|
|
|
|
# ── ATR ───────────────────────────────────────────────────
|
|
InpATRPeriod:
|
|
type: int
|
|
min: 10
|
|
max: 20
|
|
step: 2
|
|
default: 14
|
|
category: atr
|
|
|
|
InpATRMultiplier:
|
|
type: float
|
|
min: 0.3
|
|
max: 1.0
|
|
step: 0.1
|
|
default: 0.5
|
|
category: atr
|
|
|
|
# ── Spread Guard ──────────────────────────────────────────
|
|
InpUseSpreadGuard:
|
|
type: bool
|
|
default: true # 1 in .set
|
|
category: filter_spread
|
|
|
|
InpMaxSpreadPips:
|
|
type: float
|
|
min: 10.0
|
|
max: 50.0
|
|
step: 5.0
|
|
default: 30.0
|
|
category: filter_spread
|
|
depends_on: InpUseSpreadGuard
|
|
|
|
# ── Minimum R:R Gate ──────────────────────────────────────
|
|
InpUseMinRR:
|
|
type: bool
|
|
default: true # 1 in .set
|
|
category: filter_rr
|
|
|
|
InpMinRRRatio:
|
|
type: float
|
|
min: 1.0
|
|
max: 3.0
|
|
step: 0.5
|
|
default: 1.5
|
|
category: filter_rr
|
|
depends_on: InpUseMinRR
|
|
|
|
# ── Score Gate ────────────────────────────────────────────
|
|
InpUseScoreGate:
|
|
type: bool
|
|
default: true # 1 in .set
|
|
category: filter_score
|
|
|
|
InpMinScore:
|
|
type: int
|
|
min: 6
|
|
max: 11
|
|
step: 1
|
|
default: 8
|
|
category: filter_score
|
|
depends_on: InpUseScoreGate
|
|
description: "Minimum signal quality score required to enter trade"
|
|
|
|
# ── Tester-Specific (fixed during automation) ─────────────
|
|
InpTesterMode:
|
|
type: fixed
|
|
default: 1
|
|
category: tester
|
|
description: "Must be 1 during automated backtesting"
|
|
|
|
InpTesterInitDeposit:
|
|
type: fixed
|
|
default: 10000.0
|
|
category: tester
|
|
|
|
InpTesterSpreadPts:
|
|
type: int
|
|
min: 10
|
|
max: 50
|
|
step: 5
|
|
default: 20
|
|
category: tester
|
|
description: "Spread in points used in tester (20 pts = 2.0 pips for XAUUSD)"
|
|
|
|
InpShowPanel:
|
|
type: fixed
|
|
default: 0 # force off during automation (no GUI needed)
|
|
category: tester
|
|
|
|
# ── Parameter categories (for mutation engine grouping) ──────
|
|
categories:
|
|
mode: [InpBotMode]
|
|
risk: [InpRiskType, InpFixedLot, InpRiskPercent, InpMaxDailyLossPct, InpMaxTradesPerDay, InpMaxOpenTrades, InpAllowMultiple]
|
|
sl: [InpSLType, InpSLBuffer, InpFixedSLPips, InpMaxSLPips, InpUseFractalSL, InpSLBufferMode]
|
|
tp: [InpTPType, InpRRRatio, InpFixedTPPips, InpUseFractalFilter]
|
|
exit_trail: [InpUseTrailing, InpTrailStartPips, InpTrailStepPips]
|
|
exit_be: [InpUseBreakeven, InpBEPips, InpBEBufferPips]
|
|
filter_session: [InpUseSession, InpSessionStart, InpSessionEnd]
|
|
filter_ema: [InpUseEMA, InpEMAPeriod, InpRequireEMASlope, InpEMASlopeBars]
|
|
filter_spread: [InpUseSpreadGuard, InpMaxSpreadPips]
|
|
filter_rr: [InpUseMinRR, InpMinRRRatio]
|
|
filter_score: [InpUseScoreGate, InpMinScore]
|
|
entry: [InpEntryMode]
|
|
atr: [InpATRPeriod, InpATRMultiplier]
|
|
tester: [InpTesterMode, InpTesterInitDeposit, InpTesterSpreadPts, InpShowPanel]
|