Files
mt_mt5_backertest/优化方案.md
T
2026-07-06 03:32:12 +08:00

52 KiB
Raw Blame History

MT5 EA 参数批量优化系统 — 最终项目计划


一、项目概述

1.1 项目目标

构建一套 Python + MT5 策略测试器 的 EA 参数批量优化系统,支持:

  • 多 EA 管理:不同 EA 有完全不同的参数配置,互不影响
  • 智能搜索:根据参数数量和组合数自动选择最优搜索策略
  • 约束过滤:处理参数间的互斥、依赖、条件关系
  • 批量执行:通过 PowerShell 脚本批量驱动 MT5 执行测试
  • 结果汇总:自动解析 HTML/XML 报告,输出最优参数推荐
  • 过拟合防护Walk-Forward 验证 + 统计显著性检验

1.2 核心挑战与解决方案

┌─────────────────────────────────────────┬─────────────────────────────────────────┐
│ 挑战                                    │ 解决方案                                  │
├─────────────────────────────────────────┼─────────────────────────────────────────┤
│ 不同 EA 参数完全不同                    │ JSON 配置文件,每个 EA 独立一套参数定义      │
│ 参数多 + 范围大 = 组合爆炸               │ 自动策略选择:Grid→拉丁超立方→遗传算法      │
│ 参数间存在互斥/依赖关系                 │ ParameterConstraintEngine 约束引擎         │
│ 暴力遍历不现实                          │ 遗传算法 (GA) 智能搜索                     │
│ 不同 EA 需要不同测试配置                │ per-EA INI 模板 + test_config 字段         │
│ MT5 终端必须等待测试完成才能启动下一个   │ PowerShell Start-Process -Wait 机制        │
│ 优化结果过拟合严重                      │ Walk-Forward 验证 + 样本外测试             │
│ 测试结果格式不统一                      │ 统一 HTML/XML 解析器                       │
│ 参数映射与测试结果需要关联               │ SET 文件 ID 追踪机制                       │
└─────────────────────────────────────────┴─────────────────────────────────────────┘

二、系统架构

2.1 整体架构图

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                              EA 批量优化管理系统                                     │
│                                                                                    │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                            配置管理层 (configs/)                             │ │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐     │ │
│  │  │ MA_Cross.json│  │ RSI_EA.json  │  │ Grid_EA.json │  │ Breakout.json│ ... │ │
│  │  │ 6个参数       │  │ 12个参数      │  │ 25个参数      │  │ 8个参数       │     │ │
│  │  │ Grid搜索     │  │ 遗传算法     │  │ 遗传+降维     │  │ 拉丁超立方    │     │ │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘     │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                          │                                          │
│                                          ▼                                          │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                          核心引擎层 (ea_batch_optimizer.py)                   │ │
│  │                                                                              │ │
│  │  ┌─────────────┐   ┌─────────────┐   ┌─────────────┐   ┌─────────────┐    │ │
│  │  │ 配置加载器  │   │ 约束引擎    │   │ 搜索策略    │   │ 任务调度器  │    │ │
│  │  │             │   │             │   │             │   │             │    │ │
│  │  │ 解析JSON    │   │ 互斥关系   │   │ Grid       │   │ 批量排队   │    │ │
│  │  │ 验证参数    │   │ 依赖条件   │   │ Random     │   │ 进程管理   │    │ │
│  │  │ 补全默认值  │   │ 条件过滤   │   │ LatinHypercube│ │ 超时控制   │    │ │
│  │  │             │   │             │   │ Genetic    │   │             │    │ │
│  │  │             │   │             │   │ (自适应)   │   │             │    │ │
│  │  └─────────────┘   └─────────────┘   └─────────────┘   └─────────────┘    │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                          │                                          │
│                    ┌─────────────────────┼─────────────────────┐                 │
│                    ▼                     ▼                     ▼                   │
│  ┌────────────────────────┐  ┌────────────────────────┐  ┌────────────────────┐ │
│  │     SET 文件生成        │  │    INI 配置生成        │  │  PowerShell 脚本    │ │
│  │                        │  │                        │  │                    │ │
│  │  params_00001.set     │  │  EA_Name.ini           │  │  run_EAName.ps1     │ │
│  │  params_00002.set     │  │  (per-EA)             │  │  (per-EA)          │ │
│  │  ...                  │  │                        │  │                    │ │
│  │  params_10000.set    │  │  Expert=...           │  │  Start-Process     │ │
│  │                        │  │  Symbol=...           │  │  -Wait             │ │
│  │  → set_files/         │  │  Period=...           │  │  → MT5 Terminal    │ │
│  └────────────────────────┘  └────────────────────────┘  └────────────────────┘ │
│                                          │                                          │
│                                          ▼                                          │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                         MT5 策略测试器批量执行                                  │ │
│  │                                                                              │ │
│  │   terminal64.exe ──▶ 测试1 ──▶ 报告1 ─┐                                      │ │
│  │   terminal64.exe ──▶ 测试2 ──▶ 报告2 ─┼──▶ reports/                         │ │
│  │   terminal64.exe ──▶ 测试3 ──▶ 报告3 ─┤                                      │ │
│  │   ...                                │                                      │ │
│  │   terminal64.exe ──▶ 测试N ──▶ 报告N ─┘                                      │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                          │                                          │
│                                          ▼                                          │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                           结果分析层                                          │ │
│  │                                                                              │ │
│  │  ┌─────────────┐   ┌─────────────┐   ┌─────────────┐   ┌─────────────┐      │ │
│  │  │ HTML解析器  │   │ XML解析器   │   │ 结果合并器  │   │ 最优推荐器  │      │ │
│  │  │             │   │             │   │             │   │             │      │ │
│  │  │ BeautifulSoup│ │ xml.etree  │   │ param+result│   │ 多维度排序  │      │ │
│  │  │ 提取统计指标│   │ 解析标准格式│   │ 按set_id关联│   │ 过滤条件   │      │ │
│  │  │             │   │             │   │             │   │ Walk-Forward│      │ │
│  │  └─────────────┘   └─────────────┘   └─────────────┘   └─────────────┘      │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                          │                                          │
│                                          ▼                                          │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                           输出层                                             │ │
│  │                                                                              │ │
│  │  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────────────┐  │ │
│  │  │ full_results.csv  │  │ optimization_report.txt│ │ best_params.json    │  │ │
│  │  │ (完整测试记录)    │  │ (分析报告)        │  │ (最优参数)              │  │ │
│  │  └──────────────────┘  └──────────────────┘  └──────────────────────────┘  │ │
│  │                                                                              │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                    │
└─────────────────────────────────────────────────────────────────────────────────────┘

2.2 目录结构

MT5Optimizer/
│
├── ea_batch_optimizer.py          # ★ 主程序:多EA统一管理器
├── ea_config_parser.py            # ★ 配置解析:EAConfig + ParameterDef
├── parameter_constraint.py       # ★ 约束引擎:互斥/依赖/条件过滤
├── smart_search.py               # ★ 搜索策略:Grid/Random/Latin/GA
├── analyze_results.py            # ★ 结果解析:HTML/XML → DataFrame
│
├── configs/                       # ★ EA 配置文件目录
│   ├── MA_Cross.json             # EA1: 双MA交叉 (6参数, Grid)
│   ├── RSI_EA.json               # EA2: RSI策略 (12参数, 遗传算法)
│   ├── Grid_EA.json              # EA3: 网格EA (25参数, 遗传+降维)
│   └── Breakout.json             # EA4: 突破EA (8参数, 拉丁超立方)
│
├── set_files/                     # 生成的 .set 参数文件
│   ├── MA_Cross/                 #   params_00001.set ~ params_NNNNN.set
│   ├── RSI_EA/
│   ├── Grid_EA/
│   └── Breakout/
│
├── reports/                      # MT5 输出的测试报告
│   ├── MA_Cross/                 #   *.html
│   ├── RSI_EA/
│   ├── Grid_EA/
│   └── Breakout/
│
├── results/                      # 分析结果输出
│   ├── MA_Cross_param_mapping.csv
│   ├── MA_Cross_optimization_results.csv
│   ├── MA_Cross_optimization_report.txt
│   ├── all_ea_optimization_results.csv    # ★ 全EA汇总
│   ├── all_ea_optimization_report.txt    # ★ 全EA分析报告
│   └── best_params.json
│
├── scripts/                       # PowerShell 执行脚本 (自动生成)
│   ├── run_MA_Cross.ps1
│   ├── run_RSI_EA.ps1
│   ├── run_Grid_EA.ps1
│   └── run_Breakout.ps1
│
├── logs/                          # 运行日志
│   └── batch_log.txt
│
└── README.md

三、模块规格

3.1 EA 配置模型 (ea_config_parser.py)

每个 EA 对应一个 JSON 配置文件,字段说明:

{
    "ea_name": "MA Cross Scalper",
    "ea_path": "Experts\\MA_Cross_Scalper.ex5",
    "description": "双MA交叉头皮策略",

    "parameters": {
        "FastMA_Period": {
            "type": "int",           // int | double | bool | enum | string
            "default": 14,
            "min": 3,
            "max": 100,
            "step": 1,
            "description": "快速MA周期",
            "condition": "SlowMA_Period>FastMA_Period"   // 可选:参数约束
        },
        "RiskPercent": {
            "type": "double",
            "default": 1.0,
            "min": 0.1,
            "max": 5.0,
            "step": 0.1,
            "precision": 1
        }
    },

    "search_strategy": "auto",
    // "auto"     - 根据组合数自动选择
    // "grid"     - 网格搜索 (<1万组合)
    // "latin"    - 拉丁超立方 (<50万组合)
    // "genetic"  - 遗传算法 (>10万组合)

    "optimization_criterion": "custom",
    // "balance_max" | "profit_factor" | "custom" | "sharpe_ratio" ...

    "test_config": {
        "symbol": "EURUSD",
        "period": "H1",
        "from_date": "2023.01.01",
        "to_date": "2024.01.01",
        "model": 1,              // 1=1分钟OHLC, 4=真实tick
        "deposit": 10000,
        "leverage": "1:100"
    },

    "walk_forward": {
        "enabled": true,
        "train_test_ratio": 0.75  // 前75%训练,后25%验证
    }
}

ParameterDef 数据类

参数名 ──▶ ParamType ──▶ expand_values() ──▶ 值列表
         │
         ├── INT (int)
         ├── DOUBLE (float)
         ├── BOOL (true/false)
         ├── ENUM (枚举选项列表)
         └── STRING (字符串)

EAConfig {
    ea_name: str
    ea_path: str
    parameters: Dict[str, ParameterDef]
    search_strategy: str
    criterion: str
    test_config: Dict
    walk_forward: Dict

    get_total_combinations() → int
    estimate_search_time() → str
    is_complex() → bool (>6参数 或 >100万组合)
}

3.2 约束引擎 (parameter_constraint.py)

输入: List[Dict] 参数组合
        │
        ▼
┌────────────────────────────────────────┐
│      ParameterConstraintEngine          │
│                                        │
│  ┌──────────────┐   ┌──────────────┐   │
│  │ 互斥约束     │   │ 依赖条件     │   │
│  │ A↑B↓        │   │ C==true时    │   │
│  │             │   │ D才生效      │   │
│  ├──────────────┤   ├──────────────┤   │
│  │ 范围约束     │   │ 逻辑约束     │   │
│  │ RSI: 0-100  │   │ SL<TP       │   │
│  │ MA>0        │   │ MA_fast<MA_  │   │
│  │             │   │ slow        │   │
│  └──────────────┘   └──────────────┘   │
│           │                               │
│           ▼                               │
│  filter_valid_combinations()             │
│           │                               │
│           ▼                               │
│  输出: 过滤后的有效组合列表               │
└────────────────────────────────────────┘

3.3 搜索策略 (smart_search.py)

策略选择逻辑:

total_combos ≤ 10,000        →  Grid Search (暴力遍历)
total_combos ≤ 500,000       →  Latin Hypercube (均匀采样)
total_combos > 500,000       →  Genetic Algorithm (智能搜索)

┌──────────────────┐
│ Grid Search       │  遍历所有组合 → 全局最优
│ Random Search     │  随机采样 → 快速
│ Latin Hypercube   │  分层均匀 → 效率高
│ Genetic Algorithm │  选择+交叉+变异 → 参数爆炸克星
└──────────────────┘

遗传算法核心参数:
  - 种群大小: 50
  - 进化代数: 30
  - 交叉率: 0.8
  - 变异率: 0.15
  - 精英保留: 5

3.4 结果解析 (analyze_results.py)

MT5 HTML 报告 ──▶ BeautifulSoup ──▶ 正则提取 ──▶ 统计指标
                   │
                   ├── Net Profit
                   ├── Gross Profit
                   ├── Gross Loss
                   ├── Max Drawdown
                   ├── Profit Factor
                   ├── Sharpe Ratio
                   ├── Total Trades
                   ├── Win Rate
                   └── Custom Criterion (OnTester)

输出:
  DataFrame {
    set_id, ea_name,
    params (各参数名),
    total_profit, profit_factor, max_drawdown,
    total_trades, sharpe_ratio, win_rate,
    custom_criterion, html_report
  }

四、PowerShell 执行流程

┌─────────────────────────────────────────────────────────────────────────────────┐
│                            PowerShell 批量执行流程                                 │
│                                                                                  │
│  ┌─────────────┐                                                                │
│  │ run_tests.ps1│  ← ea_batch_optimizer.py 自动生成                              │
│  └──────┬──────┘                                                                │
│         │                                                                       │
│         ├─▶ 读取 set_files/ 目录下的所有 params_*.set                            │
│         │                                                                       │
│         ├─▶ 循环读取 INI 配置模板                                                 │
│         │                                                                       │
│         ├─▶ 修改 ExpertParameters= 指向当前 SET 文件                              │
│         │     修改 Report= 唯一报告名                                             │
│         │                                                                       │
│         ├─▶ 启动 MT5                                                              │
│         │     Start-Process                                                      │
│         │       -FilePath terminal64.exe                                         │
│         │       -ArgumentList "/portable /config:INI路径"                       │
│         │       -Wait           ← 关键: 等待当前测试完成再启动下一个               │
│         │       -WindowStyle Normal                                             │
│         │                                                                       │
│         ├─▶ MT5 执行回测 → 输出 HTML 报告到 reports/                              │
│         │                                                                       │
│         ├─▶ MT5 关闭 (ShutdownTerminal=1)                                        │
│         │                                                                       │
│         ├─▶ 等待 3 秒确保完全释放                                                 │
│         │                                                                       │
│         └─▶ 下一轮循环 ──────────────────────────────────────────────────────▶    │
│                                                                                  │
│  关键机制:                                                                        │
│  1. Start-Process -Wait  确保顺序执行, 不丢任务                                   │
│  2. 每次循环动态修改 INI, 不需要多个 INI 文件                                      │
│  3. 唯一报告名 (含时间戳/set_id) 避免覆盖                                          │
│  4. 日志记录每个任务的开始/结束/耗时                                               │
│  5. 进度报告:每10个输出进度 + ETA                                                   │
└─────────────────────────────────────────────────────────────────────────────────┘

五、实施计划

5.1 分阶段实施

┌─────────────────────────────────────────────────────────────────────────────────────┐
│                           项目实施计划 (共5个阶段)                                    │
│                                                                                    │
│  Phase 1 ────────────────────────────────────────────────────────────────────────▶    │
│  【基础框架搭建】  预计 1 天                                                          │
│                                                                                    │
│  □ 创建目录结构                                                                  │
│  □ 实现 ea_config_parser.py                                                        │
│    - ParameterDef 数据类                                                          │
│    - EAConfig 数据类                                                               │
│    - parse_set_file() 解析现有SET                                                  │
│    - load_ea_config() 加载JSON配置                                                 │
│    - load_all_ea_configs() 批量加载                                                │
│  □ 实现 parameter_constraint.py                                                   │
│    - ConstraintEngine 类                                                         │
│    - add_constraint() 添加约束                                                   │
│    - filter_valid_combinations() 过滤                                             │
│  □ 测试: 加载一个示例 EA 配置文件                                                  │
│                                                                                    │
│  Phase 2 ────────────────────────────────────────────────────────────────────────▶    │
│  【搜索策略模块】  预计 1 天                                                          │
│                                                                                    │
│  □ 实现 smart_search.py                                                           │
│    - generate_param_combinations() 自适应策略选择                                   │
│    - _grid_search() 网格搜索                                                      │
│    - _random_search() 随机搜索                                                    │
│    - _latin_hypercube() 拉丁超立方采样                                             │
│    - GeneticOptimizer 遗传算法类                                                 │
│  □ 实现 ea_batch_optimizer.py 核心类                                              │
│    - EABatchOptimizer.__init__()                                                 │
│    - generate_set_files_for_ea()                                                   │
│    - generate_ini_for_ea()                                                         │
│    - build_powershell_script()                                                     │
│  □ 测试: 为一个EA生成1000个SET文件                                                │
│                                                                                    │
│  Phase 3 ────────────────────────────────────────────────────────────────────────▶    │
│  【执行层 + 结果解析】  预计 2 天                                                    │
│                                                                                    │
│  □ 实现 analyze_results.py                                                        │
│    - parse_mt5_html_report()                                                      │
│    - parse_mt5_xml_report()                                                       │
│    - parse_all_reports() 批量解析                                                  │
│    - merge_parameters_and_results() 合并                                           │
│    - find_optimal_params() 最优筛选                                               │
│    - generate_report() 报告生成                                                    │
│  □ PowerShell 脚本生成器                                                          │
│  □ 端到端测试: 单EA + 50个参数组合全流程                                           │
│  □ 测试报告正确性验证                                                             │
│                                                                                    │
│  Phase 4 ────────────────────────────────────────────────────────────────────────▶    │
│  【多EA管理 + 过拟合防护】  预计 2 天                                                │
│                                                                                    │
│  □ 多EA并行优化                                                                  │
│    - parallel_optimize() 多进程                                                    │
│    - 任务队列管理                                                                 │
│  □ Walk-Forward 验证                                                              │
│    - walk_forward_validate()                                                       │
│    - 过拟合检测指标                                                               │
│  □ 高级约束: 参数降维、相邻参数相关性分析                                          │
│  □ 全EA汇总分析                                                                  │
│    - cross_ea_ranking() 跨EA横向比较                                              │
│    - 综合最优推荐                                                                 │
│  □ 异常处理: MT5崩溃、超时、报告缺失                                              │
│                                                                                    │
│  Phase 5 ────────────────────────────────────────────────────────────────────────▶    │
│  【优化与交付】  预计 1 天                                                          │
│                                                                                    │
│  □ 命令行参数完善 (--ea, --phase, --parallel, --strategy)                       │
│  □ 日志系统完善                                                                  │
│  □ 配置示例: 为4个不同复杂度的EA创建配置示例                                       │
│  □ 文档: README + 使用手册                                                       │
│  □ 一键启动脚本                                                                  │
│                                                                                    │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │  总工期: 7 个工作日                                                           │ │
│  │  Phase1(1d) + Phase2(1d) + Phase3(2d) + Phase4(2d) + Phase5(1d)              │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────────┘

5.2 任务清单 (Phase 1 详细)

Phase 1: 基础框架搭建
──────────────────────────────────────────────────────

[P1-01] 创建目录结构
        创建以下目录:
        configs/, set_files/, reports/, results/, scripts/, logs/

[P1-02] 实现 ParameterDef 数据类
        ea_config_parser.py
        字段: name, param_type, default, min_value, max_value,
              step, enum_options, description, precision
        方法: expand_values() → List[Any]
              判断类型: INT/DOUBLE/BOOL/ENUM/STRING

[P1-03] 实现 EAConfig 数据类
        ea_config_parser.py
        字段: ea_name, ea_path, parameters (Dict[str, ParameterDef]),
              search_strategy, criterion, test_config, description
        方法: get_total_combinations() → int
              estimate_search_time() → str
              is_complex() → bool
              __repr__()

[P1-04] 实现 parse_set_file()
        解析 MT5 .set 文件
        格式: VarName <init> <current> <min> <step> <type> [comment]
        返回: List[ParameterDef]

[P1-05] 实现 load_ea_config()
        读取 JSON 配置文件
        转换为 ParameterDef + EAConfig 对象
        补全默认值

[P1-06] 实现 load_all_ea_configs()
        遍历 configs/ 目录下所有 .json
        加载并验证每个 EA 配置

[P1-07] 创建示例 EA 配置文件
        configs/MA_Cross.json (6参数, 简单EA)
        configs/RSI_EA.json (12参数, 中等EA)

[P1-08] 实现 ParameterConstraintEngine
        parameter_constraint.py
        add_constraint(name, condition, error_message)
        add_condition_from_config(param_name, condition_str)
        filter_valid_combinations(List[Dict]) → List[Dict]

[P1-09] 测试 Phase 1
        验证: 加载配置 → 展开参数 → 过滤约束 → 输出统计
        输出: 参数数量、组合数、估算时间

Phase 2: 搜索策略模块
──────────────────────────────────────────────────────

[P2-01] 实现 generate_param_combinations()
        smart_search.py
        根据 total_combos 自动选择策略
        参数: ea_config, strategy="auto", max_samples=2000
        返回: List[Dict] 参数组合

[P2-02] 实现 _grid_search()
        遍历所有组合 (适合 <1万组合)

[P2-03] 实现 _random_search()
        随机采样 (适合快速探索)

[P2-04] 实现 _latin_hypercube()
        拉丁超立方采样 (适合 1万~50万组合)

[P2-05] 实现 GeneticOptimizer 类
        _create_individual()
        _mutate()
        _crossover()
        _tournament_select()
        run() → List[GAIndividual]

[P2-06] 实现 EABatchOptimizer.__init__ + generate_set_files_for_ea()
        核心类初始化
        生成 SET 文件到 set_files/{EA_NAME}/

[P2-07] 实现 generate_ini_for_ea()
        生成 per-EA INI 配置文件

[P2-08] 实现 build_powershell_script()
        动态生成 PowerShell 批量执行脚本

[P2-09] 测试 Phase 2
        为 MA_Cross.json 生成 500 个 SET 文件
        验证文件内容正确

Phase 3: 执行层 + 结果解析
──────────────────────────────────────────────────────

[P3-01] 实现 parse_mt5_html_report()
        analyze_results.py
        使用 BeautifulSoup + 正则
        提取: profit, drawdown, trades, pf, sharpe, win_rate

[P3-02] 实现 parse_all_reports()
        遍历 reports/ 目录
        调用 HTML/XML 解析器

[P3-03] 实现 merge_parameters_and_results()
        按 set_id 关联参数与测试结果

[P3-04] 实现 find_optimal_params()
        多维度排序
        过滤条件: min_trades, min_pf, max_dd

[P3-05] 实现 generate_report()
        输出文本分析报告

[P3-06] 实现 EABatchOptimizer.run_optimization_for_ea()
        执行 PowerShell 脚本
        等待完成

[P3-07] 实现 EABatchOptimizer.analyze_all_results()
        解析所有报告 → 合并 → 排序 → 输出

[P3-08] 端到端测试 (Phase 3)
        EA: MA_Cross, 组合数: 50
        全流程: SET生成 → PS脚本 → MT5测试 → 报告解析 → 结果输出

Phase 4: 多EA管理 + 过拟合防护
──────────────────────────────────────────────────────

[P4-01] 实现 parallel_optimize()
        多进程并行优化多个 EA

[P4-02] 实现 walk_forward_validate()
        In-Sample + Out-of-Sample 验证
        过拟合检测

[P4-03] 参数降维模块
        相关性分析
        PCA/因子分析 (可选)

[P4-04] 实现 cross_ea_ranking()
        跨 EA 横向比较
        综合最优推荐

[P4-05] 异常处理
        MT5 超时
        报告缺失
        进程管理

[P4-06] 创建复杂 EA 配置示例
        configs/Grid_EA.json (25参数)

[P4-07] 全EA集成测试

Phase 5: 优化与交付
──────────────────────────────────────────────────────

[P5-01] 命令行参数完善
        --phase, --ea, --strategy, --parallel, --max-samples
        --base-dir, --configs-dir

[P5-02] 日志系统
        运行日志 → logs/
        错误追踪

[P5-03] 创建 README.md

[P5-04] 创建 4 个不同复杂度的配置示例
        configs/MA_Cross.json   (6参数, Grid)
        configs/RSI_EA.json    (12参数, 遗传)
        configs/Grid_EA.json   (25参数, 遗传)
        configs/Breakout.json  (8参数, 拉丁超立方)

[P5-05] 一键启动脚本 main.py

[P5-06] 最终验收测试

六、使用工作流

6.1 首次使用流程

# 1. 目录结构 (由 Phase 1 自动创建)
mkdir -p MT5Optimizer/{configs,set_files,reports,results,scripts,logs}

# 2. 安装依赖
pip install MetaTrader5 pandas numpy beautifulsoup4

# 3. 为你的 EA 创建配置文件 (参考 configs/ 示例)
# 编辑 configs/MY_EA.json

# 4. 分步执行
# 步骤1: 生成 SET 文件
python ea_batch_optimizer.py --phase 1

# 步骤2: 生成 INI 配置
python ea_batch_optimizer.py --phase 2

# 步骤3: 运行批量测试
python ea_batch_optimizer.py --phase 3 --ea "MY_EA"

# 步骤4: 解析结果
python ea_batch_optimizer.py --phase 4

# 5. 查看结果
cat results/optimization_report.txt

6.2 完整一键执行

# 单 EA 完整流程
python ea_batch_optimizer.py --phase 5 --ea "MA_Cross"

# 多 EA 并行
python ea_batch_optimizer.py --phase 3 --parallel

# 指定搜索策略
python ea_batch_optimizer.py --phase 1 --strategy genetic

6.3 分步执行详解

┌──────────────────────────────────────────────────────────────────────────────┐
│ --phase 1: 生成 SET 文件                                                  │
│   输入: configs/*.json                                                   │
│   输出: set_files/{EA_NAME}/params_*.set                                  │
│         results/{EA_NAME}_param_mapping.csv                               │
│                                                                          │
│ --phase 2: 生成 INI 配置                                                  │
│   输入: configs/*.json                                                   │
│   输出: configs/{EA_NAME}.ini                                             │
│                                                                          │
│ --phase 3: 运行 MT5 批量测试                                               │
│   输入: set_files/*.set + configs/*.ini                                   │
│   执行: PowerShell 脚本                                                   │
│   输出: reports/{EA_NAME}/*.html                                         │
│                                                                          │
│ --phase 4: 解析并分析结果                                                 │
│   输入: reports/*.html                                                   │
│   输出: results/full_optimization_results.csv                            │
│         results/optimization_report.txt                                  │
│         results/best_params.json                                         │
│                                                                          │
│ --phase 5: 全部执行 (1+2+4)                                              │
│                                                                          │
│ --ea NAME: 只处理指定 EA                                                  │
│ --parallel: 多 EA 并行 (Phase 3)                                         │
│ --strategy: 强制指定搜索策略 (grid/random/latin/genetic)                   │
└──────────────────────────────────────────────────────────────────────────┘

七、搜索策略选择决策树

参数组合数
 │
 ▼
 ├── ≤ 10,000 ────────────────────▶ Grid Search
 │   (暴力遍历, 全局最优)
 │
 ├── 10,001 ~ 100,000 ──────────▶ Latin Hypercube
 │   (均匀采样, 效率高)
 │
 ├── 100,001 ~ 500,000 ─────────▶ Genetic Algorithm
 │   (智能搜索, 参数爆炸克星)
 │
 └── ≥ 500,001 ─────────────────▶ Genetic Algorithm + 约束过滤
     (必须用 GA, 先过滤约束减少搜索空间)

八、EA 配置示例

// configs/MA_Cross.json
{
    "ea_name": "MA Cross Scalper",
    "ea_path": "Experts\\MA_Cross.ex5",
    "description": "双MA交叉头皮策略, 6个参数",
    
    "parameters": {
        "FastMA_Period":  {"type": "int", "default": 14, "min": 5,  "max": 30,  "step": 1},
        "SlowMA_Period":  {"type": "int", "default": 50, "min": 20, "max": 100, "step": 5,
                            "condition": ">FastMA_Period"},
        "StopLoss":       {"type": "int", "default": 50, "min": 10, "max": 200, "step": 10},
        "TakeProfit":     {"type": "int", "default": 100,"min": 30, "max": 300, "step": 10},
        "RiskPercent":    {"type": "double", "default": 1.0, "min": 0.5, "max": 3.0, "step": 0.5,
                            "precision": 1},
        "EnableMM":       {"type": "bool", "default": true}
    },
    
    "search_strategy": "grid",
    "test_config": {
        "symbol": "EURUSD", "period": "H1",
        "from_date": "2023.01.01", "to_date": "2024.01.01",
        "deposit": 10000
    }
}

8.2 复杂 EA (25参数, Genetic Algorithm)

// configs/Grid_EA.json
{
    "ea_name": "MultiGrid Pro",
    "ea_path": "Experts\\Grid\\MultiGrid.ex5",
    "description": "多周期网格EA, 25个参数, 必须用遗传算法",
    
    "parameters": {
        "GridLevels":      {"type": "int", "default": 5,  "min": 3,  "max": 20, "step": 1},
        "GridSpacing":     {"type": "int", "default": 50, "min": 10, "max": 200,"step": 10},
        "GridSpacingMult": {"type": "double", "default": 1.5, "min": 1.0, "max": 3.0, "step": 0.1, "precision": 1},
        "BaseLotsize":     {"type": "double", "default": 0.1, "min": 0.01, "max": 1.0, "step": 0.01, "precision": 2},
        "MaxOpenLots":     {"type": "double", "default": 5.0, "min": 0.1, "max": 20.0, "step": 0.1, "precision": 1},
        "MaxDrawdown":     {"type": "int", "default": 30, "min": 10, "max": 100, "step": 5},
        "TakeProfitGrid":  {"type": "int", "default": 20, "min": 5, "max": 100, "step": 5},
        "StartHour":       {"type": "int", "default": 0,  "min": 0,  "max": 23, "step": 1},
        "EndHour":         {"type": "int", "default": 23, "min": 0,  "max": 23, "step": 1},
        "TradingDays":     {"type": "enum", "default": "ALL",
                            "options": ["ALL", "MON-FRI", "MON-THU", "FRI-MON"]},
        "MaxSpread":       {"type": "int", "default": 30, "min": 5,  "max": 100, "step": 5},
        "CloseOnOpposite": {"type": "bool", "default": false},
        "HedgeMode":       {"type": "bool", "default": true},
        "Indicator1_Type": {"type": "enum", "default": "RSI",
                            "options": ["RSI", "CCI", "Stochastic", "MACD"]},
        "Indicator1_Period":{"type": "int", "default": 14, "min": 5,  "max": 50,  "step": 1},
        "Indicator1_Level":{"type": "double", "default": 30, "min": 10, "max": 90,  "step": 5, "precision": 0},
        "Indicator2_Type": {"type": "enum", "default": "Bollinger",
                            "options": ["Bollinger", "ATR", "STDDEV", "None"]},
        "Indicator2_Period":{"type": "int", "default": 20, "min": 10, "max": 100, "step": 5},
        "Indicator2_Dev":  {"type": "double", "default": 2.0, "min": 1.0, "max": 5.0, "step": 0.5, "precision": 1},
        "NewsFilter":      {"type": "bool", "default": true},
        "NewsImpact":      {"type": "enum", "default": "HIGH",
                            "options": ["NONE", "LOW", "HIGH", "ALL"]},
        "MagicNumber":     {"type": "int", "default": 123456, "min": 100000, "max": 999999, "step": 1},
        "Slippage":        {"type": "int", "default": 30, "min": 10, "max": 100, "step": 5},
        "MaxTrades":       {"type": "int", "default": 10, "min": 1, "max": 50, "step": 1},
        "RecoveryMode":    {"type": "bool", "default": false},
        "RecoveryMult":    {"type": "double", "default": 1.5, "min": 1.0, "max": 3.0, "step": 0.1, "precision": 1},
        "TrailStop":       {"type": "bool", "default": true},
        "TrailStep":       {"type": "int", "default": 10, "min": 5, "max": 50, "step": 5}
    },
    
    "search_strategy": "genetic",
    "optimization_criterion": "custom",
    
    "test_config": {
        "symbol": "EURUSD", "period": "H1",
        "from_date": "2022.01.01", "to_date": "2024.01.01",
        "deposit": 5000, "leverage": "1:100"
    },
    
    "walk_forward": {
        "enabled": true,
        "train_test_ratio": 0.75
    }
}

九、预期交付物

┌──────────────────────────────────────────────────────────────────────────────┐
│                            交付清单                                          │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  1. 源代码文件                                                                │
│     ├── ea_batch_optimizer.py     (主程序)                                   │
│     ├── ea_config_parser.py       (配置解析)                                  │
│     ├── parameter_constraint.py   (约束引擎)                                  │
│     ├── smart_search.py           (搜索策略)                                  │
│     └── analyze_results.py        (结果解析)                                  │
│                                                                              │
│  2. EA 配置示例 (4个不同复杂度)                                               │
│     ├── configs/MA_Cross.json     (6参数, Grid)                               │
│     ├── configs/RSI_EA.json       (12参数, 遗传)                              │
│     ├── configs/Grid_EA.json     (25参数, 遗传)                              │
│     └── configs/Breakout.json     (8参数, 拉丁超立方)                         │
│                                                                              │
│  3. 文档                                                                     │
│     ├── README.md              (使用说明)                                    │
│     └── 项目计划.md             (本计划)                                      │
│                                                                              │
│  4. 一键启动脚本                                                              │
│     └── main.py                                                              │
│                                                                              │
│  ┌──────────────────────────────────────────────────────────────────────────┐     │
│  │  系统能力总结:                                                        │     │
│  │                                                                    │     │
│  │  □ 支持 1~25+ 个参数的 EA 优化                                       │     │
│  │  □ 自动选择最优搜索策略 (Grid/Latin/GA)                              │     │
│  │  □ 参数约束过滤 (互斥/依赖/条件)                                     │     │
│  │  □ 多 EA 并行优化                                                   │     │
│  │  □ Walk-Forward 过拟合防护                                          │     │
│  │  □ HTML/XML 报告自动解析                                             │     │
│  │  □ 最优参数多维度排序推荐                                             │     │
│  │  □ 跨 EA 横向比较                                                   │     │
│  └──────────────────────────────────────────────────────────────────┘     │
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘

十、关键设计原则

原则 说明
per-EA 独立配置 每个 EA 有自己的 JSON 配置,参数名/类型/范围完全自定义,互不影响
自适应搜索策略 不需要人工选策略,系统根据参数数量和组合数自动选择最优方案
约束先行 大量参数组合先通过约束引擎过滤,减少无效测试
MT5 兜底 实际回测由 MT5 策略测试器完成,确保与实盘行为完全一致
结果可追溯 每个 SET 文件对应唯一 ID,报告文件名含 ID,全程可关联
Walk-Forward 防过拟合 In-Sample 优化 + Out-of-Sample 验证,只有两步都优秀的参数才推荐
日志完整 每个任务记录开始/结束/耗时/退出码,出问题可追溯