營建產業專用指標
運用營建股「合約負債」的特性進行限定產業選股。合約負債代表建商已簽約但尚未認列的預售屋收入,金額越高表示未來潛在營收越大。
策略邏輯
策略使用 data.universe(category='建材營造') 將回測範圍限定在營建產業,避免跨產業比較不同財報特性的公司。
核心指標為「合約負債佔股本比率」(ce_ratio),代表每單位股本對應的潛在未認列營收。選股條件如下:
- ce_ratio > 0.5 -- 合約負債佔股本比率超過 50%,表示未來營收有充足保障
- 合約負債成長率介於 5% 至 50% -- 合約負債正在成長但不過度膨脹,避免異常數據
同時滿足兩個條件的標的,依 ce_ratio 排序取前 5 名持有。
程式碼
from finlab import data
from finlab.backtest import sim
import pandas as pd
# 限定回測產業範圍
with data.universe(category='建材營造'):
# 資料引入
close = data.get('price:收盤價')
contract_debt = data.get('financial_statement:合約負債_流動')
contract_debt_gr = (contract_debt / (contract_debt.shift()) - 1)
equity = data.get('financial_statement:股本')
# 計算合約負債佔股本的比率,比率越高代表未來潛在貢獻每股營收越高
ce_ratio = (contract_debt / equity)
# 選股條件
cond1 = ce_ratio > 0.5
cond2 = (contract_debt_gr > 0.05) & (contract_debt_gr < 0.5)
cond_all = cond1 & cond2
result = ce_ratio * cond_all
position = result[result > 0].is_largest(5)
# position_limit 限定單檔標的最多持有30%部位,避免標的數過少時產生重壓的非系統性風險
report = sim(
position,
resample='M',
position_limit=0.3,
stop_loss=0.1,
fee_ratio=1.425 / 1000 * 0.3,
upload=False,
)
report.display()
策略特色
- 使用
data.universe限定產業範圍,確保指標在同類公司間有可比性 position_limit=0.3限制單檔部位上限為 30%,避免持股過度集中stop_loss=0.1設定 10% 停損,控制個股下行風險- 每月換股(
resample='M'),搭配營建業合約負債的季頻更新節奏 - 手續費以券商三折優惠計算(
fee_ratio=1.425/1000*0.3)