如果使用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新增期貨行情資料
- 怎樣做一個較通用的連線資料的beanBean
- 比較兩個資料庫的差異資料庫
- 比較兩個表的資料差別
- 比較兩個TABLE的資料是否完全一致
- 一個字串比較的題字串
- 一個有關多域名session的問題,比較棘手Session
- 幾大資料倉儲方案特性比較大資料
- 資料測試實踐:從一個bug開始的大資料引擎相容性探索大資料
- 一個比較靠譜的 pacemaker 配置 ms 模式 pg 資料庫模式資料庫
- 【新炬網路名師大講堂】11gR203 RAC一個比較嚴重的bug
- 今年全球重大資料洩露事件盤點 一個比一個慘大資料事件
- MySQL 一種比較經濟的資料庫MySql資料庫
- 用VBS比較兩個Excel檔案的資料Excel
- 三個大資料處理框架:Storm,Spark和Samza介紹比較大資料框架ORMSpark
- Linux有哪些版本?哪個比較適合新手使用?Linux
- 有哪些比較實用的全球http代理HTTP
- 一個陣列和另一個陣列比較,如果第一個陣列裡面有的就不新增了陣列
- 圖資料庫比較資料庫
- 資料結構比較資料結構
- 主流資料庫比較資料庫
- 如何比較兩個資料庫表結構的不同資料庫
- Mysql 一個比較好用的函式MySql函式
- 一個比較好的shell指令碼指令碼
- 一個比較好的oracle blogOracle
- 一個比較麻煩的限流需求
- 國內做超融合比較好的儲存廠商有哪些?
- 比較兩個mysql資料庫裡面的表是否相同的一個校驗指令碼MySql資料庫指令碼
- 主流的CRM系統盤點比較
- 升級資料庫到11.2.0.2需要注意的bug資料庫
- 比較兩個陣列中是否有相同的元素陣列
- 比較兩個資料庫的表結構差異(轉)資料庫
- 大資料入門課程:Hadoop和spark的效能比較大資料HadoopSpark
- java比較mysql兩個資料庫中差異JavaMySql資料庫
- 自己做的一個簡歷網頁,有很多bug解決不了,有沒有大神幫我看看網頁
- 監控 cpu 記憶體 網路卡的使用情況的一個命令 比較實用記憶體
- HHDESK資料夾比較功能
- 大資料徵信的發展背景及與傳統徵信的比較大資料