CTPAPI-Python
上期技术官方只提供了CTPAPI的C++语言接口,其它如Python、Java、Go等语言接口均需自己封装,openctp使用了业内主流的SWIG方式开发了Python版的CTPAPI接口和CTP股票期权API接口,并且支持pip install方式一键安装,支持Windows、Linux及MacOS,支持6.3.15~6.7.2各CTPAPI版本。
pip install方式安装CTPAPI-Python接口:
pip install openctp-ctp==6.3.15.* -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn
pip install方式安装CTP股票期权API-Python接口:
pip install openctp-ctpopt==3.7.0.* -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host=pypi.tuna.tsinghua.edu.cn
CTPAPI-Python接口下载:
CTP股票期权API-Python接口下载:
CTPAPI-Python接口demo:(更多内容见github仓库:CTPAPI-Python)
# -*- coding: utf-8 -*-
"""
author: krenx@openctp.
last modify: 2024/12/12
"""
from openctp_ctp import thostmduserapi as mdapi # pip install mode
# import thostmduserapi as mdapi # local mode
class CMdImpl(mdapi.CThostFtdcMdSpi):
def __init__(self, md_front):
mdapi.CThostFtdcMdSpi.__init__(self)
self.md_front = md_front
self.api = None
def Run(self):
self.api = mdapi.CThostFtdcMdApi.CreateFtdcMdApi()
self.api.RegisterFront(self.md_front)
self.api.RegisterSpi(self)
self.api.Init()
def OnFrontConnected(self) -> "void":
print("OnFrontConnected")
# Market channel doesn't check userid and password.
req = mdapi.CThostFtdcReqUserLoginField()
self.api.ReqUserLogin(req, 0)
def OnFrontDisconnected(self, nReason: int) -> "void":
print(f"OnFrontDisconnected.[nReason={nReason}]")
def OnRspUserLogin(self, pRspUserLogin: 'CThostFtdcRspUserLoginField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
if pRspInfo is not None and pRspInfo.ErrorID != 0:
print(f"Login failed. {pRspInfo.ErrorMsg}")
return
print(f"Login succeed.{pRspUserLogin.TradingDay}")
self.api.SubscribeMarketData(["au2406".encode('utf-8')], 1)
def OnRtnDepthMarketData(self, pDepthMarketData: 'CThostFtdcDepthMarketDataField') -> "void":
print(f"{pDepthMarketData.InstrumentID} - {pDepthMarketData.LastPrice} - {pDepthMarketData.Volume}")
def OnRspSubMarketData(self, pSpecificInstrument: 'CThostFtdcSpecificInstrumentField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool') -> "void":
if pRspInfo is not None and pRspInfo.ErrorID != 0:
print(f"Subscribe failed. [{pSpecificInstrument.InstrumentID}] {pRspInfo.ErrorMsg}")
return
print(f"Subscribe succeed.{pSpecificInstrument.InstrumentID}")
if __name__ == '__main__':
md = CMdImpl("tcp://180.168.146.187:10131")
md.Run()
input("Press enter key to exit.")
注:
pip install方式引入CTPAPI:
from openctp_ctp import thostmduserapi as mdapi
文件下载方式引入CTPAPI:
import thostmduserapi as mdapi
CTP股票期权API-Python接口demo:
由于CTP股票期权柜台只是基于CTP柜台进行业务层的修改,技术层基本一样,所以API结构也基本相同,demo可以直接参照CTPAPI-Python接口,更多内容见github仓库:CTP股票期权API-Python。