好用Package:用ffn分析時間序列

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

但是DataFrame就夠了嗎?

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

救星:ffn (Financial Functions for Python)

th

所以這時候,你的救星就出現了,叫做 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()
1 2 1

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

prices.plot()
2 3 1

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

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

ffn提供的functions

prices.rebase().plot()
3 4 1

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

下跌幅度

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

prices.to_drawdown_series().plot()
4 3 1

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

prices.plot_corr_heatmap()
5 3 1

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

stats = prices.calc_stats()
stats.display()
6 3 1

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

FinLab - 韓承佑

嗨大家好,我是韓承佑,FinLab創辦人,畢業於巴黎薩克雷大學資工博士,目前擔任臺灣量化交易協會 學術顧問、台北商業大學 創新育成中心 創業技術顧問與上市科技公司 量化交易顧問。當初,我喜歡寫程式、無意間因為軟體比賽接觸Fintech,從此開始了財經跟程式的學習之路。我們成立 FinLab 量化投資部落格,用自己研發的軟體,對台灣股市做大量快速的實驗。希望可以在量化投資的路上,當大家的「武器製造商」!