利用rqalpha完成一個股指期貨的回測(二) 分鐘數據獲取和轉換

前面已經可以簡單的跑起來了,只不過是日線級的股票,我們最終目標是5分鐘級的期貨

由於平臺不支持5分鐘數據,因此這些數據需要我們手動解決,分兩塊,一塊是歷史數據的獲取,一塊是實時數據的採集。先搞定歷史數據。

目前看通達信的數據還算是比較靠譜的。股指期貨主要有IF,IC,IH三個,以IF爲例,由於通常我們要的數據比較多一點,通常是1年以上而非1個月,因此用主連IFL8

一、獲取數據:

image

 
點擊下載即可,
然後利用通達信的導出功能:
image
 
 然後打開數據看一下:
image

 

考慮到後期各種處理,因此最好還是將這些數據存於數據庫中,存好後形如:

image

 

二、轉換數據

順便說一下,通達信上的數據IFL8是完全按照各主力合約拼接而成,通過下載期貨合約的實時行情數據進行合併成5分鐘數據,然後與主力合約K線的開高低收量及持倉進行對比,基本上沒有什麼誤差。

當然,之前的歷史數據從通達信上獲取,後面的數據以及動態生成的歷史有能力的還是從實時行情生成爲好。畢竟股指期貨一個點就是200或300塊,隨便搞一手就是幾萬的盈虧,數據還是用自己的安心點。

由於rqalpha沒有提供分鐘級數據,因此我們要將獲取的數據轉成rqalpha識別的數據ndarray

先看ndarray的數據類型:

dtype = np.dtype([('date', '<u4'), ('time', '<u4'), ('open', '<u4'),
                          ('close', '<u4'), ('high', '<u4'), ('low', '<u4'),
                          ('limit_up', '<u4'), ('limit_down', '<u4'), ('basis_spread', '<i4'),
                          ('open_interest', '<u4'), ('volume', '<u4'), ('total_turnover', '<u8'),
                          ('trade_date', '<u4')])

 

這裏需要注意的是,open,high,low,close這四個值在rqalpha都是擴大了10000倍的,因此,這兒轉換時需要先乘上10000

然後將之存於一個list中

values.append((ft.date, ft.time, ft.open, ft.close, ft.high, ft.low,
                                   0, 0, 0, 0, ft.volume, 0, ft.date))

最後將之轉成ndarray類型數據:

result = np.array(values, dtype=dtype)

 

rqalpha的數據存成bcolz格式,我們依照着存,由於是5分鐘,我們取名爲:

futures_5mb.bcolz和futures_5mb_index.bcolz

其中5mb.bcolz存儲的爲真正的數據,index.bcolz爲按天存儲的數據索引。

存儲時按每支票存成一個result,然後通過代碼 arr = DataFrame(result, columns=fields) 將之轉換成DataFrame存成bcolz格式數據。

接着存儲索引futures_5mb_index.bcolz, 這個數據中存兩個量,line_map表示每支票存了多少天的數據, mb_index_list表示存的各支票每一天的數據是從哪兒存到哪兒。

舉例如下:

mb_index_list轉成DateFrame圖:

index_df = pd.DataFrame(data=mb_index_list, columns=['date', 'start_at', 'end_at'])

image

line_map數據:

image

這樣就清楚了,IFL8存了808天數據,每天數據存了48條(1天交易時間4小時即240分鐘,我們存的爲5分鐘數據,即240/5=48),一共存了808*48=38784條數據

下面是futures_5mb存儲表示:

image

image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章