揭秘庫藏股:庫藏股投資策略再優化,股市條件探勘(Part 2)

  • Post author:
  • Reading time:4 mins read

摘要

這篇文章參考了數篇論文,並採用事件分析法去研究庫藏股的超額報酬。假如還不清楚什麼是庫藏股,可以參考上一篇

我們發現股票價格上漲主要集中在宣告初期,但到第四十天左右漲幅消失,甚至出現小幅下跌。並且,股價淨值比、過去二十天的報酬率以及流動資產占總資產比例這三項因素在統計上顯著影響了庫藏股宣告前的股票表現。

最後,我們提出一種基於庫藏股宣告的交易策略,並使用FinLab回測引擎進行模擬,該策略的模擬結果達到了年化約 30% 的報酬率。

論文參考

經過深入分析以下幾篇論文:《庫藏股宣告效果的實證研究》、《庫藏股買回宣告效果及其影響因素之研究》,以及《台灣上市公司庫藏股買回宣告對股票報酬之影響》,我們整理出了幾個特別有趣的因子。這些因子對於理解庫藏股的影響及其在市場上的表現尤為重要。這些因子包括:

  1. 股價淨值比
  2. 宣告前的異常報酬率
  3. 公司是否屬於電子產業
  4. 公司的流動現金是否充足
  5. 公司的市值

這些發現提供了對庫藏股宣告及其市場反應更深入的見解。

事件交易分析法

可以觀察到,漲幅都集中在前幾天。而且,到第四十天就沒有漲幅了,到最末尾甚至有一點跌幅。

image
異常報酬率圖表

由於異常報酬率集中在庫藏股宣告的這幾天,因此後續分析都聚焦在庫藏股開始後五天。

各式相關的因子

在我們的研究中,我們定義了以下變數並執行了線性回歸分析

  • Y:庫藏股公告前五天的報酬率
  • X1:股價淨值比
  • X2:過去二十天的報酬率
  • X3:市值
  • X4:流動資產占總資產的比例
  • X5:若屬於電子產業則為1,否則為0

在這次分析中,我們觀察到X1(股價淨值比)、X2(過去二十天的報酬率)、X4(流動資產占總資產的比例)的p-value達到了顯著水平,這表明這些因素對庫藏股宣告前的股票表現有顯著影響。具體來說,股價淨值比較低、過去二十天報酬率下降較多、以及流動資產占總資產比例較高的股票,在庫藏股宣告前五天的漲幅越大。

image 2

交易策略

值得注意的是,假設庫藏股會在 T+0 的收盤後公布,而這會使得 FinLab 的回測引擎在 T+2 的開盤買入。但實際上,在 T+1 的開盤時就能買入了,所以我們需要對 position 做 shift(-1)。

import finlab
from finlab import data
from finlab.backtest import sim
import pandas as pd

close = data.get("price:收盤價")

# create event dataframe
start_buy = data.get('treasury_stock:預定買回期間-起')
start_buy = pd.DataFrame({
  "stock_id": [stock for stock in start_buy.columns for _ in start_buy[stock].dropna()],
  "dates": [date for stock in start_buy.columns for date in start_buy[stock].dropna()]
})
start_buy["value"] = 1
start_buy = start_buy.pivot(index="dates", columns="stock_id", values="value").notna()
start_buy = start_buy.reindex(close.index, columns=close.columns).fillna(False)
start_buy = start_buy & (~start_buy.shift(-1).fillna(False))

pb = data.get('price_earning_ratio:股價淨值比')

prev_return = close.pct_change(periods=20)

liquid_asset = data.get('fundamental_features:流動資產')
total_asset = data.get('financial_statement:資產總額')
liquidity = (liquid_asset.ffill().bfill() / total_asset.ffill().bfill()) * (close > 0)
liquidity = liquidity.fillna(0)

position = start_buy
position = position & (pb < 1)
position = position.shift(-1).rolling(5).sum().fillna(0)
report = sim(position, trade_at_price="open", fee_ratio=1.425/1000*0.2, market='TW_STOCK')
report.display()

績效如下,還算不錯的一隻策略。

image 8

結論

總結來看,庫藏股不僅是企業資本操作的重要工具,也為市場參與者提供了獨特的投資機會。通過理解庫藏股的機制和其對市場的影響,投資者可以更加有效地制定策略,並利用相關的市場動態來追求盈利。