Files
zhutoutoutousan 605faf5310 Prepare source-only public release for develop.
Add cluster audit pipeline, united EA updates, brochure generators, and publication hygiene (gitignore, MT5 path desensitization, pre-upload scan). Remove tracked reports, models, and binary artifacts from the repo.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 15:03:43 +02:00

143 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SimpleEMA — 练手实验室
双 EMA 金叉/死叉策略,默认货币对 **EURUSD H1**(流动性好、点差低,适合入门优化)。
## 策略逻辑
| 项目 | 规则 |
|------|------|
| 入场 | 快 EMA 上穿/下穿慢 EMA(收盘 K 确认) |
| 出场 | 反向交叉 / ATR 或固定 SL·TP / 最大持仓 K 线数 / 可选 trailing |
| 过滤 | 最大点差、最小 EMA 间距 |
## 文件
| 文件 | 用途 |
|------|------|
| `main.mq5` | MT5 EAStrategy Tester / 实盘) |
| `SimpleEMA_EURUSD.set` | 默认参数 |
| `SimpleEMA_Genetic_Optimization.set` | 遗传优化范围 |
| `run_mt5_tester.py` | **调 MT5 原生 Strategy Tester**(你要的实时回测) |
| `run_backtest.py` | Python 快速回测(MT5 拉历史 K 线) |
| `run_optimize.py` | Python 随机搜索优化 |
| `trades.csv` | 逐单复盘(Python 回测产出) |
## 1. MT5 原生回测(推荐)
先确保 MT5 已登录,EURUSD H1 历史数据已下载。
```powershell
cd lab\EAs\SimpleEMA
# 单次回测(自动编译 EA → 启动 Strategy Tester → 生成 HTML 报告)
python run_mt5_tester.py backtest
# 可视化模式:看 K 线一根根跑(实时感最强)
python run_mt5_tester.py backtest --visual
# 遗传优化(Optimization=2,用 SimpleEMA_Genetic_Optimization.set
python run_mt5_tester.py optimize
```
回测完成后:
- HTML 报告路径会打印在终端(通常在 `%APPDATA%\MetaQuotes\Terminal\...\SimpleEMA_EURUSD_backtest.htm`
- 在 MT5 **结果 → 报告** 里可逐单查看开平仓、滑点、盈亏
- 优化结果在 **Optimization Results** 标签页,右键可 **Set as Input**
## 2. Python 快速迭代(改逻辑 → 立刻看 trades.csv
```powershell
python run_backtest.py
python run_backtest.py --start 2024-01-01 --fast 10 --slow 30
```
产出:`trades.csv`(每单 side / 开平时间 / 价格 / profit / exit_reason)、`report.png`
## 4. 多品种组合(20 品种)
### 分品种调参 + 组合(推荐)
```powershell
# 每个品种独立随机搜索,自动剔除 net<=0 / PF<1 的品种,再跑组合回测
python run_optimize_portfolio.py --trials 350
# 仅用已有 portfolio_params.json 重跑组合
python run_optimize_portfolio.py --skip-opt
# 验证组合
python run_portfolio_v5.py
```
产出:`portfolio_params.json`(每品种最优参数 + enabled 标记)、`portfolio_opt_trials/*.csv``best_run/portfolio_trades.csv`
### 统一参数(对比用)
```powershell
python run_portfolio_v5.py --shared-params best_params.json
```
| 文件 | 用途 |
|------|------|
| `portfolio_symbols.json` | 20 品种列表 + 各品种最大点差 |
| `portfolio_curated.json` | 全扫描后 net>0 的子集 |
| `run_portfolio_v5.py` | 组合回测,产出 `portfolio_report.json` |
| `main_portfolio.mq5` | MT5 多品种 EA(挂任意图表,监控 SymbolList 内全部品种) |
MT5 组合 EA
```powershell
python run_mt5_tester.py backtest --ea main_portfolio.mq5 --period M15 --from 2020.01.01 --to 2026.01.01
```
## 3. Python 随机搜索优化
```powershell
python run_optimize.py --trials 500
```
产出:`optimize_trials.csv``best_params.json``best_run/trades.csv`
`best_params.json` 里的值填回 `.set``main.mq5` input,再用 `run_mt5_tester.py optimize` 做 MT5 遗传精调。
## 5. MT5 回测(唯一准绳)
**2598 笔是 Python 组合模拟;`SimpleEMA_report.pdf` 只是单品种 EURUSD~115 笔)。**
组合请以 MT5 为准:
```powershell
# 12 个启用品种各跑一遍 MT5 Strategy Tester(每品种独立 .set
python run_mt5_portfolio.py --from 2020.01.01 --to 2026.01.01
# 从 MT5 HTML 报告汇总生成正式报告
python generate_mt5_portfolio_report.py
```
产出:
- `best_run/mt5_results.json` — MT5 汇总(交易数、净利)
- `best_run/mt5_reports/*.htm` — 各品种 MT5 原生报告(逐单复盘)
- `best_run/MT5_PORTFOLIO_REPORT.md` — 组合说明
- `best_run/SimpleEMA_report.png` — 由 MT5 数据生成的组合图
Python `portfolio_trades.csv` / `run_portfolio_v5.py` 仅用于快速迭代参数,**不作最终成绩**。
```
改 main.mq5 逻辑
python run_backtest.py ← 秒级验证 + trades.csv 逐单复盘
python run_optimize.py ← 粗搜参数空间
python run_mt5_tester.py optimize ← MT5 遗传优化确认
python run_mt5_tester.py backtest --visual ← 目视检查
```
## 手动在 MT5 里操作
1.`main.mq5` 复制到 `MQL5/Experts/` 或用 MetaEditor 打开编译
2. Strategy TesterExpert = `SimpleEMA`Symbol = `EURUSD`Period = `H1`
3. Inputs → Load → `SimpleEMA_EURUSD.set`
4. 优化时 Load → `SimpleEMA_Genetic_Optimization.set`Optimization = **Genetic**