+1银贝 期货CTP量化系列——查询合约保存到本地用于下单

小小的夏天 2023-11-11 120

目的:

下单时需要填写交易所代码,但每个合约来自的交易所是固定的,下单时可以省去填写交易所,所以我们需要把每个合约来自那个交易所保存到本地。

发送请求函数:ReqQryInstrument

先查阅官方文档,可以知道以下重要信息: 1、需要发送的文件名是CThostFtdcQryInstrumentField;

2、是否可作为过滤条件,意味着并非是必填项,可以什么都不填,则查询所有合约,所以这里什么参数都没有填

3、它的响应是:OnRspQryInstrument

根据以上信息可以写出查询合约的代码:

# 查询合约
def qryInstrument(self):
    # 请求查询合约,填空可以查询到所有合约。
    queryFile = tdapi.CThostFtdcQryInstrumentField()  # 创建程序文件
    ret = self.tduserapi.ReqQryInstrument(queryFile, 0)  # 发送请求
    if ret == 0:
        print('发送查询合约成功!')
    else:
        print('发送查询合约失败!')
        judge_ret(ret)
        while ret != 0:
            queryFile = tdapi.CThostFtdcQryInstrumentField()
            ret = self.tduserapi.ReqQryInstrument(queryFile, 0)
            print('正在查询合约...')
            time.sleep(5)
    time.sleep(1)

响应函数:OnRspQryInstrument

在官方文档里我们可以得到以下重要信息:

1、函数原型中带bIsLast,指示该次返回是否为最后一次返回,意思是返回多条数据,其中if bIsLast为真时,则已经查询结束,并返回最后一条数据(这个是细节,后面再详细讲讲)。

2、返回的存储信息为pInstrument,获取想要的信息则使用pInstrument.(信息名称),返回的信息有很多,但我们这里只要pInstrument.InstrumentID,合约代码和pInstrument.ExchangeID 合约名称,如果有其他查询需求更改函数即可。

响应函数的代码:

import json
from program.function import *


class CTraderSpi(tdapi.CThostFtdcTraderSpi):
    def __init__(self, tduserapi, Account):
        tdapi.CThostFtdcTraderSpi.__init__(self)
        self.tduserapi = tduserapi
        self.Account = Account

    # 连接前台
    def OnFrontConnected(self):
        print("开始建立交易连接")
        authfield = tdapi.CThostFtdcReqAuthenticateField()
        authfield.BrokerID = str(self.Account.broker_id)
        authfield.UserID = str(self.Account.investor_id)
        authfield.AppID = str(self.Account.app_id)
        authfield.AuthCode = str(self.Account.auth_code)
        ret = self.tduserapi.ReqAuthenticate(authfield, 0)
        if ret == 0:
            print('发送穿透式认证请求成功!')
        else:
            print('发送穿透式认证请求失败!')
            judge_ret(ret)

    # 穿透式认证响应
    def OnRspAuthenticate(self, pRspAuthenticateField, pRspInfo, nRequestID: 'int', bIsLast: 'bool'):
        if pRspInfo.ErrorID != 0 and pRspInfo != None:
            print('穿透式认证失败\n错误信息为:{}\n错误代码为:{}'.format(pRspInfo.ErrorMsg, pRspInfo.ErrorID))
        else:
            print('穿透式认证成功!')

            # 发送登录请

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

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


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

官方微信