跳轉到

本益成長比(月營收截止日換股)

策略說明

PEG 策略教學

PEG(Price/Earnings to Growth ratio,本益成長比)是衡量股價相對於盈餘成長速度是否合理的指標。PEG 越低,代表股價相對於成長潛力越被低估。

本策略分為兩個部分:

  1. 營收趨勢多頭篩選:3 個月營收均線 / 12 個月營收均線 > 1.1,且當月營收不低於上月的 90%。
  2. 本益成長比排序:在符合營收條件的標的中,選出 PEG 最小的 10 檔。
from finlab import data
from finlab.backtest import sim

rev = data.get('monthly_revenue:當月營收')
rev_ma3 = rev.average(3)
rev_ma12 = rev.average(12)

# 營收趨勢多頭策略
cond1 = rev_ma3 / rev_ma12 > 1.1
cond2 = rev / rev.shift(1) > 0.9
cond_all = cond1 & cond2

pe = data.get('price_earning_ratio:本益比')
營業利益成長率 = data.get('fundamental_features:營業利益成長率')

# 本益成長比
peg = (pe / 營業利益成長率)

# 本益成長比和原訊號相乘,若不持有則相乘後等於 0
position = peg * (cond_all)

# 原訊號為 0 的不要選
# 若沒加這行且策略只選到 7 檔,之後還是會選 3 檔訊號為 0(不持有)的補足 10 檔
# 執行這行就會排除訊號為 0 的標的
position = position[position > 0]

# 選股挑本益成長比前 10 小的
position = position.is_smallest(10)

月營收公告截止日換股

position 的 DataFrame 用營收的 index,不要用收盤價的 index。

reindex 的作用

對 position 加上 reindex 月營收的日期索引後,會讓 position 的日期變成每月營收截止日。

resample=None 的行為

resample 不須另外設定,使用預設 None,不執行再平衡。將 position 想成是每列而不是每日 -- 因為使用 reindex 讓每列間隔一個月,所以執行上是隔一個月產生換股訊號。

# 月營收截止日換股
position = position.reindex(rev.index_str_to_date().index, method='ffill')

report = sim(position=position, name="策略教學範例:peg_rev", stop_loss=0.1, upload=False)
report.display()