Ctp接口 Tick数据转换成3秒钟,5秒钟,15秒钟,1分钟,3分钟,5分钟,n分钟周期的K线数据

图片为5秒钟 合成效果


完整源码

"""
关注公众号: Ctp接口量化
​
"""
import thostmduserapi as mdapi
from datetime import datetime
import time
import os, os.path
import random
import json
import threadingclass MdSpi(mdapi.CThostFtdcMdSpi):def __init__(self,setting,BaseGateway):mdapi.CThostFtdcMdSpi.__init__(self)# super().__init__()self.userid = setting["userid"]self.password = setting["password"]self.brokerid = setting["brokerid"]self.td_address = setting["td_address"]self.md_address = setting["md_address"]self.appid = setting["appid"]self.auth_code = setting["auth_code"]self.product_info = setting["product_info"]self.threading = threadingself.reqid = 0self.Gateway = BaseGatewayself.nest = {}self.api = self.create()self.connect()def create(self):mdpath = os.getcwd() + '/' + self.userid + '/md/' #LOGS_DIR +"md"if not os.path.exists(mdpath):os.makedirs(mdpath)return mdapi.CThostFtdcMdApi_CreateFtdcMdApi(mdpath)def Bar(self, tick, granularity = 30):instrument_id = tick.InstrumentIDaction_day = tick.ActionDayupdate_time = tick.UpdateTime.replace(':', '')last_price = tick.LastPricevolume = tick.Volumeif update_time.find('.') != -1:dt = datetime.strptime(' '.join([action_day, update_time]), "%Y%m%d %H%M%S.%f")timestamp = time.mktime(dt.timetuple()) + (dt.microsecond / 1e6)else:timestamp = int(time.mktime(time.strptime(' '.join([action_day, update_time]), "%Y%m%d %H%M%S")))date_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))remainder = timestamp % granularityif instrument_id not in self.nest:self.nest[instrument_id] = {'Date': date_time,'Open': last_price,'High': last_price,'Low': last_price,'Close': last_price,'Volume': volume,'last_time': timestamp,}else:if remainder == 0 or (timestamp - self.nest[instrument_id]['last_time'])>= granularity:self.nest[instrument_id]['Volume'] = volume - self.nest[instrument_id]['Volume']self.nest[instrument_id]['Date'] = date_timeprint(instrument_id,self.nest[instrument_id])# self.Gateway.on_bar(tick,self.nest[instrument_id])del self.nest[instrument_id]else:self.nest[instrument_id]['Date'] = date_time     self.nest[instrument_id]['Close'] = last_priceif last_price > self.nest[instrument_id]['High']:self.nest[instrument_id]['High'] = last_priceelif last_price < self.nest[instrument_id]['Low']:self.nest[instrument_id]['Low'] = last_pricedef OnFrontConnected(self) -> "void":print ("行情初始化")self.login()def login(self):req = mdapi.CThostFtdcReqUserLoginField()req.BrokerID = self.brokerid   # 经纪公司代码req.UserID = self.userid       # 投资者代码req.Password = self.password       # 投资者代码req.UserProductInfo = self.product_infoself.reqid += 1self.api.ReqUserLogin(req,self.reqid)def OnRspUserLogin(self, pRspUserLogin: 'CThostFtdcRspUserLoginField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool'):print (f"OnRspUserLogin, SessionID={pRspUserLogin.SessionID},ErrorID={pRspInfo.ErrorID},ErrorMsg={pRspInfo.ErrorMsg}")self.api.SubscribeMarketData([id.encode('utf-8') for id in self.Gateway.symbol_lsit],len(self.Gateway.symbol_lsit))def OnRtnDepthMarketData(self, pDepthMarketData: 'CThostFtdcDepthMarketDataField') -> "void":# self.threading.Thread(target=self.RenkoBar, args=(pDepthMarketData,self.Gateway.tick_time)).start()# self.RenkoBar(pDepthMarketData,self.Gateway.tick_time)# self.threading.Thread(target=self.Bar, args=(pDepthMarketData,self.Gateway.BarType)).start()self.Bar(pDepthMarketData,self.Gateway.BarType)self.Gateway.on_tick(pDepthMarketData)def OnRspSubMarketData(self, pSpecificInstrument: 'CThostFtdcSpecificInstrumentField', pRspInfo: 'CThostFtdcRspInfoField', nRequestID: 'int', bIsLast: 'bool'):print ("订阅 合约")print ("InstrumentID=",pSpecificInstrument.InstrumentID)# print ("ErrorID=",pRspInfo.ErrorID)# print ("ErrorMsg=",pRspInfo.ErrorMsg)def connect(self):self.api.RegisterFront(self.md_address)self.api.RegisterSpi(self)self.api.Init()      self.api.Join()def __del__(self):self.api.RegisterSpi(None)self.api.Release()def SubMarketData(self, symbol):Req = self.api.SubscribeMarketData([id.encode('utf-8') for id in symbol],len(symbol))return Req
class BarType():"""时间类型:秒,分,时,日,周,月,年""""""3秒"""Time3 = 3'''5秒'''Time5 = 5'''15秒'''Time15 = 15'''30秒'''Time30 = 30'''1分钟'''Min = 60'''3分钟'''Min3 = 180'''5分钟'''Min5 = 300'''15分钟'''Min15 = 900'''30分钟'''Min30 = 1800'''60分钟'''Min60 = 3600def __int__(self):"""return int value"""return self.value
class Strategy():def __init__(self):super().__init__()self.symbol_lsit = ["ni2103","rb2105","ag2102","IF2103","IC2103","i2109","jm2109"]  #订阅合约self.BarType = BarType.Time5  #订阅K线周期  秒级 BarType.Time3  Time5  Time15  Time30       分钟级  BarType.Min、  Min3 、 Min5 、 Min15 、 Min30 、 Min60def on_tick(self, tick=None):print(tick.InstrumentID,tick.LastPrice)  def on_bar(self, tick=None, Bar=None):symbol = tick.InstrumentID   #合约代码Bid = tick.BidPrice1    #买价Ask = tick.AskPrice1    #卖价LastPrice = tick.LastPrice  #最新价print(Bar) #合约
if __name__ == '__main__':# Config 配置模板# Config = {'brokerid':'9999', 'userid':'123456', 'password':'******', 'appid':'simnow_client_test', 'auth_code':'0000000000000000', 'product_info':'python dll', 'td_address':'tcp://180.168.146.187:10130', 'md_address':'tcp://180.168.146.187:10131'}Config = {'brokerid':'9999', 'userid':'123456', 'password':'******', 'appid':'simnow_client_test', 'auth_code':'0000000000000000', 'product_info':'python dll', 'td_address':'tcp://180.168.146.187:10101', 'md_address':'tcp://180.168.146.187:10111'} t = MdSpi(Config,Strategy())

Ctp接口 Tick数据转换成3秒钟,5秒钟,15秒钟,1分钟,3分钟,5分钟,n分钟周期的K线数据相关推荐

  1. HQChart使用教程11-如何把K线数据API替换成自己的API数据

    HQChart使用教程11-如何把K线数据API替换成自己的API数据 设置API域名 Vue: uniapp: HQChart代码地址 HQChart只提供前端行情展示, 不提供行情API数据,De ...

  2. 腾讯股票接口API(2)——根据股票代码获取K线数据

    腾讯股票API相关章节 腾讯股票接口API(1)--根据股票代码获取详情 腾讯股票接口API(2)--根据股票代码获取K线数据 腾讯股票接口API(3)--根据股票代码获取分时数据 腾讯股票接口API ...

  3. HQChart(C++)指标计算引擎-py接口类IHQData K线数据对接

    HQChart指标计算引擎-py接口类IHQData K线数据对接 IHQData 使用 K线接口 参数: 返回 交流 IHQData IHQData是一个行情数据调用接口类,所有指标计算用到的数据都 ...

  4. C++连接CTP接口实现简单量化交易(行情、交易、k线、策略)

    对于量化交易来说,量化策略和技术系统缺一不可,为了知其所以然,本文实现了一个C++连接CTP接口进行仿真交易的demo,从接收行情.下订单.数据处理到添加策略.挂载运行交易等多个环节来看一下量化交易的 ...

  5. 期货CTP接口与程序化(量化交易)的对接(2)——基本概念

    上一讲:期货CTP接口与程序化(量化交易)的对接(1) 先理清几个概念. 策略 这是交易思路. 举一个简单的例子.下文都用这个例子来说明问题. 假如我给自己规定:"每当出现长阳,我就买进,每 ...

  6. 重要公告:发布backtrader通过ctp接口进行国内期货实盘模拟交易的接口和例子文件

    backtrader回测功能非常强大,但是只开发了国外的实盘交易接口,国内还没有公开的实盘交易接口. 鉴于广大用户都有实盘交易需求.我们对此进行了开发.目前完成了第一阶段的工作.即开发了针对国内期货交 ...

  7. CTP程序化交易入门系列之三:获取实时行情及k线合成

    前面两篇有了基础知识的准备,这一篇讲通过CTP API获取实时行情,录入csv,实时合成k线.github上开源了录入csv及合成k线代码,后台回复pyctp可获取.先上两张效果图: 图1 csv数据 ...

  8. 用python把股票日K线转换成月K线周期数据,这可能是网上最稀缺的代码

    用python把股票日线转换成月K线周期,这可能是网上最稀缺的代码. 在网上找了半天,真的非常稀缺,把日K线转换成月线周期. 东拼西凑,再加上自己的修改,终于写出来了. 先爬取K线数据保存为temp. ...

  9. 股票K线5,15,30,60分钟数据接口

    1. 新浪接口 https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketDataService.getKLineData?symbol=sh000300& ...

最新文章

  1. 《将要淘汰的八种人》读后感
  2. mysql安装samba_centos 安装samba
  3. JSON 是个什么??!!!
  4. android 仿京东toolbar,仿京东商城系列2------自定义toolbar
  5. 解决Win8下使用net use命令磁盘映射无效的问题
  6. 【Python学习系列十九】基于scikit-learn库进行特征选择
  7. textview 背景变形_重庆新中式床背景品牌
  8. c# 怎样从bitmap初始化image类_C#二维数组初始化概括(新手篇)
  9. jmeter聚个报告怎么看qps_Jmeter 使用笔记之 html 报告扩展(一)
  10. Linux创建SSH信任关系
  11. react 类暴露_react如何将组件内部的方法暴露给外部
  12. 年薪百万架构师首次分享 Java 程序员黄金 5 年进阶心得!
  13. idea 错误: -source 1.6 中不支持 diamond 运算符的解决办法
  14. 西南科技大学OJ题 顺序栈基本操作的实现1044
  15. 计算机网络大写英文缩写汇总(持续更新中……)
  16. 机器学习读书笔记:神经网络
  17. 港科夜闻丨香港科大陈启峰教授入选中国区“35岁以下科技创新35人”
  18. java模拟新浪微博_Java模拟新浪微博用户注册
  19. Auto-encoder(自编码器)的原理及最新的技术应用(李宏毅视频课整理和总结)
  20. 平面设计如何做好空间创意

热门文章

  1. seata 1.3.0 四种模式解决分布式事务(AT、TCC、SAGA、XA)
  2. 节日流水灯c语言编程,流水灯C语言编程
  3. Storm之分布式搭建
  4. 图灵机器人——VQA模型的介绍
  5. 【评测】糖尿病人细胞(原代细胞)及其配套培养基解决方案
  6. 种植牙好不好?该怎么选择?
  7. SequoiaDB 架构指南
  8. 苹果笔记本计算机管理员删除,MAC删除管理员后,如何恢复
  9. 针对新冠病毒,盛普始终坚持多靶标协同的防治病毒药物研发
  10. jupyter notebook无法自动跳转浏览器