前面已經可以簡單的跑起來了,只不過是日線級的股票,我們最終目標是5分鐘級的期貨
由於平臺不支持5分鐘數據,因此這些數據需要我們手動解決,分兩塊,一塊是歷史數據的獲取,一塊是實時數據的採集。先搞定歷史數據。
目前看通達信的數據還算是比較靠譜的。股指期貨主要有IF,IC,IH三個,以IF爲例,由於通常我們要的數據比較多一點,通常是1年以上而非1個月,因此用主連IFL8
一、獲取數據:
點擊下載即可,
然後利用通達信的導出功能:
然後打開數據看一下:
考慮到後期各種處理,因此最好還是將這些數據存於數據庫中,存好後形如:
二、轉換數據
順便說一下,通達信上的數據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'])
line_map數據:
這樣就清楚了,IFL8存了808天數據,每天數據存了48條(1天交易時間4小時即240分鐘,我們存的爲5分鐘數據,即240/5=48),一共存了808*48=38784條數據
下面是futures_5mb存儲表示: