利用聚寬(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增加資料庫記錄交易資料功能資料庫
- 為SQL 2005中的InterLib新增資料來源SQL
- Laravel Model 利用 Macroable 為資料模型新增宏能力LaravelMac模型
- Laravel Model 利用 Macroable 為資料模型新增巨集能力。LaravelMac模型
- 如果使用Joinquant做實盤行情資料,有一個比較大bug的要注意
- MVC + EFCore 專案實戰 - 數倉管理系統7 - 資料來源管理中--新增資料來源MVC
- 十年期貨股票行情資料輕鬆處理——TDengine在同心源基金的應用
- 資料來源連線資料庫資料庫
- 利用CSOM向列表新增資料夾
- jndi資料來源
- Win7 64位 新增Oracle ODBC資料來源Win7Oracle
- GridView用資料來源控制元件和用DataTable作為資料來源的不同View控制元件
- jboss 3.2.3為何取不到資料來源?
- 多資料來源與動態資料來源的權衡
- 多源資料快速遷移匯聚,杉巖資料推出智慧資料湖新通道
- DataWorksV2.0新增資料來源典型問題場景
- SparkSQL外部資料來源SparkSQL
- TongWeb資料來源原理Web
- jndi配置資料來源
- 多資料來源配置
- BIRT 怎麼呼叫 Webservice 作為資料來源Web
- 潤乾填報時資料來源為nullNull
- 為什麼要建資料倉儲,而不是直連資料來源?
- Spring Boot 動態資料來源(Spring 註解資料來源)Spring Boot
- Spring系列 之資料來源的配置 資料庫 資料來源 連線池的區別Spring資料庫
- Xamarin.Forms中為WebView指定資料來源SourceORMWebView
- MyBatis整合雙資料來源MyBatis
- MyBatis配置多資料來源MyBatis
- web 配置多資料來源Web
- 阿里DRUID資料來源阿里UI
- [FICO資料] 來源網上
- tomcat配置資料來源Tomcat
- 資料來源問題求救
- 連線資料來源(轉)