跳至主要內容
FinLab

好用Package:用 ffn 分析時間序列|Python 財經時間序列分析教學

Pandas 的 DataFrame 可以很方便的幫我們處理時間序列,只需要短短幾行,就能達到在其他程式語言要寫數十行的功能。

但是DataFrame就夠了嗎?

當我們在處理財務金融時,常常會需要分析時間序列(例如股價),雖然我們可能都知道什麼是maximum dropdown、什麼是sharp ratio,什麼是daily return,但是有時候用dataframe來計算,還是免不了寫一些數學計算,增加程式碼的複雜度,讓閱讀程式碼變得比較辛苦。

救星:ffn (Financial Functions for Python)

ffn (Financial Functions for Python) 時間序列分析套件介紹

所以這時候,你的救星就出現了,叫做 ffn,ffn是一個分析時間序列的package,只要 import ffn,你的 dataframe 就會瞬間多了很多能力!接下來我們就來看看是什麼能力吧!

這次的程式碼都會在google colab上,大家可以直接打開網頁就開始跟我們一起玩耍吧!

首先,我們必須要先安裝ffn,安裝的方式非常的直覺:

顯示程式碼
!pip install ffn

這樣就安裝好囉!上式中的驚嘆號代表我們將這段command line語法,輸入在jupyter來安裝,這又就不需要額外再開啟terminal了!

安裝好了之後我們就可以開始寫程式囉!

利用ffn取得股價

有了ffn我們可以很輕易的取得多檔股票的股價,ffn的底層是使用yahoo api,所以同樣也可以抓台股或其他國際股市喔!

顯示程式碼
import ffn
 
prices = ffn.get('2330.TW, 1101.TW')
prices.head()

用 ffn.get 取得台積電與台泥股價的 DataFrame

可以發現這個股價的格是就是我們熟悉的dataframe耶!所以我們一樣可以使用一些dataframe既有的功能,例如「.plot」來繪圖:

顯示程式碼
prices.plot()

用 DataFrame 的 plot 繪製台積電與台泥股價走勢圖

繪完圖後發現,雖然我們可以比較「2330」台積電,跟「1101」台泥的股價,但是他們的起始股價是不一樣的,所以無從比較報酬率。

想要比較報酬率,我們可以用「ffn」新增的額外功能「rebase」:

ffn提供的functions

顯示程式碼
prices.rebase().plot()

用 ffn 的 rebase 將股價起始值統一後比較報酬率

這樣就可以讓股價的起始值相同囉!這是ffn提供的眾多功能之一,但你不用額外學一個新的資料表示法,而是直接對dataframe操作就可以了!所以說ffn有點像是dataframe的補充包,讓我們來看看還有哪些好用的功能吧!

下跌幅度

我們可以藉由ffn來計算並比較dropdown,也就是比較虧損的幅度:

顯示程式碼
prices.to_drawdown_series().plot()

用 ffn 的 to_drawdown_series 繪製股票下跌幅度走勢圖

或是我們之前教過的heatmap,也一行就搞定了

顯示程式碼
prices.plot_corr_heatmap()

用 ffn 的 plot_corr_heatmap 繪製股票相關係數熱力圖

最後我們也可以來計算這兩檔股票的歷史數據分析:

顯示程式碼
stats = prices.calc_stats()
stats.display()

用 ffn 的 calc_stats 計算台積電與台泥的歷史數據分析統計表

這個輕量級的package有很多簡單的語法,可以快速幫助我們進行報酬率的分析 而且所有的功能都是使用dataframe擴增,所以不用擔心要學新的結構,滿小巧可愛的!大家可以安裝起來玩玩看喔!

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始