Files
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

110 lines
4.4 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.
# CLAUDE.md
此文件为 Claude Code (claude.ai/code) 在此代码库中工作时提供指导。
## 项目概述
基于Python的MetaTrader 5智能交易系统(EA)套件,集成10种量化策略,通过加权投票和阈值过滤组合信号,支持动态权重管理(根据市场状态调整策略权重)。
## 实际入口点
`main.py` 为空壳,实际入口为:
```bash
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.py``BaseStrategy`
```python
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_WEIGHTS``config.py:MARKET_STATE_WEIGHTS` 添加权重
4.`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`