iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >怎么为VNPY 2版本加入聚宽数据源
  • 801
分享到

怎么为VNPY 2版本加入聚宽数据源

2023-06-01 23:06:02 801人浏览 薄情痞子
摘要

本篇内容介绍了“怎么为VNPY 2版本加入聚宽数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下:# encoding:

本篇内容介绍了“怎么为VNPY 2版本加入聚宽数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

代码如下:

# encoding: UTF-8import JSONimport timefrom datetime import datetime, timedeltafrom typing import Listimport jqdatasdk as jqfrom vnpy.trader.constant import Exchange, Intervalfrom vnpy.trader.database import database_managerfrom vnpy.trader.object import (   BarData)class JQDataService:   """   Service for download market data from Joinquant   """   def __init__(self):      # 加载配置      config = open('config.json')      self.setting = json.load(config)      USERNAME = self.setting['jqdata.Username']      PASSWord = self.setting['jqdata.Password']      try:         jq.auth(USERNAME, PASSWORD)      except Exception as ex:         print("jq auth fail:" + repr(ex))   def to_jq_symbol(self, symbol: str, exchange: Exchange):      """      CZCE product of RQData has symbol like "TA1905" while      vt symbol is "TA905.CZCE" so need to add "1" in symbol.      """      if exchange in [Exchange.SSE, Exchange.SZSE]:         if exchange == Exchange.SSE:            jq_symbol = f"{symbol}.XSHG"  # 上海证券交易所         else:            jq_symbol = f"{symbol}.XSHE"  # 深圳证券交易所      elif exchange == Exchange.SHFE:         jq_symbol = f"{symbol}.XSGE"  # 上期所      elif exchange == Exchange.CFFEX:         jq_symbol = f"{symbol}.CCFX"  # 中金所      elif exchange == Exchange.DCE:         jq_symbol = f"{symbol}.XDCE"  # 大商所      elif exchange == Exchange.INE:         jq_symbol = f"{symbol}.XINE"  # 上海国际能源期货交易所      elif exchange == Exchange.CZCE:         # 郑商所 的合约代码年份只有三位 需要特殊处理         for count, word in enumerate(symbol):            if word.isdigit():               break         # Check for index symbol         time_str = symbol[count:]         if time_str in ["88", "888", "99", "8888"]:            return f"{symbol}.XZCE"         # noinspection PyUnboundLocalVariable         product = symbol[:count]         year = symbol[count]         month = symbol[count + 1:]         if year == "9":            year = "1" + year         else:            year = "2" + year         jq_symbol = f"{product}{year}{month}.XZCE"      return jq_symbol.upper()   def query_history(self, symbol, exchange, start, end, interval='1m'):      """      Query history bar data from JQData and update Database.      """      jq_symbol = self.to_jq_symbol(symbol, exchange)      # if jq_symbol not in self.symbols:      #     return None      # For querying night trading period data      # end += timedelta(1)      now = datetime.now()      if end >= now:         end = now      elif end.year == now.year and end.month == now.month and end.day == now.day:         end = now      df = jq.get_price(         jq_symbol,         frequency=interval,         fields=["open", "high", "low", "close", "volume"],         start_date=start,         end_date=end,         skip_paused=True      )      data: List[BarData] = []      if df is not None:         for ix, row in df.iterrows():            bar = BarData(               symbol=symbol,               exchange=exchange,               interval=Interval.MINUTE,               datetime=row.name.to_pydatetime() - timedelta(minutes=1),               open_price=row["open"],               high_price=row["high"],               low_price=row["low"],               close_price=row["close"],               volume=row["volume"],               gateway_name="JQ"            )            data.append(bar)      database_manager.save_bar_data(data)      return data   def downloadAllMinuteBar(self, days=1):      """下载所有配置中的合约的分钟线数据"""      if days != 0:         startDt = datetime.today() - days * timedelta(1)         enddt = datetime.today()      else:         startDt = datetime.today() - 10 * timedelta(1)         enddt = datetime.today()      print('-' * 50)      print(u'开始下载合约分钟线数据')      print('-' * 50)      if 'Bar.Min' in self.setting:         l = self.setting["Bar.Min"]         for VNSymbol in l:            dt0 = time.process_time()            symbol = VNSymbol.split(".")[0]            exchange = Exchange(VNSymbol.split(".")[1])            self.query_history(symbol, exchange, startDt, enddt, interval='1m')            cost = (time.process_time() - dt0)            print(u'合约%s的分钟K线数据下载完成%s - %s,耗时%s秒' % (symbol, startDt, enddt, cost))            print(jq.get_query_count())         print('-' * 50)         print         u'合约分钟线数据下载完成'         print('-' * 50)      return Noneif __name__ == '__main__':   JQdata = JQDataService()   JQdata.downloadAllMinuteBar(days=30)

config.json

{   "jqdata.Username": "",   "jqdata.Password": "",   "Bar.Min":   [      "MA8888.CZCE",      "MA009.CZCE",      "SR8888.CZCE",      "RM8888.CZCE",    ]}

“怎么为VNPY 2版本加入聚宽数据源”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么为VNPY 2版本加入聚宽数据源

本文链接: https://www.lsjlt.com/news/228068.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么为VNPY 2版本加入聚宽数据源
    本篇内容介绍了“怎么为VNPY 2版本加入聚宽数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下:# encoding:...
    99+
    2023-06-01
  • 无法打开”‘SqlPersistenceService’的版本为655的数据库该怎么办
    今天就跟大家聊聊有关无法打开”‘SqlPersistenceService’的版本为655的数据库该怎么办,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收...
    99+
    2024-04-02
  • 怎么解决oracle12c将一个11.2.0.1的数据泵导出文件导入12.1.0.2版本报错
    本篇内容主要讲解“怎么解决oracle12c将一个11.2.0.1的数据泵导出文件导入12.1.0.2版本报错”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作