# 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响应中包含详细的错误信息，便于客户端处理异常情况