投資大師策略回測系列(2)三一投資管理公司(Trinity Investment Management)價值型選股法則


綜合本益比、股價帳面價值比及股利收益率三項要素建立投資組合

投資大師簡介

 

三一投資管理公司(Trinity Investment Management) 創立於1974年,原本只提供投資機構客戶投資研究建議,自1980年開始為客戶管理投資組合,1999年成為美國最大的共同基金及投資管理集團之一的歐本海默基金公司(Oppenheimer Funds, Inc.)的一員。

 

至2000年第一季底為止,三一投資管理公司為客戶管理的資產總額達42億美元,其投資哲學以價值導向為主,並認為建立成功的價值型投資組合,只需要以單純而簡化的概念及系統性的設計即可,只是大部份的基金經理人不承認而已。

 

根據三一公司多年的研究,綜合本益比、股價帳面價值比及股利收益率三項要素建立投資組合,在1980至1994年的15年間,年平均投資報酬率達20.1%,每年戰勝S&P500指數達6.8%;三一投資管理公司的總裁史丹佛凱德伍德(Stanford Calderwood)特別強調股利收益對價值型投資者的重要性,並認為成長型基金經理人所使用的預測性資料,對投資組合的績效表現沒有價值。

 

投資策略說明

 

根據三一公司的研究,有三項結果:

 

  1. 1980至1994年間S&P500指數中,以本益比最低的30%股票為投資組合(每季更新替換),年平均報酬率為17.5%,而同期S&P500指數的報酬率為13.3%
  2. 1980至1994年間,以股價帳面價值比最低的30%的股票為投資組合(每季更新替換),年平均報酬率為18.1%,高出S&P500指數報酬率4.8%。
  3. 以股利收益率最高的30%股票為投資組合,年平均報酬率達18.3%,高出S&P500指數報酬率5%。

 

也就是這三者可以作為選股標準來使用,購入符合的股票。

 

計算程序

 

根據選股原則,投資程序如下:

  • 將各公司當天的的本益比由低到高進行排序,取最低的前30%公司
  • 將各公司當天的股價帳面價值比由低到高進行排序,取最低的前30%公司
  • 將各公司當天的股利收益率由高到低進行排序,取最高的前30%公司

最後我們取這三個條件的聯集,也就是任一個標準符合即可,而之所以不取交集的原因,是因為這三者同時都要滿足,就是一間本益比偏低、PB比偏低但股利率卻偏高的公司,很有可能有長期經營成長的問題,且高股利率可能是在掩飾股價長期可能走低得市場預期。

 

回測各指標

 

這邊以台積電(2330)為例,觀察三一公司所用來選股的三個指標在過去一年的回測區間的時序列圖,加上台積電這三個指標在權值前300大股票中的排序狀況:

 

 

 

 

上面是這三個指標,台積電的表現狀況,我們可以看第四張圖,就可以知道台積電在這三個指標的排序表現:

 

 

回測本策略建構投資組合損益

 

按照上述三個指標的排序,判斷任何一個排序在前30%者屬於可以購入的股票,後面就以此標準選股,來使用歷史的價格漲跌資料進行此策略的回顧測試。

 

回測參數

 

我們以假定一億新台幣為起始資金,將符合上述選股條件的股票,在進行回測的各個日期以等權重的方式,假定以當天收盤價買進,並以次一日的收盤價計算整個投資組合的損益。

回測的起始日為2019-05-02起,往前回測一年,並且為了考慮交易量與市值大小可能造成的買進困難問題,將選股範圍限縮在權值佔台灣加權指數前300大的個股內。

 

回測損益

 

假設以一億元資金開始進行投資,並且與大盤(加權指數,但為調整除權息效果的報酬指數)的績效進行比較,結果如下:

 

 

我們可以看到,此投資組合的績效要優於大盤,這可能是因為這三個條件都不滿足的公司,本身的表現就有可能在指數成分股中較差的一群,因此這群被濾掉之後,得到了不錯的結果;我們接著看每天損益波動的狀況:

 

 

可以看到整體來說,以此選股策略建構的投資組合,風險亦較大盤要小一些些,但並不顯著。值得一提的是,以回測日期2019/5/2為例,全部300檔股票的股票池中,就有193檔股票被選中,扣除因為缺少該指標而無法被選擇的股票(如金融股缺少常續性EPS),也就是有約1/3的股票,可能始終沒有任何一項指標的排序夠高,沒有被選中,才會剛好有三分之一的股票被剔除。

 

附錄:python程式範例

 

最後,本次回測以TEJ為進行投資策略績效研究所開發的平台,為方便研究使用,以TEJ開發之套件簡化python程式碼的使用,本次回測所使用的模型計算過程如下方呈獻。由於此投資策略需要計算給定任一財務指標,計算各檔股票在整體的股票池中的排序,故我們以TEJ開發之python套件「tejtool」中用來進行排序的函式「sort_crossing()」,來加速此繁複計算的過程。而回測的安排,則在tejtool的backtest()函式中安排好計算流程、持股權重的計算等等。

 

TEJ API Pyhton程式碼:

#進行各指標計算
def calculate(tejtool,param):

    tejtool.data['常續性盈餘'] = tejtool.data['常續性稅後淨利移動四季合計']- tejtool.data['歸屬非控制權益淨利(損)移動四季合計']- tejtool.data['歸屬共同控制下前手權益淨利(損)']
    tejtool.data['每股淨值'] = tejtool.data['每股淨值(F)-TSE公告數']
    tejtool.data['最近四季常續性每股盈餘'] = tejtool.data['常續性盈餘']/ tejtool.data['加權平均股數']
   
    tejtool.data['常續性本益比'] = tejtool.data['調整後股價'] / tejtool.data['最近四季常續性每股盈餘']
    tejtool.data['股價淨值比'] = tejtool.data['調整後股價'] / tejtool.data['每股淨值']
    tejtool.data['股利率'] = tejtool.data['每股現金股利'] / tejtool.data['調整後股價']
    tejtool.data['常續性本益比排名'] = tejtool.sort_crossing('常續性本益比')
    tejtool.data['股價淨值比排名'] = tejtool.sort_crossing('股價淨值比')
    tejtool.data['股利率排名'] = tejtool.sort_crossing('股利率',ascending=True)
    
    tejtool.data['門檻條件'] = 0.30
    tejtool.data['常續性本益比排名檢查'] = tejtool.check_above('門檻條件','常續性本益比排名',1)
    tejtool.data['股價淨值比排名檢查'] = tejtool.check_above('門檻條件','股價淨值比排名',1)
    tejtool.data['股利率排名檢查'] = tejtool.check_above('門檻條件','股利率排名',1)
    return tejtool.data
#設定要輸出觀測的各指標時序列圖(以設定的觀察個股為例進行繪圖)
def output(tejtool,param): 
    #最多輸出一張表,三張圖,一張圖裡最多可以塞三條線
    
    tejtool.output_indicator(['常續性本益比'])
    tejtool.output_indicator(['股價淨值比'])
    tejtool.output_indicator(['股利率'])
    tejtool.output_indicator(['常續性本益比排名','股價淨值比排名','股利率排名'])


#控制選股與否、投資比重等
def evaluate(tejtool,param):
    
    #判斷哪些股票要買或不買,然後以均等投資金額來決定持股股數
    
    tejtool.data['購入'] = tejtool.check_condition(['常續性本益比排名檢查','股價淨值比排名檢查','股利率排名檢查'],'and')

    #使用均等投資金額來分配投資比重
    tejtool.data['投資比重'] = tejtool.equal_pv()
    return tejtool.data

#安排執行calculate函式中的計算
ct.arrange_calculate()
#安排evaluate函式所定義的投資策略回顧測試
ct.back_test()