161 lines
3.5 KiB
Markdown
161 lines
3.5 KiB
Markdown
# 订单流交易系统
|
||
|
||
## 概述
|
||
|
||
订单流交易策略系统,支持实盘交易和回测。
|
||
|
||
## 模式切换
|
||
|
||
通过 `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 数据录制功能 |