使用ctpplus,然后增加回测模块
This commit is contained in:
@@ -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 数据录制功能
|
||||
Reference in New Issue
Block a user