如果使用Joinquant做實盤行情資料,有一個比較大bug的要注意
在我之前文章中,講了用Joinquant做資料來源,連結: http://blog.itpub.net/22259926/viewspace-2643621/ ,但是在我用作資料來源做實盤交易的時候, 發下一個很危險的bug,更新下。
如下圖,如果執行行情資料下載時候,是在交易日中的話比如2點半或者上午8點,如果填寫的endDate是當天或者之後的日期,那麼返回資料會自動填充到下午3點交易時候。此時之後的資料都是交易量為0,價格就是2點半時候價格。
所以在用作實盤資料分析時候,必須要填入endDate的分鐘時間為當前時間,才可以確保不會出現控制。整體程式碼更新如下:
# 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)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2650011/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用聚寬(Joinquant)資料來源為vnpy新增期貨行情資料
- 資料測試實踐:從一個bug開始的大資料引擎相容性探索大資料
- Linux有哪些版本?哪個比較適合新手使用?Linux
- 一個陣列和另一個陣列比較,如果第一個陣列裡面有的就不新增了陣列
- 有哪些比較實用的全球http代理HTTP
- 如何比較兩個資料庫表結構的不同資料庫
- 主流資料庫比較資料庫
- 圖資料庫比較資料庫
- 如果一個企業沒有資質能行的通嗎?
- 一個比較麻煩的限流需求
- 大資料入門課程:Hadoop和spark的效能比較大資料HadoopSpark
- java比較mysql兩個資料庫中差異JavaMySql資料庫
- 國內做超融合比較好的儲存廠商有哪些?
- Go和Python比較的話,哪個比較好?GoPython
- difflib: Python 比較資料集Python
- HHDESK資料夾比較功能
- 一款資料庫比較與同步軟體的設計與實現資料庫
- 比較兩個陣列中是否有相同的元素陣列
- 一個比較float是否相等的工具類
- 如何定義一個自帶資料區的結構體:三種資料結構體的比較結構體資料結構
- 主流的CRM系統盤點比較
- 自己做的一個簡歷網頁,有很多bug解決不了,有沒有大神幫我看看網頁
- React與Vue模板使用比較(一、vue模板與React JSX比較)ReactVueJS
- C# 實現一個基於值相等性比較的字典C#
- 0526 兩出處、六有誤、四大類、一比較
- 【求助】有哪些比較成熟的開源資料治理工具/平臺
- 使用Go的Defer和Rust的Drop實現資料庫事務機制的比較 - DEVGoRust資料庫dev
- Linux中11個比較實用的命令列Linux命令列
- 資料分析領域幾個常用工具比較
- influxdb與傳統資料庫的比較UX資料庫
- 77種資料建模工具比較
- 一個導致JVM實體記憶體消耗大的BugJVM記憶體
- 探討一個比較複雜的查詢
- 個人比較反感的一些寫法
- iOS 一個比較完美的 Growing TextViewiOSTextView
- flutter仿boss直聘,一個比較完整的例子(一)Flutter
- 使用perl比較mysql的版本MySql
- XTask與RxJava的使用比較RxJava