選股策略回測有新功能!包含權重多空對沖、Sunburst 產業分析、PandasTA 技術指標 – FinLab 0.3.2.dev 再進化!

最近市場行情不好,多多研發新的選股策略,開發新功能,你一定要知道的市場週期,並且順應市場週期的發展,才不會每次都錯失良機,甚至是買在高點。你可以跟著 FinLab 加強策略,隨著我們研發新功能,都會是用戶最需要的,也是我們覺得可以幫到大家的,所以趁現在瞭解一下有哪些新功能吧!趁著現在熊市。

熊市做什麼

1. 熊市是給你研發選股策略用的

很多人遇到熊市就去放假去,好好平復心裡的創傷,對於投資理財放了個假,過個一年半年,回來看,股市又不知到去哪裡了。

2. 機會是給準備好的人的

不要等到牛市一頭熱,別人做什麼交易,自己也要跟著做,哪裡有好康到處尋覓,可能聽到的好康,都是別人已經要倒貨的好康。

3. 萬年如一日,一日如萬年

發揮十年磨一劍的精神,要做就做用好幾年的策略,而不是看最近什麼好做,而做什麼,這樣容易迷失在交易得到路上,學而不精。

4. 永遠都在研發策略

你說你爆虧了一波,我也是呀!心境上除了比較少看價格的波動以外,我還是不斷的在改良交易策略,研發新的功能。先把下一階段的策略都佈局好,等到行情一來,抓的早,佈得滿,抱到好。

就算你有再好的策略,但是因為人性,還是可能佈局在高點,停機在低點。所以現在不要再猶豫了,現在把策略都研發好,等到該賺的時候才賺得到。

策略新功能

回測要有好的穩定的績效,要有更多讓績效變穩定的功能,針對熊市行情,大家比較保守,希望產業可以平均分配,希望可以融券對沖風險,我們都聽到了,所以特別研發了一些功能,廢話不多說,趕快來揭曉這禮拜的新功能。介紹 0.32.2.dev 版本的 FinLab Package 有什麼樣的新功能!

1. SunBurst 讓你一眼看出目前股票部位的產業偏好

這是我們神燈精靈 Ben 做的新功能,可以顯示當前的股票,有哪些產業,產業的偏重是哪一塊,詳細內容請見這一篇完整的文章

2. 回測支援多空對沖

FinLab Package 終於支援做空了,假如你原本就有一個好策略,可以做空 0050 試試看,雖然報酬率可以能會下降,但是風險也會大幅縮小!非常適合我們做多檔股票資產配置使用,

我只是很納悶,怎麼好用的功能,我怎麼不早點來做?XD

做空的方式如下:

from finlab import data
from finlab import backtest

close = data.get('price:收盤價')

position = close < 0
position['2330'] = 0.5
position['1101'] = -0.5

r = backtest.sim(position)
r.display()
image 15

另外值得一提的是,新的版本 position 除了以前的布林訊號 (True/False) 外,也可以使用權重!所以上方程式碼,就是 50% 比重給 2330 做多,50% 給 1101 做空。

這樣的權重分配方式,完全兼容之前的版本,也就是 position 是 True / False 的狀況,因為 True 在電腦運算中,本來就代表 1 ,而 False 代表 0。權重都是 1 的情況下,程式就會跟以前一樣平均分配資產喔。

以下是我最近在研發的台股策略,假如額外去空 0050 做對沖,會如何呢?

選股策略
原始選股策略

由於這個策略績效滿好的,所以我拿出20%來融券 0050,效果如下

選股策略
使用20%的 0050 融券
選股策略對沖前後對照
下跌風險(橘色為沒有對沖,藍色為對沖)

可以發現報酬率大幅縮水了,但是回測期間的最大跌幅 (Max Drawdown) 只剩下 -10%,對沖掉大盤的風險,心情更不容易起伏,但是要注意的是,這邊回測時,程式並不會幫你模擬融卷回補喔!所以真正操作的時候,可能要稍微留意融券回補的那幾天,可能會無法像是模擬一樣,實際操作可能要用其他的方式,例如期貨或是同類型 ETF 的融券。另外,另外要注意的地方是,不論是現貨、融券部位,在此並不是以「張」為單位,而是「資金比例」,在實際操作時,要記得隨時檢查比例不要差太多,因為融券放空,虧損時,部位會增加喔!也就是越虧風險越高,大家要注意比例並且在融券虧損時減碼喔!

3. 支援 Pandas_ta 計算技術指標

Pandas_ta 最近一兩年算是計算技術指標的後起之秀,原因在於 TaLib 有時候實太難安裝了,而且技術指標就只有那100個,都是老調重彈,沒有更新。有鑒於此,Pandas_ta 採用純 Pandas 計算技術指標,跟不同的作業系統有比較好的相容性。另外,Pandas_ta 也有很多最新的技術指標,例如 supertrend indicator。有非常多沒有看過的指標,像是「Even Better Sinewave 」,聽起來實在是非常有趣呀!這些都可以在 Pandas_ta 文檔中找到。

我們將 Pandas_ta 與 Finlab 整合,使用方式非常的簡單,就跟以前一模一樣,用一行簡短的程式,就可以計算兩千檔股票的數值:

from finlab import data

values = data.indicator('supertrend')

此時,程式會優先搜尋 TaLib 中是否有對應的函式,假如沒有的話,就會搜尋 Pandas_ta。可以讓你一次把所有股票的技術指標一次計算出來。缺點是 Pandas_ta 計算的速度比較慢,所以運算時要稍微等待一下。

下一個階段做什麼?

既然現在回測已經支援權重,那是不是該回測一些權重分配的演算法呢!我們將陸續整合資產配置演算法,PyPortfolioOpt,將股票權重做更有效的配置。看看究竟原本的策略平均分配,用風險報酬最佳化後,產生的權重,是否會有更好的表現?

假如有任何的想要新增的功能,也歡迎在 discord 給我們一些建議喔!

FinLab - 韓承佑

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