如何利用主力買賣超張數預測台灣股市趨勢:深入分析與策略指南

摘要

本文旨在探討主力買賣超張數指標與台灣股市價格表現之間的相關性,並評估該指標在市場趨勢預測和風險管理中的有效性。透過對台灣主要股票的交易數據分析,本研究發現主力買賣超張數與未來一個月大盤價格呈現顯著的負相關(-0.08)。此外,我們提出了一套基於主力買賣超數據的投資策略,旨在幫助投資者避開市場的潛在下跌風險。本文的分析不僅有助於投資者更好地理解市場力量如何影響股價,還提供了一種新的工具來增強其投資組合的風險管理。

介紹

台灣股市作為亞洲主要的金融市場之一,一直是全球和區域投資者關注的焦點。在此背景下,主力買賣超張數作為一個反映大型投資者交易行為的指標,其對股市的價格影響力不容忽視。過去的研究多集中於技術分析或基本面分析,而對於券商大額交易的研究相對較少。因此,本研究旨在填補這一空白,透過深入分析券商分點的買賣數據,探討主力買賣超與股市表現之間的關聯性。

指標公式

在本研究中,主力買賣超指標的計算方式如下:

  1. 主力買賣超加權
    • 計算每個股票的主力買賣超與該股票收盤價的乘積,這表示主力對該股票投入的資金量。 主力買賣超加權=主力買賣超張數×收盤價主力買賣超加權=主力買賣超張數×收盤價
  2. 市場總值
    • 計算所有股票的收盤價與其成交股數的乘積,表示市場總成交金額。 市場總值=收盤價×成交股數市場總值=收盤價×成交股數
  3. 日總和計算
    • 將上述兩個值對所有股票進行求和,得到每日的主力買賣超加權總和與市場總值總和。 日主力買賣超加權總和=∑所有股票主力買賣超加權日主力買賣超加權總和=∑所有股票​主力買賣超加權 日市場總值總和=∑所有股票市場總值日市場總值總和=∑所有股票​市場總值
  4. 比率計算與移動平均
    • 計算每日的主力買賣超加權總和與市場總值總和的比率,並應用20日移動平均以平滑該指標。 ind=(日主力買賣超加權總和日市場總值總和).rolling(20).mean()
    • ind=(日市場總值總和日主力買賣超加權總和​).rolling(20).mean()

透過以上指標的計算,本文旨在建立一套評估主力買賣超影響股市的方法論,並進一步分析其對未來股市價格趨勢的預測能力。

# 安裝 finlab 套件並將安裝日誌輸出到 log.txt 檔案
!pip install finlab > log.txt

# 引入 finlab 套件中的 data 模組
from finlab import data

# 從 finlab data 模組中取得券商分點交易數據,強制重新下載最新數據
券商分點資料 = data.get('broker_transactions', force_download=True)

# 處理券商分點資料,將買入和賣出數據轉換為浮點數,並依日期和股票代號進行分組求和
broker_volume = (
    券商分點資料
      .reset_index()[['buy', 'sell', 'stock_id', 'date']]
      .assign(buy=lambda df: df.buy.astype(float), sell=lambda df: df.sell.astype(float))
      .groupby(['date','stock_id']).sum()
      .reset_index()
      .pivot(index='date', columns='stock_id')
)

# 刪除原始的券商分點資料,釋放記憶體
del 券商分點資料

# 計算主力買賣超的張數,即買入量減去賣出量
主力買賣超張數 = broker_volume.buy - broker_volume.sell

adj = data.get('etl:adj_close')
close = data.get('price:收盤價')
volume = data.get('price:成交股數')

ind = ((主力買賣超張數 * close).sum(axis=1) / (close * volume).sum(axis=1)).rolling(20).mean()

相關性分析與大盤比較

在對主力買賣超張數進行計算和分析後,本文接著使用相關性分析(Correlation Analysis)來評估主力買賣超指標與大盤股價走勢之間的關聯。相關性分析是一種統計方法,用於量化兩個變量之間的線性相關程度。在本研究中,我們特別關注的是主力買賣超張數與未來一個月大盤價格變動之間的相關性。

相關係數的計算

相關係數(Correlation Coefficient),通常表示為 r,其值介於 -1 和 1 之間,其中:

  • r=1 表示兩個變量間存在完美的正線性關係。
  • r=−1 表示兩個變量間存在完美的負線性關係。
  • r=0 表示兩個變量間沒有線性關係。

在本研究中,相關係數的計算公式為:

image 4

其中,xy 分別代表主力買賣超張數和大盤指數的日收盤價。

主力買賣超與大盤的比較

為了評估主力買賣超指標對於市場趨勢的預測能力,本文將主力買賣超張數的變動與大盤指數(如台灣加權指數)的變動進行比較。透過計算這兩者之間的相關係數,我們發現了 -0.08 的負相關,這意味著當主力買賣超指數顯示買超時,大盤指數未來一個月有輕微的下跌趨勢。儘管這個相關性不強,但它提供了一個有趣的見解,即市場可能已對大型買單的影響反應過度,從而導致短期內價格的調整。

ind.loc['2022':].plot()
pct.loc['2022':].plot(secondary_y=True)
image 5
指標與0051的關係
import pandas as pd

adj = data.get('etl:adj_close')
close = data.get('price:收盤價')
volume = data.get('price:成交股數')

ind = ((主力買賣超張數 * close).sum(axis=1) / (close * volume).sum(axis=1)).rolling(20).mean()
pct = adj['0051'].shift(-20) / adj['0051'].shift(-1)

pd.DataFrame({
    'ind': ind,
    'pct': pct,
}).dropna().corr()

-0.08

回測結果摘要

本研究進行了一項回測,比較了使用主力買賣超指標(以下稱為指標)與未使用該指標的0051股票表現。時間範圍從2018年2月12日至2024年5月9日。回測結果揭示了以下重要發現:

  1. 總回報:使用指標的策略獲得了240.60%的總回報,而未使用指標的策略則為210.53%。這表明使用主力買賣超指標的策略在此期間表現更佳。
  2. 年化回報(CAGR):使用指標的策略具有21.71%的複合年增長率(CAGR),相比之下,未使用指標的策略為19.92%。
  3. 最大回撤:使用指標的策略在風險控制方面表現較好,最大回撤為-10.64%,而未使用指標的策略最大回撤達-31.30%。
  4. Sharpe比率和Sortino比率:使用指標的策略具有較高的Sharpe比率(1.99)和Sortino比率(3.24),顯示出較高的風險調整後回報,而未使用指標的策略分別為1.15和1.76。
  5. 月度和年度表現:使用指標的策略在月度和年度表現方面同樣表現優越,特別是在避免大幅下跌方面更為有效,表現在最差月份和年度的回撤幅度較小。
  6. 波動性和風險指標:使用指標的策略日常和月常波動性較低,日常波動率為10.53%,月常波動率為13.62%,未使用指標的策略分別為17.77%和18.61%。
image 6
回測結果

這些結果表明,主力買賣超指標能有效提升投資回報並降低風險,尤其是在控制最大回撤和提高風險調整後回報方面具有顯著效果。此外,使用該指標的策略在市場低迷時期能更好地保護投資,減少損失,顯示出其在市場風險管理中的潛在價值。

FinLab - 韓承佑

嗨大家好,我是韓承佑,FinLab創辦人,畢業於巴黎薩克雷大學資工博士,目前擔任臺灣量化交易協會 學術顧問、台北商業大學 創新育成中心 創業技術顧問與上市科技公司 量化交易顧問。當初,我喜歡寫程式、無意間因為軟體比賽接觸Fintech,從此開始了財經跟程式的學習之路。我們成立 FinLab 量化投資部落格,用自己研發的軟體,對台灣股市做大量快速的實驗。希望可以在量化投資的路上,當大家的「武器製造商」!