用Python回測總經指標(3)|台灣景氣燈號|加減碼策略

  • Post author:
  • Reading time:3 mins read

國發會在12月底發布了上月景氣燈號數據,這個指標可以視為台灣總經的風向球。現進入低迷的藍燈,數值非常低,剩下12分,很久沒有這麼慘了。

截圖 2022 12 29 下午6.04.34
取自國發會
截圖 2022 12 29 下午6.14.43
取自財經M平方臉書粉絲團

然而今年股市也回檔了超過20%,如果在景氣熱絡時進場,像是去年底,那你今年肯定很難過,現在你看到藍燈,是不是認為為總經環境差,要趕緊脫出股票?
市場老手「麥克風」則有不一樣的看法,認為「藍燈」反而是末跌段買點,只是要分批進場會比較安全。我的看法也是如此,通常進入藍燈時,股市早就反映一大段了,當未來爛無可爛,反而容易出現轉機,市場經常領先經濟數據。

截圖 2022 12 29 下午6.12.42
取自麥克風臉書粉絲團

景氣燈號如何撰寫加減碼?

重點來了,許多人都知道要在藍燈分批買進,但分批加減碼究竟要如何撰寫?
通常寫策略都是一布林訊號通到底,100%持有。這就是FinLab量化平台的優勢,可以自動調控加減碼,可以自動調控加減碼,不限於固定部位,可靈活運用總經數據,把策略都自動化起來,比起外面的總經課程,更貼近實戰。

回測函數 當position 的數值除了可為布林訊號,也可以填入數值當持有部位調控,例如 0.2 為持有20%。

示範的景氣燈號加減碼策略邏輯為分5批進場。
只要近12個月內每一月景氣指標分數小於等於18時,分批買進20%部位。若景氣指標分數大於等於40時則全數賣出。舉例:若近12月內有3個月滿足條件,則持有60%,若近12月內有5個月以上滿足條件,則持有100%。
這個策略設計的背後思維在如果近12月內景氣燈號低於18分的月份越少,代表脫離藍燈谷底越遠,若近12月內景氣燈號低於18分的月份越多,則代表貼近景氣谷底,利用訊號數量去加乘持股部位。
另一個小重點在為何指標是用18與40分,而不是官方藍紅燈上下限的16分與38分?原因在策略若想要比人早一步,就要微調數值,且進入紅燈的熱絡階段,往往有所謂邪惡第五波,延遲出場有機會獲得更高報酬,而若用官方的16分當衰退指標,會發現低於16分的情況不多,所以往上微調,以增加訊號數。

from finlab import data
import pandas as pd
import numpy as np

df = data.get('tw_business_indicators:景氣對策信號(分)')
df = df[list(df['tw_business_indicators'] > 0)]

# 只要近12個月內每一月景氣指標分數小於等於18時,分批買進20%部位。舉例:若近12月內有3個月滿足條件,則持有60%,若近12月內有5個月滿足條件,則持有100%。若景氣指標分數大於等於40時則全數賣出
batches = 5
ind = df['tw_business_indicators']
sig = pd.Series([True if i <= 18 else False if i >= 40 else np.nan for i in ind], index=ind.index)
position = (((sig / batches).rolling(12,min_periods=1).sum()) * sig).ffill().clip(0,1)
position.astype(float).plot()

景氣燈號加減碼訊號曲線變化

可以發現加減碼曲線控制在 0%到100%,隨著時間不同而有不同持股部位變化。

截圖 2022 12 29 下午6.33.30

回測程式

colab 範例檔
回測程式很簡單,我們以 0050 元大台灣50 當操作台灣總經策略的標地,將上述的景氣燈號加減碼訊號傳入 0050 的 DataFrame,就會以該加減碼訊號靈活操作 0050 ,在景氣低迷時逐步入手,在景氣熱絡時拖出。
小細節是帶入回測時把交易稅率調成 ETF 適用的 1/1000。

from finlab.backtest import sim

# 將持有部位帶進0050
close = data.get('price:收盤價')
buy = pd.DataFrame({'0050':position})
buy = buy.reindex(close.index, method='ffill')
report = sim(buy, upload=False, tax_ratio=1/1000)
report.display()

回測結果發現該策略可以取得比長期持有0050還好的績效,熊市時期的2007與2022回檔幅度較小,波動曲線更為漂亮。

newplot 49

Ben

Python 軟體工程師與量化策略研究員。 鑽研資料工程、網頁後端、資料視覺化、量化交易策略開發。 投資主力在台股市場,量化策略為主、質化分析為輔,追求人機攜做最佳化。逐步將觸角延伸到總經、美股、加密貨幣,朝更全方位的交易人邁進。