专业正规安全的配资公司炒股平台门户网
关键词不能为空

股票配资

导航

「股票配资线上代理」现在个人能做股票配资代

未知
admin

创元期货下载:如何用vnpy下载全市场数据(期货CTP接口)

我在vnpy的群里看到蛮多朋友问怎么下载期货全市场数据,下载方法有很多种,我分享一下我的下载方法。首先说一下,本人菜鸡,大佬轻喷。

我这里要改动的文件有4个,分别是

  • trader/vtGateway.py
  • trader/vtEvent.py
  • trader/gateway/ctpGateway/ctpGateway.py
  • trader/app/dataRecorder/drEngine.py

这里还要提一下,这四个文件都在库文件里,anaconda/lib/site-packages/vnpy-版本号-egg/文件夹下,改动自己已下载的文件夹内的内容是无效的。

好了回到正题,首先我从刚接触vnpy的时候来讲啊。。

首先我们在vnpy/examples/DataRecording文件夹下的runDataRecording.py这一个python程序中可以开始下载DR_setting.json里写入的期货代码(也就是vnpy的VtSymbol),我主要的思路就是每次运行DataRecoding文件的时候就自动更新一下DR_setting.json,把全市场的代码都更新进去,再执行监听Tick数据等等的操作。

那么第一步,这些个上市交易合约代码从哪里下载呢?肯定是接口(CTP的API)类里找到相应函数:trader/gateway/ctpGateway/ctpGateway.py中,找到了onRspQryInstrument这个响应函数。其中有一句,self.gateway.onContract(contract),意思就是把接收来的contract传入到自身下属的gateway中的onContract函数并运行它。

至此,我们的思路就很明确了,从onRspQryInstrument函数中收集到所有合约代码,最后再传递给所需要的用的代码处即可。

那么怎么从这个gateway类传递出去呢,我们先来看下整个vnpy大致数据的流向。。

画不好,随便看下

我这个自己随便画的,黑色是指数据流、信息啥的接入进来并处理的方向

红色是从我们发信息出去的方向(比如login/logout/发单/查询之类的东西)


感觉这里很多不需要啊,我画一个我们这个DataRecording需要的。。

我这里选择了DrEngine.py作为我的监听对象,你如果想在别的地方监听也是可以的。反正开源项目自己怎么爽就怎么来~



废话太多了,发车了,上代码。。

1. ctpGateway.py,改动两处地方。
①:在init的时候加上变量activeContracts(最底下一行)

   def __init__(self, gateway):n        """API对象的初始化函数"""n        super(CtpTdApi, self).__init__()n        n        self.gateway = gateway                  # gateway对象n        self.gatewayName = gateway.gatewayName  # gateway对象名称n        n        self.reqID = EMPTY_INT              # 操作请求编号n        self.orderRef = EMPTY_INT           # 订单编号n        n        self.connectionStatus = False       # 连接状态n        self.loginStatus = False            # 登录状态n        self.authStatus = Falsen        n        self.userID = EMPTY_STRING          # 账号n        self.password = EMPTY_STRING        # 密码n        self.brokerID = EMPTY_STRING        # 经纪商代码n        self.address = EMPTY_STRING         # 服务器地址n        n        self.frontID = EMPTY_INT            # 前置机编号n        self.sessionID = EMPTY_INT          # 会话编号n        n        self.posDict = {}n        self.symbolExchangeDict = {}        # 保存合约代码和交易所的印射关系n        self.symbolSizeDict = {}            # 保存合约代码和合约大小的印射关系nn        self.requireAuthentication = Falsen        self.activeContracts = []

②:在onRspQryInstrument函数下推送部分,为我们的activeContracts进行累加;并在last标志出现时(全部合约发送完毕),运行vtGateway中的onAllContracts函数,这个函数过会就写。

   def onRspQryInstrument(self, data, error, n, last):n        """合约查询回报"""n        contract = VtContractData()n        contract.gatewayName = self.gatewayNamenn        contract.symbol = data['InstrumentID']n        contract.exchange = exchangeMapReverse[data['ExchangeID']]n        contract.vtSymbol = contract.symbol #'.'.join([contract.symbol, contract.exchange])n        contract.name = data['InstrumentName'].decode('GBK')nn        # 合约数值n        contract.size = data['VolumeMultiple']n        contract.priceTick = data['PriceTick']n        contract.strikePrice = data['StrikePrice']n        contract.underlyingSymbol = data['UnderlyingInstrID']nn        contract.productClass = productClassMapReverse.get(data['ProductClass'], PRODUCT_UNKNOWN)nn        # 期权类型n        if data['OptionsType'] == '1':n            contract.optionType = OPTION_CALLn        elif data['OptionsType'] == '2':n            contract.optionType = OPTION_PUTnn        # 缓存代码和交易所的印射关系n        self.symbolExchangeDict[contract.symbol] = contract.exchangen        self.symbolSizeDict[contract.symbol] = contract.sizenn        # 推送n        self.gateway.onContract(contract)n        self.activeContracts.append(data['InstrumentID'])nn        if last:n            self.gateway.onAllContracts(self.activeContracts)n            self.writeLog(text.CONTRACT_DATA_RECEIVED)


2. vtGateway.py

从1中我们已经通过self.gateway.onAllContracts(self.activeContracts)把我们所需要的activeContracts传给了gateway下的onAllContracts,现在就来创建一下这个函数

   def onAllContracts(self, activateContracts):n        """合约基础信息推送"""n        # 通用事件n        event1 = Event(type_=EVENT_ALLCONTRACTS)n        event1.dict_['data'] = activateContractsn        self.eventEngine.put(event1)

这里主要的作用就是建立一个事件(event),事件类型(EventType)是我自己定的,名字叫做EVENT_ALLCONTRACTS,这个事件主要做的事儿就是把activateContracts传入到事件里,等待有缘人(监听此类事件的函数),然后传递给有缘人。
我们还没新建函数,马上去建一个。。

3. vtEvent.py

这里比较简单,文末加一项就可以了

EVENT_ALLCONTRACTS = 'eAllContracts.'   # 全部合约回报事件

eAllContracts这个目前来说我看起来也没什么用。。我也不知道群主当时写的时候为什么要加这个,反正我也是照葫芦画瓢。

接下来我们要做一个监听,把监听2中这个自己构造的event1。

4.dREngine.py

① 首先我们把init里的self.LoadSetting()函数注释掉

       # 载入设置,订阅行情n        #self.loadSetting()

这里主要是因为我们要在收到合约信息、更新合约信息后再load这个DR_setting.json,所以要在信号监听到了以后再进行loadSetting


② 在注册监听事件里面新加一个注册

def registerEvent(self):n        """注册事件监听"""n        self.eventEngine.register(EVENT_TICK, self.procecssTickEvent)n        self.eventEngine.register(EVENT_ALLCONTRACTS,self.processContractsEvent)

这里函数解释差不多是这个意思register(监听的信号类型,有信号以后触发的函数)


③ 那么我们还需要写一个processContractsEvent函数。主要功能:

  • 收到合约列表(1中的activeContracts)
  • 构造一个json文件(和DR_Setting.json一样)
  • 覆盖老的DR_Setting.json
  • 运行loadSetting(),启动程序记录
   def processContractsEvent(self,event):n        contract_data = event.dict_['data']n        nl = []n        for ocn in contract_data:n            nl.append([ocn,"CTP"])n            json_data = {'working':True,'tick':nl,'bar':nl,'active':{}}n            d1 = json.dumps(json_data,sort_keys=True,indent=4)nn        f = open( os.path.join(os.getcwd(),self.settingFileName) ,'w')n        f.write(d1)n        f.close()n        self.loadSetting()

这里可能最上面要import os一下


然后每次都会自动更新啦~


全部代码如下

https://pan.baidu.com/s/1pLFUQF5

密码1392,1.7.0可以直接覆盖,自己再改下CTP_connect.json就可以用了

创元期货下载:创兴期货正规吗 这个怎么操作呢?

可以问一下他们受什么监管,编号多少,然后去证监会官网上看看能不能查到,如果查不到那肯定不是正规平台

创元期货下载:在哪里有期货软件免费下载?

想用期货模拟软件的话,可以去快期官网下载,模拟资金1000万

创元科技独立董事公布1-11-29至上市

  • 股票配资「庄牛配资」庄牛网合法吗?

    庄牛配资:庄牛网合法吗? 拥有营业执照,而且很多人有在上面配资过,给的评价都是非常高的。 庄牛配资:“牛市”其实已经来了,但90%的人视而不见! 作者:@海边的黄老板 (公...
    庄牛配资能赚钱的模拟炒股软件下载期货 神
  • 配资炒股需要避免哪些配资炒股心理

    新股票配资者要需要避免哪些配资炒股心理 股票配资者有时候去学新技术法宝,不是脑力超负荷,就是走火入魔,结果是失去了判断的大原则。 1、虚荣型 在朋友中谈及股票配资,必...
    需要避免哪些配资炒股
  • 配资炒股一配资炒散户对配资炒股的几点看法

    一个老散户对配资炒股的几点看技巧 如果以赚到大钱为唯一衡量股神的标准,那么,大陆过去的股神,基本发的都是政策财,比如最早花大钱买原始股的兄弟,比如买技巧人股的兄弟...
    一配资炒散户配资炒股几点
  • 股票配资「弘业期货北京营业部」弘业期货股份有限公司

    徽商期货适当性系统:你是如何开始量化交易的? 目前大家关注可实现量化交易市场主要选择有: 1.t国内期货 国内期货包含了股指期货、国债期货、商品期货等,由于期货杠杆和风险...
    徽商期货适当性系统环球商品期货
  • 股票配资「弘业期货北京营业部」弘业期货股份有限公司

    期货公司的销售团队:期货公司偏销售型的期权研究员有什么适合的发展路径吗? 其实,偏销售这个词可以忽略。公司的每一个人员都有义务为公司创收——做销售。期权是个蛮复杂的...
    期货公司的销售团队玉米期货合约概述
  • 配资炒股分享六大独特的配资炒股规则

    一配资炒股票配资高手六大独特的配资炒股规则 证券配资的动作有两个,一是怎么买卖,二是买卖多少。 笔者的超盘手配资组合理论主要探讨买卖多少的问题。 不要看到配资组合就...
    分享六大独特配资炒股
猜您喜欢

更多与创元期货下载相关文章