溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用Joinquant數據源為vnpy添加期貨行情數據

發布時間:2021-11-30 17:49:26 來源:億速云 閱讀:451 作者:小新 欄目:編程語言

小編給大家分享一下如何利用Joinquant數據源為vnpy添加期貨行情數據,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

使用聚寬(Joinquant)數據源JQData為vnpy添加期貨行情數據

代碼就兩個文件,一個config.json主要放登陸用戶名和期貨品種名稱對應表,因為期貨品種在聚寬的名稱是不一樣的。

JQDataload.py是提供分鐘級別下載方法,和一個期貨品種名稱對照列表從聚寬下載。

聚寬一天提供100萬條數據下載,所以每次下載結束會有倒計時提供。其實代碼很簡單,唯一難點就是就是vnpy是每天9點00開始點,而聚寬是每天9點01為開始點;就抄抄之前vnpy已有代碼解決。

結構如下

-JDDataService

  |--config.json

  |--JQDataload.py

其實使用很簡單,步驟如下:

1.運行 pip install jqdatasdk , 安裝jqdata的sdk

2.在聚寬平臺注冊試用數據,鏈接: https://www.joinquant.com/default/index/sdk

3.在config.json中維護登錄名和密碼,

4.運行JQDataload.py

config.json代碼如下:

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

JQDataload.py代碼如下:

# encoding: UTF-8
  
from __future__ import print_function
import sys
import json
from datetime import datetime,date,timedelta
from time import time, sleep
  
from pymongo import MongoClient, ASCENDING
import pandas as pd
  
from vnpy.trader.vtObject import VtBarData, VtTickData
from 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添加期貨行情數據”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女