歡迎你們訂閱《Python數據分析實戰:構建股票量化交易系統》小冊子,學完小冊上的知識點後,必定要學以至用的方式來輔助咱們分析股票! 微信
相信你們都據說了量化交易這個東西了吧!markdown
量化交易是一種新興的系統化金融投資方法,它綜合多個學科的知識,用先進的數學模型代替人的主觀思惟制定交易策略,利用計算機強大的運算力從龐大的股票、債券、 期貨等歷史數據中回測交易策略的盈虧「機率」,經過管理盈虧的「機率」幫助投資者作出準確的決策。函數
那麼,什麼纔是普通股民所適合的量化交易打開方式呢?oop
本文就用一個接地氣的股票分析場景——Python中用數據透視表和熱力圖這兩個數據分析的利器跟蹤行業板塊熱點切換來和你們分享一下,普通股民如何去使用量化交易!ui
數據透視表(Pivot Table)對你們並不陌生,在EXCEL中就常常會用來統計分析數據。spa
Pandas這個庫是能夠取代Excel完成各自數據統計分析的,在Pandas中提供了一個相似的功能函數pivot_table()。.net
在建立數據透視表以前,咱們得清楚地明確咱們想經過透視表解決什麼問題。因此,咱們先來介紹下本期對應的股票分析場景。3d
平時咱們在股票分析的時候,除了關注指數的動態以外,還會關注板塊的動態。特別是市場不斷擴容的前提下,板塊的選擇尤爲重要。code
好比像個人話,會統計出每一個交易日板塊的一些總體動態,好比漲跌幅、總市值、換手率、上漲家數、下跌家數、領漲股票……以下所示爲2020-07-27的板塊狀況: orm
固然了,天天的板塊數據是靜態的,沒法識別出板塊的變化趨勢,因而咱們得把天天的板塊數據連接起來分析。此處咱們就先從近一個月的板塊數據中選取2020-07-27至2020-07-31這一週的數據來進行分析。
第一步是把這一週的數據從csv文件中加載到程序中,成爲DataFrame對象,以下所示:
df_bk_mon = pd.read_csv('table-bk-2020-07-27.csv', parse_dates=True, index_col=0, encoding='GB18030')
df_bk_tue = pd.read_csv('table-bk-2020-07-28.csv', parse_dates=True, index_col=0, encoding='GB18030')
df_bk_wed = pd.read_csv('table-bk-2020-07-29.csv', parse_dates=True, index_col=0, encoding='GB18030')
df_bk_thu = pd.read_csv('table-bk-2020-07-30.csv', parse_dates=True, index_col=0, encoding='GB18030')
df_bk_fri = pd.read_csv('table-bk-2020-07-31.csv', parse_dates=True, index_col=0, encoding='GB18030')
複製代碼
第二步把這週一到週五這一週的板塊數據合併爲一份。此處僅需將這些DataFrame對象簡單的級聯便可,咱們就用pd.concat()來完成。關鍵參數axis爲0表示沿着列方向將多個 DataFrame 對象拼接到一塊兒。以下所示:
df_bk_week.to_csv("table-bk-2020-07-27-31.csv", columns=df_bk_week.columns, index=True, encoding='GB18030')
複製代碼
準備工做完成以後,咱們就來介紹下如何使用pivot_table()完成數據透視表。
pandas.pivot_table函數接口介紹以下:
pandas.pivot_table (data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)
複製代碼
官方文檔對各個參數的解釋以下:
以「板塊名稱」、「交易日期」歸類作個數據透視表,「板塊名稱」在前,「交易日期」在後,這樣能夠觀察單個板塊這一週的變化狀況。以下所示:
df_bk_pivot = pd.pivot_table(df_bk_week,index=["板塊名稱", "交易日"])
複製代碼
上面的表格中BK指的是板塊的漲跌幅,SK指的是領漲股的漲跌幅,若是咱們不須要顯示這一列的話,能夠用values選擇要進行聚合的數值列,以下所示:
df_bk_pivot = pd.pivot_table(df_bk_week, index=["板塊名稱", "交易日"], values=["BK漲跌幅","上漲家數","下跌家數","總市值","換手率"])
複製代碼
以上爲pivot_table()最基本的使用方法。對於行業板塊的數據,我比較關注的是「換手率」和「漲跌家數」。
接下來我來介紹下若是用pivot_table()觀察「漲跌家數」。
我觀察「漲跌家數」數據是在某一個熱點板塊持續火爆的時候,我經過漲跌個數的比例來觀察板塊熱點的持續時間。一般一個板塊快熄火的時候,雖然有些龍頭股還在漲,可是同一板塊的跟風股會提早下跌。
咱們須要對數據作一些處理,計算出板塊的上漲比例值,以下所示:
df_bk_week["上漲比例"] = df_bk_week["上漲家數"] / (df_bk_week["上漲家數"] + df_bk_week["下跌家數"])
df_bk_week["上漲比例"]=df_bk_week["上漲比例"].round(2)
複製代碼
再作一份數據透視圖。此處用了columns=["交易日"],將交易日從index參數中抽出放進columns參數中。
df_bk_pivot = pd.pivot_table(df_bk_week, index=["板塊名稱"], columns=["交易日"], values=["上漲比例"], aggfunc=np.mean)
複製代碼
另外,aggfunc這個參數也很是重要,能夠用列表或字典來設置對數據列的計算方式,好比求和、求均值、求最大值或最小值等,默認爲求平均。不過此處咱們無需使用。
光是有一張數據透視表對我來講還不算很直觀。因而我結合Seaborn庫的熱力圖(heatmap)來顯示板塊漲跌個數的變化。效果以下所示:
根據顏色深淺的變化可知7-28和7-29日上漲股票的個數比例是比較高的,結合上證指數的走勢也能夠相吻合。以下所示:
根據顏色深淺的變化可知7-27日貴金屬和珠寶首飾板塊是當天的熱點,可是僅僅是一日遊行情,後續幾天不怎麼給力。
固然,此處我僅僅是找了一週的數據來給你們作個演示,咱們在實際分析中須要天天的板塊數據連貫性地分析,這樣能更精準找到其中的一些板塊輪動的跡象。
經過這個簡單而又實用的股票量化場景,但願可以給廣大朋友對於量化交易有一個直觀的感覺。
而後,咱們應該升級本身的炒股方式了,把本身之前炒股的那套方法,抽象成策略模型,用量化的方法去全市場回測評估,而後讓程序幫助咱們監測行情的走勢。
這個纔是普通股民所適合的量化交易打開方式!
———————————————————————————————————————————————— 你們若是想對涉及到的知識點進行更全面、更體系的從0-1方式的介紹,這裏推薦給你們個人書籍《Python股票量化交易從入門到實踐》
!天貓、京東、噹噹全面開售!
同時也歡迎你們關注個人微信公衆號【元宵大師帶你用Python量化交易】瞭解更多Python量化交易相關內容
例程中的代碼,上傳至《玩轉股票量化交易》知識星球(知識星球的目錄可點擊【閱讀】查看)。