Python量化交易進階講堂-股票分筆資料跨週期處理
《Python實戰-構建基於股票的量化交易系統》小冊子主要側重於 Python 實戰講解,但在內容設計上提供了前置基礎章節幫助讀者快速掌握基礎工具的使用。同時我們會持續更新一些關於Python和量化相關擴充套件文章,幫助大家夯實基礎和增值學習效果。目前已經推出如下文章:
在小冊子《股票資料分析:差異化分析常用股票交易資料介面》一節中介紹了獲取日級別股票行情資料的方法,其實最原始的資料是分筆交易資料,行情軟體的各種週期的資料都是通過分筆資料跨週期的轉換形成的。
本次專欄篇我們來介紹分筆交易資料的獲取和處理方法。
首先使用tushare庫get_tick_data()介面獲取浙大網新2019-08-08的歷史分筆資料,如下所示:
df = ts.get_tick_data('600797',date='2019-08-08',src='tt')
print(df.head(10))
"""
time price change volume amount type
0 09:25:05 7.89 0.09 385 303765 賣盤
1 09:30:03 7.90 0.01 591 466402 買盤
2 09:30:06 7.90 0.00 371 292885 賣盤
3 09:30:08 7.91 0.01 96 75837 買盤
4 09:30:12 7.92 0.01 43 34021 買盤
5 09:30:15 7.90 -0.02 1 790 賣盤
6 09:30:18 7.90 0.00 61 48143 買盤
7 09:30:21 7.91 0.01 15 11860 買盤
8 09:30:24 7.91 0.00 5 3955 買盤
9 09:30:27 7.90 -0.01 10 7900 賣盤
" ""
複製程式碼
返回值中time時間、price成交價格、change價格變動、volume成交手、amount成交金額(元)、type買賣型別【買盤、賣盤、中性盤】。
將分筆資料的行索引轉換為時間序列,如下所示:
df_tick.index = pd.to_datetime(df_tick.time)
df_tick.drop(axis=1,columns='time',inplace=True)
print(df_tick.head(10))
"""
price change volume amount type
time
2019-08-10 09:25:05 7.89 0.09 385 303765 賣盤
2019-08-10 09:30:03 7.90 0.01 591 466402 買盤
2019-08-10 09:30:06 7.90 0.00 371 292885 賣盤
2019-08-10 09:30:08 7.91 0.01 96 75837 買盤
2019-08-10 09:30:12 7.92 0.01 43 34021 買盤
2019-08-10 09:30:15 7.90 -0.02 1 790 賣盤
2019-08-10 09:30:18 7.90 0.00 61 48143 買盤
2019-08-10 09:30:21 7.91 0.01 15 11860 買盤
2019-08-10 09:30:24 7.91 0.00 5 3955 買盤
2019-08-10 09:30:27 7.90 -0.01 10 7900 賣盤
" ""
複製程式碼
Pandas中提供了resample()方法對時間序列進行重取樣,此處將獲取到的tick資料合成一分鐘資料。如下所示:
print(df_tick.price.resample('1min',closed='left',label='left').ohlc().head(20))
"""
open high low close
time
2019-08-10 09:25:00 7.89 7.89 7.89 7.89
2019-08-10 09:26:00 NaN NaN NaN NaN
2019-08-10 09:27:00 NaN NaN NaN NaN
2019-08-10 09:28:00 NaN NaN NaN NaN
2019-08-10 09:29:00 NaN NaN NaN NaN
2019-08-10 09:30:00 7.90 7.92 7.90 7.92
2019-08-10 09:31:00 7.91 7.92 7.90 7.91
2019-08-10 09:32:00 7.90 7.91 7.89 7.90
2019-08-10 09:33:00 7.89 7.91 7.89 7.90
2019-08-10 09:34:00 7.91 7.92 7.90 7.92
2019-08-10 09:35:00 7.92 7.94 7.91 7.93
2019-08-10 09:36:00 7.93 7.93 7.92 7.92
2019-08-10 09:37:00 7.93 7.93 7.91 7.91
2019-08-10 09:38:00 7.90 7.91 7.90 7.90
2019-08-10 09:39:00 7.90 7.90 7.89 7.90
2019-08-10 09:40:00 7.89 7.90 7.89 7.90
2019-08-10 09:41:00 7.90 7.90 7.89 7.89
2019-08-10 09:42:00 7.89 7.90 7.88 7.89
2019-08-10 09:43:00 7.89 7.89 7.88 7.89
2019-08-10 09:44:00 7.88 7.89 7.86 7.86
"""
複製程式碼
處理非交易時間段的NaN資料, 將所有列都為NaN的行刪除,如下所示:
df_min_ohlc = df_min_ohlc.dropna(axis=0,how='all') # NAN值刪除 所有值都為缺失值時才刪除該行
print(df_min_ohlc.head())
"""
open high low close
time
2019-08-10 09:25:00 7.89 7.89 7.89 7.89
2019-08-10 09:30:00 7.90 7.92 7.90 7.92
2019-08-10 09:31:00 7.91 7.92 7.90 7.91
2019-08-10 09:32:00 7.90 7.91 7.89 7.90
2019-08-10 09:33:00 7.89 7.91 7.89 7.90
"""
複製程式碼
接下來我們可以呼叫小冊子《股票資料視覺化:自定義Matplotlib版股票行情介面》的程式碼繪製K線圖了,分別繪製1min和15min級別的K線圖,如下圖所示:
另外tushare還提供了其他與分時交易資料相關的介面,比如: get_sina_dd()介面獲取大單交易資料,預設為大於等於400手,也可通過vol引數指定返回具體成交量的交易資料,如下所示:
# 獲取大單交易資料,預設為大於等於400手,資料來源於新浪財經。
data=ts.get_sina_dd('600797',date = '2019-08-08')
print(data.head(10))
"""
code name time price volume preprice type
0 600797 浙大網新 15:00:00 8.01 253542 8.01 買盤
1 600797 浙大網新 14:56:18 8.01 45700 8.01 賣盤
2 600797 浙大網新 14:54:39 8.01 116400 8.01 買盤
3 600797 浙大網新 14:18:18 8.00 50000 8.00 買盤
4 600797 浙大網新 13:35:57 8.02 53100 8.01 賣盤
5 600797 浙大網新 13:33:57 8.03 42200 8.03 買盤
6 600797 浙大網新 13:25:18 8.01 64100 8.01 買盤
7 600797 浙大網新 13:25:15 8.01 41800 8.01 買盤
8 600797 浙大網新 13:22:57 8.04 135500 8.03 買盤
9 600797 浙大網新 13:22:00 8.01 44600 8.01 買盤
"""
複製程式碼
get_today_ticks()介面獲取當前交易日已經產生的分筆明細資料,不過要在交易進行中使用。
get_realtime_quotes()獲取實時分筆資料,可以實時取得股票當前報價和成交資訊,其中一種場景是,寫一個python定時程式來呼叫本介面(可兩三秒執行一次,效能與行情軟體基本一致),然後通過DataFrame的矩陣計算實現交易監控,可實時監測交易量和價格的變化。
get_today_all()一次性獲取當前交易所有股票的行情資料(如果是節假日,即為上一交易日,結果顯示速度取決於網速)。如下所示:
data=ts.get_today_all()
print(data)
"""
[Getting data:]############################################################ code name ... mktcap nmc
0 688388 嘉元科技 ... 1.470680e+06 3.365835e+05
1 688333 鉑力特 ... 7.000000e+05 1.571451e+05
2 688188 柏楚電子 ... 2.425100e+06 5.555751e+05
3 688122 西部超導 ... 2.370954e+06 2.133204e+05
4 688099 晶晨股份 ... 6.166800e+06 5.598821e+05
5 688088 虹軟科技 ... 2.791250e+06 2.612927e+05
6 688066 航天巨集圖 ... 1.011336e+06 2.293842e+05
7 688033 天宜上佳 ... 2.216313e+06 2.145303e+05
8 688029 南微醫學 ... 1.628215e+06 3.735600e+05
... ... ... ... ... ...
3743 600234 *ST山水 ... 1.447488e+05 1.447488e+05
3744 600228 ST昌九 ... 1.607191e+05 1.607191e+05
3745 600217 中再資環 ... 7.179371e+05 6.818769e+05
3746 600209 ST羅頓 ... 1.290693e+05 1.290693e+05
3747 600193 ST創興 ... 1.552611e+05 1.552611e+05
3748 600186 *ST蓮花 ... 1.741720e+05 1.741720e+05
3749 600179 ST安通 ... 3.836408e+05 1.737990e+05
3750 600163 中閩能源 ... 3.568091e+05 3.568091e+05
3751 600149 ST坊展 ... 1.927411e+05 1.927411e+05
[3752 rows x 15 columns]
"""
其中返回值包括code程式碼、name名稱、changepercent漲跌幅、trade現價、open開盤價、high最高價、low最低價、settlement昨日收盤價、volume成交量、turnoverratio換手率、amount成交金額、per市盈率、pb市淨率、mktcap總市值、nmc流通市值。
複製程式碼
關於完整程式碼可以加入小冊子交流群獲取。更多的量化交易內容歡迎大家訂閱小冊子閱讀