本益成長比(月營收截止日換股)
策略說明
PEG(Price/Earnings to Growth ratio,本益成長比)是衡量股價相對於盈餘成長速度是否合理的指標。PEG 越低,代表股價相對於成長潛力越被低估。
本策略分為兩個部分:
- 營收趨勢多頭篩選:3 個月營收均線 / 12 個月營收均線 > 1.1,且當月營收不低於上月的 90%。
- 本益成長比排序:在符合營收條件的標的中,選出 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 讓每列間隔一個月,所以執行上是隔一個月產生換股訊號。