原创 +1银贝 期货CTP量化系列——获取实时行情数据

小小的夏天 2023-11-10 189

前言:

ctp讲完下单和撤单,这一篇讲通过CTP API获取实时行情,有人测试过,ctp获取的行情数据的速度是要比快期快那么一点的,而且登录的时候,ctp基本是秒登录,这也是它的优点之一,快期就要等一段时间才行。但是缺点也有,就是没有历史数据,K线数据,这个要自己合成,不过这个解决的方法有很多,我这里就先不涉及这么多了,就单纯获取实时的行情数据,如果研究策略时遇到问题再想办法解决吧。

CTP行情API流程:

CTP API分为行情和交易两类,两者是完全独立的。

实盘展示:

CTP 发出的行情正是转发的交易所的行情,所以也是500ms 一次快照,一般业内也将这个快照数据称之为tick,虽然这不是真正的tick,但我们依照惯例,下面都称之为tick 数据。但CTP 不推送K线数据,所以需要客户自己根据tick 数据计算得出。我这里就单单获取tick数据,K线的合成就不涉及了,后面有需要再弄,我这里想到的是用快期的K线数据,然后用CTP交易,毕竟CTP交易方面,无论是tick数据还是交易都是快点的。

代码:

使用时注意一下交易时间和非交易时间

from program.function import *

class CFtdcMdSpi(mdapi.CThostFtdcMdSpi):

    def __init__(self, tapi, account):
        mdapi.CThostFtdcMdSpi.__init__(self)  # 初始化环境
        self.tapi = tapi
        self.account = account
    def OnFrontConnected(self) -> "void":  # 连接通知

        print("连接通知OnFrontConnected")
        loginfield = mdapi.CThostFtdcReqUserLoginField()
        loginfield.BrokerID = str(self.account.broker_id)  # 9999
        loginfield.UserID = str(self.account.investor_id)  # b'218493'账号
        loginfield.Password = str(self.account.password)  # 密码
        loginfield.UserProductInfo = "python dll"
        self.tapi.ReqUserLogin(loginfield, 0)  # 登录账户

    # 登录通知
    def OnRspUserLogin(self, pRspUserLogin: 'CThostFtdcRspUserLoginField', pRspInfo: 'CThostFtdcRspInfoField',
                       nRequestID: 'int', bIsLast: 'bool') -> "void":

        print(
            f"登录通知OnRspUserLogin, SessionID={pRspUserLogin.SessionID},ErrorID={pRspInfo.ErrorID},ErrorMsg={pRspInfo.ErrorMsg}")
        ret = self.tapi.SubscribeMarketData([id.encode('utf-8') for id in self.account.subscribe_list],
                                            len(self.account.subscribe_list))  # 订阅行情

本主题为课程学员专享,成为股票量化投资课程学员后可免费阅读

成为学员
最新回复 ( 0条评论 )


官方微信
码力十足学量化
Powered by Xiuno BBS 4.0.7

官方微信