# MetaTrader 5 智能交易系统 (EA套件) 基于Python的MetaTrader 5智能交易系统,通过多策略组合和动态权重管理实现自动化量化交易。 ## 🚀 核心特性 - **多策略组合**: 集成10种量化策略,通过加权投票生成稳健交易信号 - **动态权重管理**: 根据市场状态动态调整策略权重,提升适应性 - **完整风控体系**: 追踪止损、时间退出、资金管理等多层次风险控制 - **遗传算法优化**: 自动寻找最佳策略参数和权重组合 - **多模式运行**: 支持回测、实盘交易、模拟运行三种模式 - **架构重构**: 采用依赖注入设计,提高代码可维护性和扩展性 ## 📁 项目结构 ``` mt5_python_ea_suite/ ├── core/ # 核心组件 │ ├── data_providers.py # 数据提供者(实盘/回测/模拟) │ ├── utils.py # 工具函数 │ └── risk/ # 风险管理模块 │ ├── position_manager.py # 持仓管理器 │ ├── market_state.py # 市场状态分析 │ └── __init__.py ├── execution/ # 执行模块 │ ├── realtime_trader.py # 实时交易器 │ ├── backtest_engine.py # 回测引擎 │ ├── dynamic_weights.py # 动态权重管理 │ └── __init__.py ├── strategies/ # 交易策略 │ ├── ma_cross.py # 均线交叉策略 │ ├── rsi.py # RSI策略 │ ├── bollinger.py # 布林带策略 │ ├── macd.py # MACD策略 │ ├── kdj.py # KDJ策略 │ ├── turtle.py # 海龟交易法则 │ ├── mean_reversion.py # 均值回归策略 │ ├── momentum_breakout.py # 动量突破策略 │ ├── daily_breakout.py # 日内突破策略 │ ├── wave_theory.py # 波浪理论策略 │ └── base_strategy.py # 策略基类 ├── config.py # 配置文件 ├── mt5_constants.py # MT5常量定义 ├── main.py # 主入口(优化器) ├── start_backtest.py # 回测启动脚本 ├── start_realtime.py # 实时交易启动脚本 ├── optimizer.py # 遗传算法优化器 ├── logger.py # 日志系统 └── requirements.txt # 依赖包 ``` ## 🛠️ 安装与配置 ### 环境要求 - Python 3.7+ - MetaTrader 5 终端 - 网络连接 ### 安装步骤 1. **克隆项目** ```bash git clone cd mt5_python_ea_suite ``` 2. **创建虚拟环境** ```bash python -m venv myenv # Windows myenv\Scripts\activate # macOS/Linux source myenv/bin/activate ``` 3. **安装依赖** ```bash pip install -r requirements.txt ``` 4. **配置MT5终端** - 确保MT5终端已登录 - 启用自动交易(点击"自动交易"按钮或按Ctrl+E) - 确保账户允许自动交易 ## 🎯 策略说明 ### 技术指标策略 - **均线交叉 (MACrossStrategy)**: 基于快慢均线交叉的买卖信号,需要 `long_window + 5` 条数据(默认25条) - **相对强弱指数 (RSIStrategy)**: 使用RSI指标判断超买超卖,需要 `period + 10` 条数据(默认24条) - **布林带 (BollingerStrategy)**: 基于价格与布林带的相对位置,需要 `period + 5` 条数据(默认25条) - **MACD策略**: MACD指标的金叉死叉信号,需要 `slow_ema + signal_period + 5` 条数据(默认40条) - **KDJ策略**: KDJ指标的超买超卖信号,需要 `period + 5` 条数据(默认19条) ### 价格行为策略 - **海龟交易法则 (TurtleStrategy)**: 基于价格突破的顺势交易,需要 `period + 2` 条数据(默认22条) - **均值回归 (MeanReversionStrategy)**: 价格偏离均值时的回归交易,需要 `period + 5` 条数据(默认25条) - **动量突破 (MomentumBreakoutStrategy)**: 基于动量指标的突破信号,需要 `period + 2` 条数据(默认22条) - **日内突破 (DailyBreakoutStrategy)**: 基于日内价格区间的突破,需要 `bars_count` 条数据(默认1440条,即1天的1分钟数据) ### 复杂策略 - **波浪理论 (WaveTheoryStrategy)**: 结合EMA、ADX、动量等多指标的趋势分析,需要 `m1_bars_count` 条数据(默认500条) ## 📊 策略数据需求总结 | 策略名称 | 最小数据量 | 默认参数 | 主要用途 | |---------|-----------|---------|---------| | MACrossStrategy | long_window + 5 | 25 | 趋势跟踪 | | RSIStrategy | period + 10 | 24 | 超买超卖 | | BollingerStrategy | period + 5 | 25 | 波动性交易 | | MACDStrategy | slow_ema + signal_period + 5 | 40 | 趋势确认 | | KDJStrategy | period + 5 | 19 | 超买超卖 | | TurtleStrategy | period + 2 | 22 | 突破交易 | | MeanReversionStrategy | period + 5 | 25 | 均值回归 | | MomentumBreakoutStrategy | period + 2 | 22 | 动量突破 | | DailyBreakoutStrategy | bars_count | 1440 | 日内交易 | | WaveTheoryStrategy | m1_bars_count | 500 | 综合分析 | **注意**: 系统运行时会自动获取所需数据量,建议配置回测数据量时考虑最大需求的策略(DailyBreakoutStrategy需要1440条)。 ## 📈 数据获取确认 ### 数据频率确认 - **时间周期**: `TIMEFRAME = TIMEFRAME_M1` (1分钟K线数据) - **常量定义**: 使用MT5标准时间周期常量 (`mt5_constants.py`) - **数据来源**: MT5服务器实时数据 - **数据格式**: 包含OHLC价格、成交量、点差等信息 ### MT5时间周期常量 系统使用标准MT5时间周期常量: - `TIMEFRAME_M1 = 1` (1分钟) - `TIMEFRAME_M5 = 5` (5分钟) - `TIMEFRAME_M15 = 15` (15分钟) - `TIMEFRAME_M30 = 30` (30分钟) - `TIMEFRAME_H1 = 16385` (1小时) - `TIMEFRAME_H4 = 16388` (4小时) - `TIMEFRAME_D1 = 16408` (1天) - `TIMEFRAME_W1 = 32769` (1周) - `TIMEFRAME_MN1 = 49153` (1月) ### 实际数据验证 经过测试确认: - 25条数据 = 24分钟历史数据 - 40条数据 = 39分钟历史数据 - 1440条数据 = 1509分钟历史数据(约25小时) - 5000条数据 = 8159分钟历史数据(约136小时) ### 数据字段说明 每条1分钟K线数据包含: - `time`: 时间戳 - `open`: 开盘价 - `high`: 最高价 - `low`: 最低价 - `close`: 收盘价 - `tick_volume`: 成交量 - `spread`: 点差 - `real_volume`: 实际成交量 ## 🚦 运行模式 ### 1. 回测模式 ```bash # 运行历史回测 python start_backtest.py ``` 回测结果将生成: - `backtest_trades.csv`: 交易记录CSV格式 - `backtest_trades.json`: 交易记录JSON格式 - 详细的性能报告(胜率、盈亏比、最大回撤等) ### 2. 实时交易模式 ```bash # 启动实时交易(模拟运行) python start_realtime.py # 启动实盘交易(需要确认) python start_realtime.py # 输入 'YES' 确认实盘交易 ``` ### 3. 参数优化模式 ```bash # 运行遗传算法优化 python optimizer.py ``` 优化结果将生成: - `optimization_results_YYYYMMDD_HHMMSS.json`: 详细优化结果 - `optimization_best_params_YYYYMMDD_HHMMSS.csv`: 最佳参数 - `optimization_history_YYYYMMDD_HHMMSS.csv`: 优化历史 - `optimization_report_YYYYMMDD_HHMMSS.txt`: 优化报告 ## ⚙️ 关键配置 ### 交易参数 ```python # 基础配置 SYMBOL = "XAUUSD" # 交易品种 TIMEFRAME = 1 # 时间周期(1分钟) INITIAL_CAPITAL = 20000 # 初始资金 SPREAD = 16 # 点差 # 回测配置 BACKTEST_COUNT = 30000 # 回测数据量 BACKTEST_START_DATE = "2025-05-01" BACKTEST_END_DATE = "2025-08-01" ``` ### 风险管理 ```python RISK_CONFIG = { "stop_loss_pct": -0.01, # 止损阈值(-1%) "take_profit_pct": 0.20, # 止盈阈值(20%) "profit_retracement_pct": 0.10, # 追踪止损回撤阈值(10%) "min_profit_for_trailing": 0.01, # 启动追踪止损的最小盈利(1%) "max_holding_minutes": 60, # 最大持仓时间(分钟) "min_profit_for_time_exit": 0.001 # 时间退出最小盈利(0.1%) } ``` ### 信号阈值 ```python SIGNAL_THRESHOLDS = { "buy_threshold": 1.5, # 买入信号阈值 "sell_threshold": -1.5 # 卖出信号阈值 } ``` ## 🛡️ 风险控制 ### 多层次风控体系 1. **止损保护** - 固定百分比止损 - 追踪止损(基于盈利回撤) - 动态止损位调整 2. **时间管理** - 最大持仓时间限制 - 盈利未达标强制平仓 - 市场状态适应性调整 3. **资金管理** - 初始资金分配 - 多空仓位资金分配 - 动态权益更新 4. **持仓限制** - 最大持仓数量控制 - 交易方向限制(多/空/双向) - 信号强度过滤 ### 动态权重管理 系统根据市场状态动态调整策略权重: - **趋势识别**: 价格突破、成交量确认、动量指标 - **市场状态**: 强趋势、弱趋势、震荡市 - **置信度评估**: 高置信度、中等置信度 - **权重调整**: 根据市场状态调整各策略权重 ## 📊 性能监控 ### 实时监控 - 当前持仓状态 - 浮动盈亏计算 - 策略信号强度 - 账户权益更新 ### 历史记录 - 交易记录CSV/JSON格式导出 - 性能指标统计 - 参数优化历史 - 峰值盈利数据持久化 ## 🔧 故障排除 ### 常见问题 1. **MT5连接失败** - 确保MT5终端已启动并登录 - 检查网络连接 - 验证MT5终端版本 2. **自动交易被禁用** - 点击MT5终端"自动交易"按钮 - 按Ctrl+E快捷键 - 检查账户权限 3. **订单执行失败** - 检查账户资金 - 验证品种信息 - 确认交易时间 4. **数据获取失败** - 检查日期范围设置 - 验证MT5服务器连接 - 调整数据量设置 ### 日志文件 - `logs/error.log`: 错误日志 - `logs/strategy.log`: 策略执行日志 - `position_peaks.json`: 持仓峰值数据 ## 📈 优化建议 1. **参数优化** - 使用遗传算法优化策略参数 - 定期重新优化以适应市场变化 - 保存最佳参数组合 2. **策略调整** - 根据市场情况调整策略权重 - 添加新的策略模块 - 优化信号阈值 3. **风险控制** - 定期检查止损设置 - 监控最大回撤 - 调整资金分配比例 ## ⚠️ 风险提示 - **实盘交易前务必充分测试** - **建议先使用模拟运行模式** - **不要投入超过风险承受能力的资金** - **定期监控系统运行状态** - **保持策略的持续优化** ## 📝 更新日志 ### v2.0 (重构版) - 架构重构,采用依赖注入设计 - 新增动态权重管理模块 - 完善风险控制体系 - 优化持仓管理和数据持久化 - 改进信号组合逻辑 ### v1.0 - 基础多策略组合框架 - 遗传算法参数优化 - 回测和实时交易功能 - 基本风险控制 ## 🤝 贡献指南 欢迎提交Issue和Pull Request来改进系统! ## 📄 许可证 本项目仅供学习和研究使用,实盘交易风险自负。