之前写过一篇文章 边界破坏者:Python如何优雅的对接SimNow 但是由于时间较久,以及更新了一些新的东西,所以重新整理了一下。
C++ CTPAPI 是上期技术提供一个交易接口,用于连接柜台进行交易。由于 C++ 本身的难度以及不便于进行一般性测试。
openctp-ctp 是由openctp团队提供的官方ctpapi(c++)的python版本, 使用swig转换ctpapi(c++)生成, 以 pip install 的方式,无需繁琐的流程,简化对接 CTPAPI 的过程,节省精力,快速上手。
支持版本
CTPAPI(C++) | openctp-ctp(python) | win x86 | win x64 | linux x64 | mac x64 | mac arm64 |
---|---|---|---|---|---|---|
6.3.15 | 6.3.15.* | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
6.3.19_P1 | 6.3.19.* | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
6.5.1 | 6.5.1.* | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
6.6.1_P1 | 6.6.1.* | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
6.6.7 | 6.6.7.* | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
6.6.9 | 6.6.9.* | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
6.7.0 | 6.7.0.* | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
6.7.1 | 6.7.1.* | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
6.7.2 | 6.7.2.* | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
使用方式
需要自行提前准备好 Python 环境
通过pip安装
选择一个版本安装,如 6.7.2
pip install openctp-ctp==6.7.2.* -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn
zsh
安装:
pip install openctp-ctp==6.7.2.* -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn
引用方法:
from openctp_ctp import tdapi, mdapi
更多的接口使用方法参考 代码示例
手动下载配置
手动下载指定版本的动态库文件,并配置库路径。
-
Windows
因为 windows 下,不同的 python 版本编译的动态库之间不可共用,所以不同的 python 版本需要下载指定版本对应的动态库。
swig 转换时使用 C++ 内置方式进行 GBK 和 UTF8 的编码转换
如: 6.6.9-x64, python 3.10
从目录6.6.9_20220820/win64
和6.6.9_20220820/win64/py310
下载库文件
将下载的文件放在本地同一个目录下# 下载文件 _thosttraderapi.pyd _thostmduserapi.pyd thosttraderapi.py thostmduserapi.py thosttraderapi_se.dll thostmduserapi.dll
-
Linux
选择一个ctpapi版本,如: 6.7.2 从目录6.7.2_20230913/linux64
下载所有的文件
将下载的文件放在同一目录下_thosttraderapi.so _thostmduserapi.so thosttraderapi.py thostmduserapi.py libthosttraderapi_se.so libthostmduserapi.so
将文件所在路径配置库路径(specify_path填写自己的路径)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<specify_path>
-
MacOS
为了测试是否配置成功,可以下载测试文件 demo/demo_td.py/demo/demo_md.py ,和上面的文件放在同一个目录下即可。
-
测试行情接口
注意选取有效的行情前置地址, 参考openctp监控Simnow
注意选取有效的合约, 可通过交易接口查询合约> python demo_md.py tcp://180.168.146.187:10131 AP410 AP401
-
测试交易接口
需要在 simnow官网 注册账号
注意选取有效的交易前置地址, 参考openctp监控Simnow> python demo_md.py tcp://180.168.146.187:10130 <userid> <password>
demo_td.py/demo_md.py
只提供了最简单的测试,更多的测试示例,参考mdapi.py/tdapi.py
代码示例
通过pip安装的可以直接使用代码示例;手动安装配置的,需要修改一下引入方式, 是import thosttraderapi
而不是import openctp_ctp
本项目提供了一些 openctp-ctp 的基本使用方式及部分接口示例,具体如下:
代码示例仅仅作为参考,只是完成 openctp-ctp 库及 ctpapi 接口本身的功能,未考虑项目及工程性场景逻辑, 若要将 openctp-ctp 引入项目,勿照搬示例代码。
字符集问题
Linux下安装后,需要安装中文字符集,否则导入时报错:
>>> import openctp_ctp
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Aborted
需要安装 GB18030
字符集,这里提供 ubuntu/debian/centos 的方案:
# Ubuntu (20.04)
sudo apt-get install -y locales
sudo locale-gen zh_CN.GB18030
# Debian (11)
sudo apt install locales-all
sudo localedef -c -f GB18030 -i zh_CN zh_CN.GB18030
# CentOS (7)
sudo yum install -y kde-l10n-Chinese
sudo yum reinstall -y glibc-common
通过openctp-ctp库只能连接支持ctpapi(c++)官方实现的柜台,如:simnow;不支持连接兼容ctpapi接口但非官方实现的柜台,如:openctp(由tts支持)
更多代码和细节请访问 GitHub - openctp/openctp-ctp-python: :zap: Python CTPAPI, easy install, easy use.