跳轉到

營建產業專用指標

運用營建股「合約負債」的特性進行限定產業選股。合約負債代表建商已簽約但尚未認列的預售屋收入,金額越高表示未來潛在營收越大。

詳細文章內容

策略邏輯

策略使用 data.universe(category='建材營造') 將回測範圍限定在營建產業,避免跨產業比較不同財報特性的公司。

核心指標為「合約負債佔股本比率」(ce_ratio),代表每單位股本對應的潛在未認列營收。選股條件如下:

  1. ce_ratio > 0.5 -- 合約負債佔股本比率超過 50%,表示未來營收有充足保障
  2. 合約負債成長率介於 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