使用ctpplus,然后增加回测模块

This commit is contained in:
2026-06-06 16:40:15 +08:00
parent abed7371b3
commit d7ba8a8344
21 changed files with 4197 additions and 52 deletions
+161
View File
@@ -0,0 +1,161 @@
# 订单流交易系统
## 概述
订单流交易策略系统,支持实盘交易和回测。
## 模式切换
通过 `config.py` 中的 `SYSTEM_CONFIG["mode"]` 切换:
```python
SYSTEM_CONFIG = {
"mode": "live", # "live" | "backtest"
}
```
## 实盘/模拟模式 (mode="live")
运行 SimNow 模拟交易或实盘交易:
```bash
python run.py
```
### Tick 数据录制
实盘运行时可录制 tick 数据供回测使用:
```python
SYSTEM_CONFIG = {
"record_tick": True, # 开启录制
"tick_record_interval": 1, # 每N个tick录一个
}
```
录制的数据保存在 `traderdata/{symbol}_tick.csv`
## 回测模式 (mode="backtest")
### 配置
```python
SYSTEM_CONFIG = {
"mode": "backtest",
"backtest_mode": "ofdata", # "ofdata" | "tick"
"backtest_results_dir": "backtest_results",
"initial_equity": 100000.0,
"contract_multiplier": {
"jm2609": 60, # 焦煤:吨/手
"au2608": 1000, # 黄金:克/手
}
}
```
### 回测模式 1: ofdata.json 回放
读取已有的 `ofdata.json` 历史订单流数据进行回测。
数据源:`traderdata/{symbol}_ofdata.json`
```python
"backtest_mode": "ofdata"
```
### 回测模式 2: 原始 tick 回放
读取原始 tick CSV 文件,完整重放 tick → K线 → 订单流流程。
数据源:`traderdata/{symbol}_tick.csv`
```python
"backtest_mode": "tick"
```
### 运行回测
```bash
python run.py
```
### 输出文件
回测结果保存在 `backtest_results/` 目录:
| 文件 | 说明 |
|------|------|
| `{symbol}_equity.csv` | 权益曲线 |
| `{symbol}_trades.csv` | 交易记录 |
| `{symbol}_metrics.json` | 性能指标 |
### 性能指标
```json
{
"total_return": 12500.0,
"total_return_pct": 12.5,
"max_drawdown": -3200.0,
"max_drawdown_pct": -3.2,
"win_rate": 0.62,
"total_trades": 50,
"winning_trades": 31,
"losing_trades": 19,
"avg_win": 850.0,
"avg_loss": -420.0,
"profit_factor": 2.1,
"final_equity": 112500.0
}
```
## 文件结构
```
4.orderflow/
├── run.py # 实盘/模拟交易主程序
├── config.py # 配置文件
├── backtest.py # 回测模块
├── traderdata/ # 实盘数据
│ ├── jm2609_ofdata.json
│ └── jm2609_tick.csv # 录制生成
├── backtest_results/ # 回测输出
│ ├── jm2609_equity.csv
│ ├── jm2609_trades.csv
│ └── jm2609_metrics.json
└── readme.md
```
## tick CSV 格式 (Mode 2 回测数据)
|字段 | 类型 | 说明 |
|------|------|------|
| InstrumentID | string | 合约代码 |
| ActionDay | string | YYYYMMDD |
| UpdateTime | string | HH:MM:SS |
| UpdateMillisec | int | 毫秒 |
| LastPrice | float | 最新价 |
| Volume | int | 累计成交量 |
| BidPrice1 | float | 买一价 |
| BidVolume1 | int | 买一量 |
| AskPrice1 | float | 卖一价 |
| AskVolume1 | int | 卖一量 |
| UpperLimitPrice | float | 涨停价 |
| LowerLimitPrice | float | 跌停价 |
| TradingDay | string | YYYYMMDD |
| Turnover | float | 累计成交额 |
| OpenInterest | int | 持仓量 |
## 历史修改记录
### 2026-06-05: ofdata.json 保存时机改善
**问题**`ofdata.json` 中价格数据相对于实时 tick 有延迟
**修改**:在 `tickdata` 方法中,新 K 线开始时立即保存 `ofdata.json`,移除 `cal_sig` 中的重复保存
### 2026-06-05: 回测模块
**新增功能**
- 支持 `mode` 切换实盘/回测
- Mode 1: ofdata.json 回放
- Mode 2: 原始 tick CSV 回放
- Tick 数据录制功能