Files
mt5_python_ea_suite/CLAUDE.md
T
silencesdg 4cb4f4a15e 重构项目架构,新增 MT5 代理服务
- 重构核心模块:DataProvider 依赖注入、RiskController 门面、信号注册表
- 新增 FastAPI 代理服务 (run/server.py),支持局域网远程调用 MT5
- 新增 RemoteDataProvider + AttrDict,远端无缝替代 LiveDataProvider
- 新增序列化模块,MT5 对象转 JSON 兼容格式
- 重构入口点至 run/ 包,支持 python -m run.realtime/server/backtest/optimize
- 更新 CLAUDE.md 文档

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-05-11 12:00:45 +08:00

4.4 KiB
Raw Blame History

CLAUDE.md

此文件为 Claude Code (claude.ai/code) 在此代码库中工作时提供指导。

项目概述

基于Python的MetaTrader 5智能交易系统(EA)套件,集成10种量化策略,通过加权投票和阈值过滤组合信号,支持动态权重管理(根据市场状态调整策略权重)。

实际入口点

main.py 为空壳,实际入口为:

python start_backtest.py     # 回测模式
python start_realtime.py     # 实时交易(默认模拟,需输入YES确认实盘)
python optimizer.py          # 遗传算法参数优化

核心架构

依赖注入设计

core/data_providers.py 定义了 DataProvider 抽象基类(9个抽象方法),三种实现:

  • LiveDataProvider — 真实MT5 API调用
  • DryRunDataProvider — 模拟交易(委托LiveDataProvider获取价格,不发送真实订单)
  • BacktestDataProvider — 回测(维护DataFrame + current_index,通过 tick() 推进)

所有策略和执行模块接收 DataProvider 接口,不直接调用MT5。这是理解整个系统解耦的关键。

风险管理门面

core/risk/__init__.py 中的 RiskController 是门面类,组合了:

  • PositionManager (position_manager.py) — 开仓、监控、止损/止盈/追踪止损/时间退出、资金管理
  • MarketStateAnalyzer (market_state.py) — 四维度趋势检测(价格突破、成交量确认、动量、均线),返回 ("uptrend"/"downtrend"/"ranging"/"none", confidence)

动态权重系统

execution/dynamic_weights.py 中的 DynamicWeightManager

  1. 使用 MarketStateAnalyzer 判断当前市场状态
  2. 根据状态从 config.py:MARKET_STATE_WEIGHTS 获取对应权重
  3. 按置信度决定使用市场状态权重还是 DEFAULT_WEIGHTS
  4. 返回 [(策略实例, 权重), ...] 列表供信号组合使用

两阶段回测设计

start_backtest.py 的回测采用两阶段:

  1. 预生成阶段:遍历所有策略 run_backtest(df) 生成信号列,加权求和后通过 SIGNAL_THRESHOLDS 阈值过滤得到最终信号序列
  2. 模拟执行阶段:单遍 iterrows 逐行推进,通过 RiskController 模拟开仓/监控/平仓

信号组合逻辑

加权和 = sum(各策略信号 * 权重)
最终信号 = 1  (买入)   if 加权和 > buy_threshold (1.5)
            -1 (卖出)   if 加权和 < sell_threshold (-1.5)
            0  (无信号)  otherwise

阈值在 config.py:SIGNAL_THRESHOLDS 中配置。

策略开发规范

所有策略继承 strategies/base_strategy.pyBaseStrategy

class BaseStrategy:
    def __init__(self, data_provider, symbol, timeframe):  # 接收 data_provider 而非直接访问 MT5
    def generate_signal(self) -> int:    # 实时信号:通过 self.data_provider 获取当前价格
    def run_backtest(self, df) -> pd.Series:  # 向量化回测:接收 DataFrame,返回 -1/0/1 序列
    def _log_signal(self, signal, reason):    # 基类提供,记录买卖信号到日志

添加新策略步骤:

  1. strategies/ 下创建新文件,继承 BaseStrategy
  2. 实现 generate_signal()run_backtest(self, df)
  3. config.py:STRATEGY_CONFIG 添加参数字典,在 config.py:DEFAULT_WEIGHTSconfig.py:MARKET_STATE_WEIGHTS 添加权重
  4. execution/dynamic_weights.pystrategy_blueprints 列表和 optimizer.py 的导入中注册

配置系统

config.py 包含20+个配置字典,核心:

配置 用途
SYMBOL, TIMEFRAME, INITIAL_CAPITAL 基础交易参数(当前: XAUUSD, M1, 20000
STRATEGY_CONFIG 各策略的参数字典(键名为策略简称)
DEFAULT_WEIGHTS 默认策略权重(优化后)
MARKET_STATE_WEIGHTS 各市场状态(up/down/ranging)下的策略权重
SIGNAL_THRESHOLDS 买卖信号阈值
RISK_CONFIG 止损/止盈/追踪止损/持仓时间等风控参数
MARKET_STATE_CONFIG 趋势检测参数
GENETIC_OPTIMIZER_CONFIG 遗传算法参数(种群、代数、交叉/变异概率)
BACKTEST_CONFIG / REALTIME_CONFIG 回测/实盘专项配置

依赖

MetaTrader5  # MT5 Python API
pandas
deap         # 遗传算法框架
tqdm         # 进度条

语言要求

  • 所有代码注释、文档、日志必须使用中文
  • 日志文件: logs/strategy.log, logs/error.log
  • 日志器使用单例模式(logger.py