real_trader/README.md
2025-05-11 22:35:50 +08:00

125 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.

# Real Trader - 量化交易执行平台
Real Trader是一个量化交易执行平台专为中国A股市场设计提供接近实时的交易执行、模拟交易与实盘交易无缝切换、多策略管理等功能。
## 功能特点
- **实盘与模拟交易无缝切换**:根据当前交易时段和配置自动切换模拟/实盘模式
- **多策略持仓管理**:支持多个策略并行运行,独立管理各策略持仓
- **实盘交易管理**:自动处理部分成交、超时等异常情况
- **RESTful API接口**提供完整的HTTP API便于各类策略接入
- **自动交易时段判断**基于中国A股交易时间自动判断当前是否在交易时间内
- **丰富的配置选项**:可通过环境变量或配置文件灵活配置
- **完善的日志系统**:详细记录交易过程和异常情况
- **定时任务调度**:支持每日定时执行任务,如登录登出交易系统、重启交易软件等
## 系统架构
- **trade_server.py**RESTful API服务器处理交易请求
- **real_trader_manager.py**:实盘交易管理器,处理实盘交易异常情况
- **xt_trader.py**交易接口封装基于XtQuant接口
- **simulation_trader.py**:模拟交易实现
- **base_trader.py**:交易基类,定义通用交易接口和交易时间判断
- **logger_config.py**:日志系统配置
- **config.py**:系统配置管理
- **trade_constants.py**:交易常量定义
## API接口
系统提供以下RESTful API接口
- 健康检查: `GET /yu/healthcheck`
- 买入: `POST /yu/buy`
- 卖出: `POST /yu/sell`
- 撤单: `DELETE /yu/cancel/<order_id>`
- 查询余额: `GET /yu/balance`
- 查询持仓: `GET /yu/positions`
- 查询今日成交: `GET /yu/todaytrades`
- 查询今日委托: `GET /yu/todayorders`
- 清空策略持仓: `DELETE /yu/clear/<strategy_name>`
## 环境要求
- Python 3.10.5+
- 依赖库:
- chinese-calendar
- flask
- requests
- schedule
- XtQuant交易接口实盘环境需要
## 配置项
主要配置项可通过环境变量设置:
- **PORT**服务端口默认9527
- **HOST**服务监听地址默认0.0.0.0
- **DEBUG**调试模式默认False
- **SIMULATION_MODE**是否仅使用模拟交易默认False
- **XT_ACCOUNT**XtQuant账号
- **XT_PATH**XtQuant路径
- **MARKET_OPEN_TIME**:市场开盘时间,用于设置自动登录
- **MARKET_CLOSE_TIME**:市场收盘时间,用于设置自动登出
- **XT_RESTART_TIME**QMT软件重启时间
更多配置项请参考`config.py`文件。
## 使用示例
1. 设置环境变量(可选)
```bash
export XT_ACCOUNT=你的账号
export XT_PATH=XtQuant安装路径
```
2. 启动服务
```bash
python trade_server.py
```
3. API调用示例
```python
import requests
# 买入示例
response = requests.post('http://localhost:9527/yu/buy', json={
'strategy_name': '策略名称',
'code': '600000',
'price': 10.5,
'amount': 100
})
print(response.json())
# 查询持仓
response = requests.get('http://localhost:9527/yu/positions')
print(response.json())
```
## 注意事项
- 实盘交易需要配置XtQuant交易接口
- 系统默认会根据交易时间自动判断是否使用模拟交易
- 非交易时间和非交易日将无法进行实盘交易
- 系统会自动在交易日开盘前登录交易账户,收盘后登出
- 系统支持自动重连机制,定期检查交易连接状态
- 交易日判断基于BaseTrader中的静态方法
## 设计思路
### 交易系统初始化与管理
- 系统启动时尝试初始化交易实例,即使失败也会启动服务并定期尝试重连
- 使用调度器设置每日任务包括交易日登录、登出和QMT软件重启
- 实盘模式下会定期检查连接状态,并在连接失败时自动尝试重连
### 交易模式切换
- 根据配置文件中的SIMULATION_MODE决定是否使用模拟交易
- 实盘模式下会检查当前是否为交易时间,非交易时间会自动拒绝交易请求
### 实盘交易管理
- 使用RealTraderManager管理实盘交易订单和持仓
- 买入卖出操作通过place_order统一处理支持策略名称参数
- 系统会自动检查交易连接状态并在API响应中提供适当的错误信息
### 健康检查与错误处理
- 提供/yu/healthcheck接口检查交易系统连接状态
- 在API响应中包含详细的错误信息便于客户端处理异常情况