利用聚寬(Joinquant)資料來源為vnpy新增期貨行情資料
----------------July 9 2019---------------
更新了原始碼,因為有個bug。 http://blog.itpub.net/22259926/viewspace-2650011/
----------------July 9 2019---------------
現在基於網路量化平臺做的都很專業,richquant也是vnpy資料來源的提供方;不過richquant的試用版只有30天,而聚寬 (Joinquant)有一年試用期,而且也提供連續主力資料。
我就東抄西抄,利用以後logic,做了使用 聚寬(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.在聚寬平臺註冊試用資料,連結:
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)
可以在我的github的 JDDataService資料夾下載。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2643621/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 為VNPY 2版本加入聚寬資料來源
- VNPY 行情資料中非行情資料清理
- 針對vnpy的不同期貨品種行情資料清理
- 針對vnpy的mongodb資料庫,合併多個主力合約行情為連續行情資料MongoDB資料庫
- 為VNPY增加資料庫記錄交易資料功能資料庫
- 如果使用Joinquant做實盤行情資料,有一個比較大bug的要注意
- MVC + EFCore 專案實戰 - 數倉管理系統7 - 資料來源管理中--新增資料來源MVC
- 十年期貨股票行情資料輕鬆處理——TDengine在同心源基金的應用
- 多資料來源與動態資料來源的權衡
- DataWorksV2.0新增資料來源典型問題場景
- springboot新增多資料來源連線池並配置MybatisSpring BootMyBatis
- 多源資料快速遷移匯聚,杉巖資料推出智慧資料湖新通道
- 資料來源(DataSource)是什麼以及SpringBoot中資料來源配置Spring Boot
- SparkSQL外部資料來源SparkSQL
- 阿里DRUID資料來源阿里UI
- 多資料來源配置
- SpringBoot多資料來源Spring Boot
- TongWeb資料來源原理Web
- Spring系列 之資料來源的配置 資料庫 資料來源 連線池的區別Spring資料庫
- 為什麼要建資料倉儲,而不是直連資料來源?
- BIRT 怎麼呼叫 Webservice 作為資料來源Web
- Spring-Boot 多資料來源配置+動態資料來源切換+多資料來源事物配置實現主從資料庫儲存分離Springboot資料庫
- IndexedDB 資料庫新增資料Index資料庫
- 新增資料
- Spring多資料來源配置Spring
- SpringBoot整合Druid資料來源Spring BootUI
- weblogic配置JDBC資料來源WebJDBC
- springBoot 多資料來源配置Spring Boot
- pip更換資料來源
- springboot多資料來源配置Spring Boot
- MyBatis整合雙資料來源MyBatis
- weblogic GridLink資料來源配置Web
- MyBatis配置多資料來源MyBatis
- SpringBoot配置多資料來源Spring Boot
- SpringBoot | 3.1 配置資料來源Spring Boot
- web 配置多資料來源Web
- 金融行業如何利用資料來源實現精準營銷?行業
- SparkSQL:Parquet資料來源之合併後設資料SparkSQL