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