An open API service indexing awesome lists of open source software.

https://github.com/openctp/webctp

将CTP接口转换成websocket+json协议对外通讯,适合web类应用。
https://github.com/openctp/webctp

ctp ctpapi finance fintech futures openctp options quant stocks trader

Last synced: about 2 months ago
JSON representation

将CTP接口转换成websocket+json协议对外通讯,适合web类应用。

Awesome Lists containing this project

README

          

# webctp

webctp是一个基于 [openctp-ctp](https://github.com/openctp/openctp-ctp-python) 开发的提供websocket+json接口的CTP服务。

---

* [安装及运行](#安装及运行)
* [环境搭建](#环境搭建)
* [运行](#运行)
* [请求示例](#请求示例)
* [Web Demo](#Web-Demo)
* [协议](#协议)
* [通用协议格式](#通用协议格式)
* [部分通用错误码说明](#部分通用错误码说明)
* [开发说明](#开发说明)
* [其他说明](#其他说明)

---

## 安装及运行

### 环境搭建

1. 准备Python环境(3.10, 其他版本未测试)
2. 克隆 webctp
```bash
$ git clone https://github.com/openctp/webctp.git
$ cd webctp
```
3. 安装依赖库
```bash
$ pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn
```
> :pushpin: 默认使用 openctp-ctp 6.7.2.*, 可通过 requirements.txt 进行修改。

4. 自定义配置文件
参考示例 config.example.yaml
> :pushpin: 示例中行情和交易前置地址,默认配置的是 SimNow 7x24 环境, 更多 SimNow
环境参考 [openctp环境监控](http://121.37.80.177),可根据需要变更为其他支持CTPAPI(官方实现)的柜台环境。

创建自己的行情配置 config_md.yaml :
```yaml
TdFrontAddress: tcp://180.168.146.187:10130 # 交易前置地址
MdFrontAddress: tcp://180.168.146.187:10131 # 行情前置地址
BrokerID: "9999"
AuthCode: "0000000000000000"
AppID: simnow_client_test
Port: 8080 # the listening port, default 8080
Host: 0.0.0.0 # the bind ip address, default 0.0.0.0
LogLevel: INFO # NOTSET, DEBUG, INFO, WARN, ERROR, CRITICAL
```
创建自己的交易配置 config_td.yaml :
```yaml
TdFrontAddress: tcp://180.168.146.187:10130 # 交易前置地址
MdFrontAddress: tcp://180.168.146.187:10131 # 行情前置地址
BrokerID: "9999"
AuthCode: "0000000000000000"
AppID: simnow_client_test
Port: 8081 # the listening port, default 8081
Host: 0.0.0.0 # the bind ip address, default 0.0.0.0
LogLevel: INFO # NOTSET, DEBUG, INFO, WARN, ERROR, CRITICAL
```

### 运行

```bash
# 启动交易服务
$ python main.py --config=config_td.yaml --app_type=td
# 启动行情服务
$ python main.py --config=config_md.yaml --app_type=md
```

## 请求示例

TODO: 添加postman的请求样例

### Apifox 示例(部分)

示例是基于 [SimNow 电信1环境](http://openctp.cn/report/Simnow%A3%A8CTP%A3%A9%B7%C2%D5%E6%BB%B7%BE%B31-%B5%E7%D0%C5process%D0%D0%C7%E9.html),
不同环境的数据存在差异,以下示例数据未必可全部通过, 根据环境调整即可。

登录

login

请求查询成交

qry_trade

请求查询投资者持仓

qry_investor_position

请求查询资金账户

qry_trading_account

请求查询投资者

qry_investor

请求查询交易编码

qry_trading_code

查询合约保证金率

qry_instrument_margin_rate

请求查询合约手续费率

qry_instrument_commission_rate

查询期权合约手续费

查询期权交易成本

查询报单手续费率

查询交易所保证金率

qry_exchange_margin_rate

查询投资者持仓明细

qry_investor_position_detail

查询行情

qry_depth_market_data

查询产品

qry_product

查询交易所

qry_exchange

查询合约

qry_instrument

查询报单

qr_order

查询最大报单数量

qry_max_order_volume

用户口令变更

update_password

报单录入(限价单)

order_insert

报单撤销

order_action

## Web Demo

提供了一个基本 [Web 客户端示例](web/index.html),展示了对 webctp 的基本应用。

web客户端截图

3847705585b4f6cfb09b19b33584c4a
76001cbd587ea4464fdd56ac6312304

## 协议

### 通用协议格式

``` python
# 请求
{
"MsgType": "{method_name}",
"{request_field}": {
"filed1": {value1},
"...": "...",
"fieldn": {valuen}
},
"RequestID": 1
}

# 响应
{
"MsgType": "{rsp_of_method}",
"RspInfo": {
"ErrorID": 0,
"ErrorMsg": "OK"
},
"IsLast": true,
"RequestID": 1
"{response_filed}": {response_body} # 具体参见详细文档
}
```

### 部分通用错误码说明

```bash
ErrorID="-400" ErrorMsg="参数有误"
ErrorID="-401" ErrorMsg="未登录"
ErrorID="-404" ErrorMsg="Webctp还未实现该方法"
ErrorID="-1" ErrorMsg="CTP:请求失败"
ErrorID="-2" ErrorMsg="CTP:未处理请求超过许可数"
ErrorID="-3" ErrorMsg="CTP:每秒发送请求数超过许可数"
ErrorID="0" ErrorMsg="CTP:正确"
ErrorID="1" ErrorMsg="CTP:不在已同步状态"
ErrorID="2" ErrorMsg="CTP:会话信息不一致"
ErrorID="3" ErrorMsg="CTP:不合法的登录"
ErrorID="4" ErrorMsg="CTP:用户不活跃"
ErrorID="5" ErrorMsg="CTP:重复的登录"
ErrorID="6" ErrorMsg="CTP:还没有登录"
ErrorID="7" ErrorMsg="CTP:还没有初始化"
ErrorID="8" ErrorMsg="CTP:前置不活跃"
ErrorID="9" ErrorMsg="CTP:无此权限"
ErrorID="10" ErrorMsg="CTP:修改别人的口令"
ErrorID="11" ErrorMsg="CTP:找不到该用户"
ErrorID="12" ErrorMsg="CTP:找不到该经纪公司"
ErrorID="13" ErrorMsg="CTP:找不到投资者"
ErrorID="14" ErrorMsg="CTP:原口令不匹配"
ErrorID="15" ErrorMsg="CTP:报单字段有误"
ErrorID="16" ErrorMsg="CTP:找不到合约"
```

### 详细接口文档

[交易服务协议文档](./docs/td_protocol.md)

[行情服务协议文档](./docs/md_protocol.md)

# 开发说明

TODO

# 其他说明

* 由于精力有限,只进行了SimNow平台的简单的测试,请自行充分测试后再接入生产环境。
* 使用webctp进行实盘交易的后果完全有使用者自行承担。