real_trader/README.md
2025-05-10 21:20:47 +08:00

125 lines
4.7 KiB
Markdown
Raw 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**:实盘交易管理器,处理实盘交易异常情况
- **strategy_position_manager.py**:策略持仓管理器,管理各策略持仓情况
- **xt_trader.py**交易接口封装基于XtQuant接口
- **simulation_trader.py**:模拟交易实现
- **logger_config.py**:日志系统配置
- **config.py**:系统配置管理
## API接口
系统提供以下RESTful API接口
- 健康检查: `GET /yu/healthcheck`
- 买入: `POST /yu/buy`
- 卖出: `POST /yu/sell`
- 撤单: `DELETE /yu/cancel/<entrust_no>`
- 查询余额: `GET /yu/balance`
- 查询持仓: `GET /yu/positions`
- 查询今日成交: `GET /yu/todaytrades`
- 查询今日委托: `GET /yu/todayentrust`
- 清空策略持仓: `DELETE /yu/clear/<strategy_name>`
- 查询订单状态: `GET /yu/order_status`
- 查询策略目标持仓: `GET /yu/strategy_targets`
## 环境要求
- Python 3.10.5+
- 依赖库:
- chinese-calendar
- flask
- flask-limiter
- requests
- schedule
- XtQuant交易接口实盘环境需要
## 配置项
主要配置项可通过环境变量设置:
- **PORT**服务端口默认9527
- **HOST**服务监听地址默认0.0.0.0
- **DEBUG**调试模式默认False
- **SIMULATION_MODE**是否仅使用模拟交易默认False
- **XT_ACCOUNT**XtQuant账号
- **XT_PATH**XtQuant路径
更多配置项请参考`config.py`文件。
## 使用示例
1. 设置环境变量(可选)
```bash
export XT_ACCOUNT=你的账号
export XT_PATH=XtQuant安装路径
```
2. 启动服务
```bash
python main.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交易接口
- 系统默认会根据交易时间自动判断是否使用模拟交易
- 交易日判断基于chinese-calendar库
- 请确保配置正确的交易账号和路径
## design
### strategy position manager
策略仓位管理是用于保存,更新基于策略名的股票仓位, 和未完成订单的
父类: BasePositionManager
子类: RealPositionManager(放入real 模块), SimulationPositionManager(放入simulation 模块)
position manager 中保存两个字典, positions, pending_orders, key都是策略名
position manager在trade_server中初始化, 作为参数传入trader
完整的交易流程是:
1. 下单
用户调用trader下单, trader在发出下单信号的同时添加一个pending_order给position manager
pending_order的结构是{order_id, order_status}, 当order_status是完成状态时, 应该从字典中删除
下单没有给策略名的, 策略名默认为"default_strategy"
2. 更新pending order状态
模拟盘立刻全部成交, 在下单后立刻更新仓位, 并删除pending order, 需要打印日志
实盘由real_trader_manager管理pending order状态, 具体是
- 下单后立刻尝试更新pending order状态, 比如状态变为部分成交, 全部成交等, 同时更新持仓,并计划一个1分钟后的任务
- 1分钟后再次更新订单状态, 如果全部成交, 则更新持仓, 否则(部分成交, 无成交), 撤单, 并下一个市价单数量是原先订单数量, 或者补单数量(部分成交)
- 如果下单发生错误, 表示没有成功下单, 则不添加pending order, 也不更新仓位, 即忽略这笔订单, 打印错误日志
3. 收盘后保存策略持仓(模拟盘, 实盘单独保存)
4. server启动时载入持仓文件
以上设计基于简洁, 逻辑清晰, 流程简单的思路, 如果有更好的建议, 可以提供