
Table of Contents
本益比是最常用來判斷股價是否合理的指標之一,其公式為本益比=每股股價/每股盈餘。若本益比太高代表目前的股價高估、偏離合理的價格,當前獲利狀況不足以支撐如此高的股價,未來股價修正、下跌的機會高;反之,若本益比太低代表目前股價低估、偏離合理的價格,股價並未充分反映目前獲利狀況,未來股價回升、上漲的機會高。
早在1970及80年代,Ball(1978)及Basu(1983)就證明在美國市場本益比能有效的解釋股票報酬率,而陳俊佑(2011)利用台灣市場資料實證亦顯示本益比的投資績效表現佳。故從理論或實證上,本益比很適合做為投資參考的依據。
在投資的世界中,「買低、賣高」是經典不敗的投資法則,而如何買低、賣高,可以從橫斷面及時間序列兩種面向來操作:
綜合上述,本益比河流圖是一好用的投資工具,本文重點是介紹如何利用TEJ API 和視覺化套件將本益比河流圖繪製出來,作為投資操作的參考依據。
本文使用 MacOS 作業系統以及 VScode 作為編輯器
輸入相關參數,透過TEJ API取得計算本益比相關的股價資訊、財務資訊,資料處理步驟如下:
導入需要用到的套件(tejapi、matplotlib)
import tejapi
import matplotlib.pyplot as plt利用tejapi設定要查詢的證券碼及起(gte)、迄日(lte)參數,還有每股盈餘的欄位。選用欄位包括證券代碼(coid)、財務資料日(mdate)、每股盈餘(ac_3990)。
company = '2330'
price_data = tejapi.get('TWN/EWIFINQ', # tej 財務資料庫
                coid = company,
                mdate={
                    # 起始日期    
                    'gte':'2022-01-01', 
                    # 結束日期
                    'lte':'2022-12-31'}, 
                opts={'columns': ['coid','mdate','ac_3990']}, 
                paginate=True
            )利用tejapi函數代入3個參數:設定要查詢的證券碼及起日(gte)、迄日(lte)、收盤價(close_d)參數。
company_data = tejapi.get(
        'TWN/EWPRCD',  # 資料庫
        coid=company,  # 股票代碼
        mdate={
                    # 起始日期    
                    'gte':'2018-01-01', 
                    # 結束日期
                    'lte':'2018-12-31'}, 
        paginate=True,  
        opts={'columns': ['mdate', 'close_d']},
    )計算本益比,利用每天的收盤股價去除以當季每股盈餘,得到當天本益比。前一節已利用tejapi.get()函數取得財務相關資料(df),此節利用matplotlib.pyplot裡面的plot函數來繪製本益比河流圖,並且進一步進行實證分析。以下為操作步驟:
print(price_data['ac_3990'])
print(company_data['close_d'])我們可以看到一年內四季的每股盈餘資料(四筆)和一整年的收盤資料(247筆)。
2. 將每一季開盤天數存入quarter參數當中,在迴圈內做該天收盤價除以對應的每股盈餘。
close = company_data['close_d']
Price_to_Earnings_Ratio = []
quarter = [60,63,63,61]
quarter_count = 0
season_days = 0
init_day = 0
while quarter_count<4:
    season_days = quarter[quarter_count] # 每季有幾天
    print(init_day+season_days)
    for i in range(init_day, int(init_day+season_days)):
        Price_to_Earnings_Ratio.append(round(company_data['close_d'][i]/price_data['ac_3990'][quarter_count]))
    init_day = init_day + season_days
    quarter_count += 13. 設定要畫出本益比的倍數。
x = [x for x in range(0, len(close))]
Price_to_Earnings_Ratio_30 = [ratio * 30 for ratio in Price_to_Earnings_Ratio]
Price_to_Earnings_Ratio_35 = [ratio * 35 for ratio in Price_to_Earnings_Ratio]
Price_to_Earnings_Ratio_40 = [ratio * 40 for ratio in Price_to_Earnings_Ratio]
Price_to_Earnings_Ratio_45 = [ratio * 35 for ratio in Price_to_Earnings_Ratio]
Price_to_Earnings_Ratio_50 = [ratio * 50 for ratio in Price_to_Earnings_Ratio]4. 畫出本益比河流圖。
plt.plot(x, Price_to_Earnings_Ratio_30, label='Ratio=30', color='blue') 
plt.plot(x, Price_to_Earnings_Ratio_35, label='Ratio=35', color='blue') 
plt.plot(x, Price_to_Earnings_Ratio_40, label='Ratio=40', color='yellow')
plt.plot(x, Price_to_Earnings_Ratio_45, label='Ratio=45', color='brown')
plt.plot(x, Price_to_Earnings_Ratio_50, label='Ratio=50', color='purple')
plt.plot(x, close.tolist(), label='K line', color='red') # 畫出收盤價曲線
plt.title('Price_to_Earnings_Ratio')  # 設定圖形標題
plt.xlabel('Days')  # 設定X軸標籤
plt.ylabel('Ratio')  # 設定Y軸標籤
plt.legend()  # 添加圖例
plt.show()

本篇介紹如何利用TEJ API將本益比河流圖利用視覺化套件呈現,投資人就可藉由觀察個股的本益比河流圖,判斷目前該股所處的相對位置、進行「買低、賣高」操作。以本文台積電的本益比河流圖為例,使用者可以輕易的觀察市場投資人給台積電合理的本益比大約在那個區間,判斷目前台積電股價是否合理。若想要更精確的利用本益比河流圖判斷合理股價,則需要把對公司未來的預期考慮進來或改用預期的每股盈餘計算本益比。
溫馨提醒,本次介紹與標的僅供參考,不代表任何商品或投資上的建議。之後也會介紹使用TEJ資料庫來建構各式選擇權模型,所以歡迎對選擇權交易有興趣的讀者,選購TEJ E-Shop的相關方案,用高品質的資料庫,建構出適合自己的訂價模型。