量化學習: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(u'XXXXXX', u'XXXXXX')
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策略數據

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM