量化学习:vnpy使用jqdatasdk进行初始化数据

Posted quantzone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了量化学习:vnpy使用jqdatasdk进行初始化数据相关的知识,希望对你有一定的参考价值。

聚宽提供的jqdatasdk,很好的使策略能在本地使用数据源,今天的修改就是使用jqdatasdk的数据,替换vnpy从mongodb获取数据进行策略数据初始化的过程。

首先安装完jqdatasdk后,在程序中引入

技术分享图片

之后修改onInit函数,onInit函数是在策略初始化的过程中会调用到的函数。

 1     def onInit(self):
 2         """初始化策略(必须由用户继承实现)"""
 3         self.writeCtaLog(u%s策略初始化 %self.name)
 4         self.writeCtaLog(u测试)
 5 
 6         # 获取当前日期
 7         self.today = str(self.ctaEngine.today)[0:10]
 8         print(self.today)
 9 
10         # 初始化RSI入场阈值
11         self.rsiBuy = 50 + self.rsiEntry
12         self.rsiSell = 50 - self.rsiEntry
13 
14         # 载入历史数据,并采用回放计算的方式初始化策略数值
15         # initData = self.loadBar(self.initDays)
16 
17         # jqdata登陆
18         jqdatasdk.auth(u15010492066, u798513)
19 
20         initData = []
21         trade_days_list = jqdatasdk.get_trade_days(end_date=self.today, count=self.initDays)
22 
23         # 获取前多日如数,按倒叙排序
24         minute_df = jqdatasdk.get_price(IC1808.CCFX, start_date=trade_days_list[0], end_date=self.today, frequency=minute)  # Fix26 
27         # 将数据转换为loadCsv中处理的数据类型,方便处理
28         del minute_df[money]
29         minute_df = minute_df.reset_index()
30         minute_df.rename(columns={index: trade_date, open: Open, close: Close, high: High, low: Low,volume: TotalVolume}, inplace=True)
31         minute_df["Date"] = minute_df["trade_date"].map(lambda x: str(x)[0:10])
32         minute_df["Time"] = minute_df["trade_date"].map(lambda x: str(x)[11:])
33         del minute_df[trade_date]
34 
35         # 将数据传入到数据队列当中
36         for index, row in minute_df.iterrows():
37             bar = VtBarData()
38             bar.vtSymbol = "IC1808" # Fix
39             bar.symbol = "IC1808"   # Fix
40             bar.open = float(row[Open])
41             bar.high = float(row[High])
42             bar.low = float(row[Low])
43             bar.close = float(row[Close])
44             bar.date = datetime.strptime(row[Date], %Y-%m-%d).strftime(%Y%m%d)
45             bar.time = row[Time]
46             bar.datetime = datetime.strptime(bar.date +   + bar.time, %Y%m%d %H:%M:%S)
47             bar.volume = row[TotalVolume]
48 
49             initData.append(bar)
50             print bar.date, bar.time
51 
52         for bar in initData:
53             self.onBar(bar)
54 
55         self.putEvent()
56         self.writeCtaLog(u策略初始化成功)

修改逻辑如下:

  之前获取数据的方式是从mongodb中获取,由此修改为从jqdatasdk获取时,VtBarData类型的数据,触发onBar事件。

  这样修改的逻辑就变成了将jqdatasdk中获取的数据格式化为VtBarData的数据类型就可以了。

  在vnpy的ctaHistoryData.py文件中,定义了几种从csv文件导入到mongodb数据库的操作,借用此处的导入时数据处理成VtBarData的过程,变换从jqdatasdk获取的DataFrame的数据到与csv数据同等格式,调用数据处理部分,转化为VtBarData类型的数据,触发onBar函数,完成数据的初始化过程。

  只是做了一个简单的demo,后续根据情况再进行封装和修改。

技术分享图片

 

Github代码文件:

jqdatasdk初始化vnpy策略数据

 

以上是关于量化学习:vnpy使用jqdatasdk进行初始化数据的主要内容,如果未能解决你的问题,请参考以下文章

vnpy源码阅读学习:准备工作

vnpy源码阅读学习准备工作

2023最新VeighNa量化VN.PY的系统学习资料

2023最新VeighNa量化VN.PY的系统学习资料

quantos学习:通过vnpy与jaqs进行实盘

vnpy源码阅读学习:自己写一个类似vnpy的界面框架