文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何利用Joinquant数据源为vnpy添加期货行情数据

2023-06-02 07:00

关注

小编给大家分享一下如何利用Joinquant数据源为vnpy添加期货行情数据,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

使用聚宽(Joinquant)数据源JQData为vnpy添加期货行情数据

代码就两个文件,一个config.json主要放登陆用户名和期货品种名称对应表,因为期货品种在聚宽的名称是不一样的。

JQDataload.py是提供分钟级别下载方法,和一个期货品种名称对照列表从聚宽下载。

聚宽一天提供100万条数据下载,所以每次下载结束会有倒计时提供。其实代码很简单,唯一难点就是就是vnpy是每天9点00开始点,而聚宽是每天9点01为开始点;就抄抄之前vnpy已有代码解决。

结构如下

-JDDataService

  |--config.json

  |--JQDataload.py

其实使用很简单,步骤如下:

运行 pip install jqdatasdk , 安装jqdata的sdk

在聚宽平台注册试用数据,链接:https://www.joinquant.com/default/index/sdk

在config.json中维护登录名和密码,

运行JQDataload.py

config.json代码如下:

{   "Username": "聚宽申请",   "Password": "聚宽申请",   "rb1910":"RB1910.XSGE",   "zn1807": "ZN1807.XSGE",   "rb0000": "RB9999.XSGE"}

JQDataload.py代码如下:

# encoding: UTF-8  from __future__ import print_functionimport sysimport jsonfrom datetime import datetime,date,timedeltafrom time import time, sleep  from pymongo import MongoClient, ASCENDINGimport pandas as pd  from vnpy.trader.vtObject import VtBarData, VtTickDatafrom vnpy.trader.app.ctaStrategy.ctaBase import (MINUTE_DB_NAME,                                                 DAILY_DB_NAME,                                                 TICK_DB_NAME)  import jqdatasdk as jq  # 加载配置config = open('config.json')setting = json.load(config)  mc = MongoClient()  # Mongo连接dbMinute = mc[MINUTE_DB_NAME]  # 数据库# dbDaily = mc[DAILY_DB_NAME]# dbTick = mc[TICK_DB_NAME]  USERNAME = setting['Username']PASSWORD = setting['Password']jq.auth(USERNAME, PASSWORD)  FIELDS = ['open', 'high', 'low', 'close', 'volume']    # ----------------------------------------------------------------------def generateVtBar(row, symbol):    """生成K线"""    bar = VtBarData()      bar.symbol = symbol    bar.exchange = "SHFE"    bar.vtSymbol = bar.vtSymbol = '.'.join([bar.symbol, bar.exchange])    bar.open = row['open']    bar.high = row['high']    bar.low = row['low']    bar.close = row['close']    bar.volume = row['volume']    bardatetime = row.name    bar.date = bardatetime.strftime("%Y%m%d")      bar.time = bardatetime.strftime("%H%M%S")    # 将bar的时间改成提前一分钟    hour = bar.time[0:2]    minute = bar.time[2:4]    sec = bar.time[4:6]    if minute == "00":        minute = "59"          h = int(hour)        if h == 0:            h = 24          hour = str(h - 1).rjust(2, '0')    else:        minute = str(int(minute) - 1).rjust(2, '0')    bar.time = hour + minute + sec      bar.datetime = datetime.strptime(' '.join([bar.date, bar.time]), '%Y%m%d %H%M%S')    return bar    # ----------------------------------------------------------------------def jqdownloadMinuteBarBySymbol(symbol,startDate,endDate):    """下载某一合约的分钟线数据"""    start = time()      cl = dbMinute[symbol]    cl.ensure_index([('datetime', ASCENDING)], unique=True)  # 添加索引      df = jq.get_price(setting[symbol],start_date = startDate,end_date = endDate, frequency='1m', fields=FIELDS,skip_paused = True)    for ix, row in df.iterrows():        bar = generateVtBar(row, symbol)        d = bar.__dict__        flt = {'datetime': bar.datetime}        cl.replace_one(flt, d, True)      end = time()    cost = (end - start) * 1000      print(u'合约%s的分钟K线数据下载完成%s - %s,耗时%s毫秒' % (symbol, df.index[0], df.index[-1], cost))    print(jq.get_query_count())  def jqdownloadMappingExcel(exportpath = "C:\Project\\"):    getfuture = jq.get_all_securities(types=['futures'], date=None)    # list: 用来过滤securities的类型, list元素可选: ‘stock’, ‘fund’, ‘index’, ‘futures’, ‘etf’, ‘lof’, ‘fja’, ‘fjb’.types为空时返回所有股票, 不包括基金, 指数和期货    getfuture.to_excel(                    exportpath + "Mapping" + str(date.today())  + "futures.xls",                    index=True, header=True)    # ----------------------------------------------------------------------def downloadAllMinuteBar(days=10):    """下载所有配置中的合约的分钟线数据"""    print('-' * 50)    print(u'开始下载合约分钟线数据')    print('-' * 50)      startDt = datetime.today() - days * timedelta(1)    startDate = startDt.strftime('%Y-%m-%d')      # 添加下载任务    enddt = datetime.today()    endDate = enddt.strftime('%Y-%m-%d %H:%M:%S')        jqdownloadMinuteBarBySymbol('rb1910', startDate, endDate)      print('-' * 50)    print    u'合约分钟线数据下载完成'    print('-' * 50)  if __name__ == '__main__':    # jqdownloadMappingExcel()    #下载主力合约      downloadAllMinuteBar(days=10)    #下载单个品种    # jqdownloadMinuteBarBySymbol('510050.XSHG',startDate,endDate)

看完了这篇文章,相信你对“如何利用Joinquant数据源为vnpy添加期货行情数据”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯