1. 程式人生 > 程式設計 >Python量化交易進階講堂-股票分筆資料跨週期處理

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流通市值。
複製程式碼

關於完整程式碼可以加入小冊子交流群獲取。更多的量化交易內容歡迎大家訂閱小冊子閱讀