如果使用Joinquant做实盘行情数据,有一个比较大bug的要注意

发布时间:2025-08-31 20:14:07 作者:益华网络 来源:undefined 浏览量(0) 点赞(0)
摘要:在我之前文章中,讲了用Joinquant做数据源,链接: http://blog.itpub.net/22259926/viewspace-2643621/ ,但是在我用作数据源做实盘交易的时候, 发下一个很

在我之前文章中,讲了用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)

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!