您现在的位置是:亿华云 > 热点
如果使用Joinquant做实盘行情数据,有一个比较大bug的要注意
亿华云2025-10-04 22:40:36【热点】4人已围观
简介在我之前文章中,讲了用Joinquant做数据源,链接: http://blog.itpub.net/222599
在我之前文章中,果使个比讲了用Joinquant做数据源,做实注意链接: http://blog.itpub.net/22259926/viewspace-2643621/ ,盘行但是情数在我用作数据源做实盘交易的时候, 发下一个很危险的据有较bug,更新下。果使个比
如下图,做实注意如果运行行情数据下载时候,盘行是情数在交易日中的源码库话比如2点半或者上午8点,如果填写的据有较endDate是当天或者之后的日期,那么返回数据会自动填充到下午3点交易时候。果使个比此时之后的做实注意数据都是交易量为0,价格就是盘行2点半时候价格。
所以在用作实盘数据分析时候,云服务器必须要填入endDate的据有较分钟时间为当前时间,才可以确保不会出现控制。整体代码更新如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 # 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)很赞哦!(11)
相关文章
- 注册域名要了解几大点?新手有什么方式注册域名?
- Stack Overflow 最新开发者调查报告:Rust 最受喜爱、PostgreSQL 最受欢迎
- 如何利用Python这门编程语言下载一些无法下载的小姐姐的视频
- 手把手教你用Pandas分析全国城市房价
- 5、企业注册国内域名需要证件,其它情况一律不需要证件。
- 从MySQL 5.6升级到8.0,我们付出了惨痛代价!
- Protocol Buffers,一款比Xml快100倍的序列化框架!
- 记一次 Java 应用内存泄漏的定位过程
- 第六:这个圈子里的域名确实是赚钱的一些大玩家,至于小米农,有多少赚钱?几乎没有,也就是说,轿子里只有一个人,而且大多数人都抬着轿子。
- HarmonyOS非侵入式事件分发设计