mirror of
https://github.com/silencesdg/mt5_python_ea_suite.git
synced 2026-07-28 19:27:43 +00:00
4cb4f4a15e
- 重构核心模块: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>
4.4 KiB
4.4 KiB
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:
- 使用
MarketStateAnalyzer判断当前市场状态 - 根据状态从
config.py:MARKET_STATE_WEIGHTS获取对应权重 - 按置信度决定使用市场状态权重还是
DEFAULT_WEIGHTS - 返回
[(策略实例, 权重), ...]列表供信号组合使用
两阶段回测设计
start_backtest.py 的回测采用两阶段:
- 预生成阶段:遍历所有策略
run_backtest(df)生成信号列,加权求和后通过SIGNAL_THRESHOLDS阈值过滤得到最终信号序列 - 模拟执行阶段:单遍
iterrows逐行推进,通过RiskController模拟开仓/监控/平仓
信号组合逻辑
加权和 = sum(各策略信号 * 权重)
最终信号 = 1 (买入) if 加权和 > buy_threshold (1.5)
-1 (卖出) if 加权和 < sell_threshold (-1.5)
0 (无信号) otherwise
阈值在 config.py:SIGNAL_THRESHOLDS 中配置。
策略开发规范
所有策略继承 strategies/base_strategy.py 的 BaseStrategy:
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): # 基类提供,记录买卖信号到日志
添加新策略步骤:
- 在
strategies/下创建新文件,继承BaseStrategy - 实现
generate_signal()和run_backtest(self, df) - 在
config.py:STRATEGY_CONFIG添加参数字典,在config.py:DEFAULT_WEIGHTS和config.py:MARKET_STATE_WEIGHTS添加权重 - 在
execution/dynamic_weights.py的strategy_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)