Giter Site home page Giter Site logo

openctp / openctp-ctp-python Goto Github PK

View Code? Open in Web Editor NEW
115.0 3.0 21.0 1.14 GB

CTPAPI的Python接口,使用Swig技术制作,支持pip install。

Home Page: http://www.openctp.cn

License: BSD 3-Clause "New" or "Revised" License

Python 100.00%
ctp ctpapi openctp trading investment python quant trader

openctp-ctp-python's Introduction

openctp-ctp


openctp-ctp库是由 openctp 使用Swig技术制作的Python版CTPAPI。

简化了对接CTPAPI的过程,节省精力,快速上手 🚀



支持版本

📌 ❌是因为CTP官方没有提供相应平台的库。✖️是openctp还未提供支持

生产版

openctp-ctp win x86 win x64 linux x64 mac x64 mac arm64
6.3.15.* ✔️ ✔️ ✔️
6.3.19.* ✔️ ✔️ ✔️
6.5.1.* ✔️ ✔️ ✔️
6.6.1.* ✔️ ✔️ ✔️
6.6.7.* ✔️ ✔️ ✔️ ✔️ ✔️
6.6.9.* ✔️ ✔️ ✔️ ✔️ ✔️
6.7.0.* ✔️ ✔️ ✔️ ✔️ ✔️
6.7.1.* ✔️ ✔️ ✔️
6.7.2.* ✔️ ✔️ ✔️ ✔️ ✔️

评测版

openctp-ctp-cp win x86 win x64 linux x64 mac x64 mac arm64
6.3.19.* ✔️ ✔️ ✔️
6.5.1.* ✔️ ✔️ ✔️
6.6.1.* ✔️ ✔️ ✔️
6.6.7.* ✔️ ✔️ ✔️
6.6.9.* ✔️ ✔️ ✔️ ✖️ ✖️
6.7.0.* ✔️ ✔️ ✔️ ✖️ ✖️
6.7.2.* ✔️ ✔️ ✔️ ✖️ ✖️

快速使用

openctp-ctp提供了两种安装使用方式: 通过pip安装、手动下载配置。 openctp-ctp-cp 只提供了pip安装的方式

需要自行提前准备好 Python 环境。

方式一 pip install

选择一个版本,如 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

更多的接口使用方法参考 代码示例

以上流程, 将 openctp-ctp 更换为 openctp-ctp-cp 就是评测版的安装使用方式

方式二 手动配置

手动下载指定版本的动态库文件,并配置库路径。

  • Windows

    因为 windows 下,不同的 python 版本编译的动态库之间不可共用,所以不同的 python 版本需要下载指定版本对应的动态库。

    如: 6.6.9-x64, python 3.10
    从目录 6.6.9_20220820/win646.6.9_20220820/win64/py310 下载库文件
    将下载的文件放在本地同一个目录下

    # 下载文件
    _thosttraderapi.pyd
    _thostmduserapi.pyd
    thosttraderapi.py
    thostmduserapi.py
    thosttraderapi_se.dll
    thostmduserapi_se.dll 
  • Linux
    选择一个版本,如: 6.7.2 从目录6.7.2_20230913/linux64下载所有的文件

    _thosttraderapi.so
    _thostmduserapi.so
    thosttraderapi.py
    thostmduserapi.py
    libthosttraderapi_se.so
    libthostmduserapi_se.so

    将文件所在路径加入到到库路径(<specify_path>填写当前路径)

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<specify_path>
  • MacOS(在路上...)

为了测试是否配置成功,可以使用测试文件 td_demo.py/md_demo.py,和上面的文件放在同一个目录下即可。

代码示例

  • 交易接口demo:td_demo.py

  • 行情接口demo:md_demo.py

编码增强

在高级编辑器或IDE中,可以方便的查看接口说明及各字段含义。如下(Pycharm)

.
.

字符集问题

  • 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
    

    >>> import openctp_ctp
    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
  • Mac下报错

    Fatal Python error: config_get_locale_encoding: failed to get the locale encoding: nl_langinfo(CODESET) failed
    Python runtime state: preinitialized
    

    设置 export LANG="en_US.UTF-8" 并使之生效

说明

  • openctp-ctp库默认只支持CTP柜台,如需连接TTS、XTP、TORA等柜台,可以使用openctp的CTPAPI兼容接口方式,将CTP的dll(如thosttraderapi_se.dll)替换为相应柜台的版本即可,具体见openctp
  • CTPAPI的Python版开发技术: swig转换CTPAPI为Python攻略
  • 更新日志

用于实盘前请充分测试相应的功能,openctp不对此承担任何责任。

openctp-ctp-python's People

Contributors

jedore avatar krenx1983 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

openctp-ctp-python's Issues

请问一下 mac系统 返回信息中文乱码怎么解决

我进行一些操作的时候,响应信息如果是中文会变成韩文一样的乱码,请问一下这个是需要哪里配置一下呢

'StatusMsg': '놨떥틑쳡붻'
'StatusMsg': '26:틑뎷떥놨떥놻뻜뻸DCE:떱잰ힴ첬뷻횹듋쿮닙ퟷ'

tdapi:响应失败, ErrorID=3, ErrorMsg=CTP:不合法的登录

ping的时候 simnow的7x24td接口是返回成功的 (账号是周一注册的,今天周四):
python3 ping.py tcp://180.168.146.187:10131
version: v6.7.0_20230209 9:52:16.3535
connected.
br-223c9ee49ecb: Success
docker0: Success
response time: 9 milliseconds

在测试demo的时候 失败了:
代码:
from tdapi import CTdSpiImpl
import config
from openctp_ctp import tdapi

spi = CTdSpiImpl(
config.fronts["7x24"]["td"],
config.user,
config.password,
config.authcode,
config.appid,
config.broker_id,
)

spi.is_login()

返回:
-------------------------------- 启动 trader api demo
CTP交易API版本号: v6.7.0_20230209 9:52:16.3535
交易前置:tcp://180.168.146.187:10130
初始化成功
交易前置连接成功

认证
发送请求: AppID=simnow_client_test,AuthCode=0000000000000000,BrokerID=9999,UserID=luang,UserProductInfo=
['AppID=simnow_client_test', 'AuthCode=0000000000000000', 'BrokerID=9999', 'UserID=luang', 'UserProductInfo=']
响应成功
响应内容: AppID=simnow_client_test,AppType=1,BrokerID=9999,UserID=luang,UserProductInfo=
登录
/sys/firmware/dmi/tables/smbios_entry_point: Permission denied
/dev/mem: Permission denied
/sys/firmware/dmi/tables/smbios_entry_point: Permission denied
/dev/mem: Permission denied
br-223c9ee49ecb: No such file or directory
docker0: No such file or directory
发送请求: BrokerID=9999,ClientIPAddress=,ClientIPPort=0,InterfaceProductInfo=,LoginRemark=,MacAddress=,OneTimePassword=,Password=***,ProtocolInfo=,TradingDay=,UserID=luang,UserProductInfo=
['BrokerID=9999', 'ClientIPAddress=', 'ClientIPPort=0', 'InterfaceProductInfo=', 'LoginRemark=', 'MacAddress=', 'OneTimePassword=', 'Password=
', 'ProtocolInfo=', 'TradingDay=', 'UserID=luang', 'UserProductInfo=']
响应失败, ErrorID=3, ErrorMsg=CTP:不合法的登录
Traceback (most recent call last):
File "/home/lzqw/ctp/python.py", line 15, in
spi.is_login()
TypeError: 'bool' object is not callable

请问在dockerfile中安装openctp报错情况

我在macos上使用docker去进行打包
这是我的dockerfile


EXPOSE 6000

ADD . /code

WORKDIR /code

RUN pip install --upgrade pip

RUN pip install -r requirements.txt

CMD ["python","subscribe.py"]```


当我使用命令docker build -t quotes-retrieve . 去打包镜像时,出现了以下问题

1.623 Collecting openctp-ctp==6.6.7                                                                                                                                                                                                                                                                                
1.672   Downloading https://pypi.tuna.tsinghua.edu.cn/packages/1c/bc/1c0cd945b71c5efcbb2446bc81ef74b3cb690273efa6f354c3ff95743cfe/openctp_ctp-6.6.7.tar.gz (2.7 MB)                                                                                                                                                
1.898      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 12.2 MB/s eta 0:00:00
1.981 ERROR: The tar file (/tmp/pip-unpack-820mb3nv/openctp_ctp-6.6.7.tar.gz) has a file (/tmp/pip-install-5x2bwjxy/openctp-ctp_49733e15908b48a0aef3ec4b94d0144b/../PYPI_README.md) trying to install outside target directory (/tmp/pip-install-5x2bwjxy/openctp-ctp_49733e15908b48a0aef3ec4b94d0144b)

请问有什么解决方法么

Aborted (core dumped) Error detected when calling 'CThostFtdcTraderSpi.OnRtnTrade'

> 成交通知 BrokerID=,BrokerOrderSeq=,BusinessUnit=,ClearingPartID=,ClientID=,Direction=,ExchangeID=,ExchangeInstID=,HedgeFlag=,InstrumentID=,InvestUnitID=,InvestorID=,OffsetFlag=,OrderLocalID=,OrderRef=,OrderSysID=,ParticipantID=,Price=.0,PriceSource=,SequenceNo=,SettlementID=,TradeDate=,TradeID=,TradeSource=,TradeTime=:49:24,TradeType=,TraderID=,TradingDay=,TradingRole=,Volume=

terminate called after throwing an instance of 'Swig::DirectorMethodException'
  what():  SWIG director method error. Error detected when calling 'CThostFtdcTraderSpi.OnRtnTrade'
Aborted (core dumped)

容器中导入失败

容器中运行环境,使用的是 6.6.9_20220920\linux64 文件,出现报错如下:

from path.linux.thostmduserapi import CThostFtdcDepthMarketDataField, CThostFtdcMdSpi
File "/path/linux/thostmduserapi.py", line 10, in
from . import _thostmduserapi
ImportError: libthostmduserapi_se.so: cannot open shared object file: No such file or directory

请问如何解决呢?

ubuntu 22.04 下报错

terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Aborted (core dumped)

容器运行时报错

我用docker容器运行一个python 3.8.16-slim-buster环境,执行以下命令时

from openctp_ctp.thostmduserapi import CThostFtdcDepthMarketDataField, CThostFtdcMdSpi

出现报错,如下:

terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Aborted (core dumped)

我另外尝试了以下方式,也会有问题

from openctp_ctp.thostmduserapi import CThostFtdcMdApi

请问怎么解决呢?

Linux下无法读取腾讯行情

使用6.67的文件,同样代码,在Win下环境中,可以正常实现订阅腾讯行情,Linux中无法订阅,很奇怪。

尝试使用库模式,直接运行demo目录中的mdapi,结果如下

root@fcd736623733:~/root/demo# python mdapi.py
ApiVersion: v6.6.7_20220613 14:52:04.1708
press Enter key to exit ...
OnFrontConnected
OnRspUserLogin: ErrorID=0, ErrorMsg=CTP:No Error
OnRspSubMarketData:ErrorID= 0 ErrorMsg= CTP:No Error
OnRspSubMarketData:ErrorID= 0 ErrorMsg= CTP:No Error
OnRspSubMarketData:ErrorID= 0 ErrorMsg= CTP:No Error
OnRspSubMarketData:ErrorID= 0 ErrorMsg= CTP:No Error
OnRspSubMarketData:ErrorID= 0 ErrorMsg= CTP:No Error

没有行情输出,该 demo 在 Win 下运行一切正常

登录请求体里的UserProductInfo最长长度是11字节吗?

版本:6.7.2.7
系统:CentOS

在simnow测试时tdapi.CThostFtdcReqUserLoginField()里的UserProductInfo一直按照示例写的“demo”没有问题,
在穿透测试的时候报错:TypeError: in method 'CThostFtdcReqUserLoginField_UserProductInfo_set', argument 2 of type 'char [11]'
经修改测试,好像是限制了这个属性最多为11字节?
查看期货公司那边给的申请表里写的AppID规则是
image
还请J大确认下是否最长只能为11字节,谢谢。

拉下来的数据有些是double可表示的最大值

我在mac m芯片上跑拉取数据的例子,用的是openctp-ctp 6.7.0版本的。
像AskPrice2之后的都是1.7976931348623157e+308,是一些不可用的值,还有像CurrDelta也是不可用的。

Message sent {"ActionDay": "20231129", "AskPrice1": "591.6", "AskPrice2": "1.7976931348623157e+308", "AskPrice3": "1.7976931348623157e+308", "AskPrice4": "1.7976931348623157e+308", "AskPrice5": "1.7976931348623157e+308", "AskVolume1": "2", "AskVolume2": "0", "AskVolume3": "0", "AskVolume4": "0", "AskVolume5": "0", "AveragePrice": "588996.551724138", "BandingLowerPrice": "0.0", "BandingUpperPrice": "0.0", "BidPrice1": "590.8", "BidPrice2": "1.7976931348623157e+308", "BidPrice3": "1.7976931348623157e+308", "BidPrice4": "1.7976931348623157e+308", "BidPrice5": "1.7976931348623157e+308", "BidVolume1": "1", "BidVolume2": "0", "BidVolume3": "0", "BidVolume4": "0", "BidVolume5": "0", "ClosePrice": "1.7976931348623157e+308", "CurrDelta": "1.7976931348623157e+308", "ExchangeID": "", "ExchangeInstID": "", "HighestPrice": "591.7", "InstrumentID": "sc2406", "LastPrice": "590.7", "LowerLimitPrice": "532.8", "LowestPrice": "579.3", "OpenInterest": "1435.0", "OpenPrice": "591.0", "PreClosePrice": "581.9", "PreDelta": "0.0", "PreOpenInterest": "1435.0", "PreSettlementPrice": "579.2", "SettlementPrice": "1.7976931348623157e+308", "TradingDay": "20231130", "Turnover": "119566300.0", "UpdateMillisec": "0", "UpdateTime": "17:04:31", "UpperLimitPrice": "625.5", "Volume": "203", "reserve1": "", "reserve2": ""}

请问有什么解决方法么,谢谢。

行情订阅异常

当前使用版本openctp-ctp==6.7.0,系统Ubuntu 22.04.3 LTS,订阅合约数量为28个时,最后的4个合约收不到行情,或收到的行情一分钟一条,但程序没有报错。当订阅合约数量为24个时,行情就是正常的。麻烦帮忙看看是什么情况

投资者结算结果中消息正文Content有时为空

您好,
OnRspQrySettlementInfo回调函数返回的CThostFtdcSettlementInfoField的Content字段,我发现有时为空。投资者结算结果会分若干条返回,最后拼接Content才能得到完整消息。我猜想问题可能出现在转码。每条Content末尾可能不是一个完整的GBK字符,这样下一条Content的起始也就不是一个完整的GBK字符,就造成本条识别错误。

Mac下PIP版本登录函数声明与示例不一致

目前mac下pip可安装的最新版本是6.7.2.3,按照交易示例td_demo里所写,
登录代码为:self.api.ReqUserLogin(req, 0)
但目前mac安装的pip该函数声明为

def ReqUserLogin(self, pReqUserLoginField: "CThostFtdcReqUserLoginField", nRequestID: "int", length: "TThostFtdcSystemInfoLenType", systemInfo: "TThostFtdcClientSystemInfoType") -> "int":
            return _thosttraderapi.CThostFtdcTraderApi_ReqUserLogin(self, pReqUserLoginField, nRequestID, length, systemInfo)

相比调用代码多了最后两个参数length和systemInfo。
我查看了目前最新的源代码,这个函数已经都是三参数版本了,所以mac下如何调用这个函数呢,还是等更新新版本的pip?谢谢。

升级为包导入后,无法订阅腾讯行情

在还没有分离出python独立项目前,老的openctp python可以提供腾讯行情的接入,其中,采取文件格式进行导入,如下

from .thostmduserapi import CThostFtdcDepthMarketDataField, CThostFtdcMdSpi, CThostFtdcMdApi

接着只需要重写回调类就可以获得腾讯的行情订阅

def OnRtnDepthMarketData(self, pDepthMarketData: CThostFtdcDepthMarketDataField): ·· tick = CThostFtdcMdApi.CreateFtdcMdApi() ... tick.SubscribeMarketData()

采用当前版本时,该类的导入方式变成

from openctp_ctp.thostmduserapi import CThostFtdcDepthMarketDataField, CThostFtdcMdSpi

腾讯行情订阅无效

无法订阅郑商所和期权行情

使用demo程序,可以成功订阅上期所、大商所、中金所和上能所,但是无法订阅郑商所和广州期权行情,请问是什么原因?

-------------------------------- 启动 mduser api demo
CTP行情API版本号: v6.7.0_20230209 9:52:16.3535
行情前置:tcp://180.168.146.187:10211
初始化成功
-------------------------------- 按任意键退出 mduser api demo 行情前置连接成功
登录请求
登录成功
订阅行情请求: ('10005460', 'ap2401', 'rm2401')
订阅行情成功: 10005460
订阅行情成功: ap2401
订阅行情成功: rm2401

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.