筆者研發並發表大市探熱針「恆指沸騰指數」後,在 Blog 裏曾掀起一番討論如何提升其測市的表現。及後筆者受到 Blog 友 Roy 的啟發,研究大市成交量對回報的影響,目標是為測市指標安裝「警報器」或「第二引擎」,務求進一步提升指數基金投資法的長期回報率。
經過一系列的研究和測試,現將研究過程及結果分別在上、下兩篇發表。筆者認為,探索的過程和結果同樣重要,而且也很享受著過程中將大學的統計知識溫故知新。雖然本篇比較沉悶,但還是讓筆者發一下寫統計教科書的癮吧! :D
探索大市成交量數字
在沸指的討論中,筆者在回應 Roy 的貼文時已即時提出:「今日的成交量不能直接跟30年前的成交量比較⋯⋯較理想的做法是利用恆指或大市總市值 Normalize。」需知道 30年前一日有 10億成交已是大新聞,今日過千億成交卻是等閒事。要知道成交量(以金額計)受大市氣氛、貨幣供應以及大市水平等因素影響,而我們有興趣的只是相對的大市氣氛,希望用交投量評估市場是死寂、冷清、活躍還是熾熱,所以便有「正常化」(Normalization)的必要。
最理想的正常化分母是大市總市值。用每日成交金額除以大市總市值,得到的便是整個市場當日股票易手的比例。舉個簡單例子:假設 iPhone 交易所共有 1,000 部 iPhone X,每部價值 $10,000,總市值就是 $1千萬;今天交易所買賣了 8 部手機,總值 $80,000,易手的手機佔大市總值便是 $8萬/$1千萬 = 8部/1,000部 = 0.8% 或 8‰(1‰ = 0.1% = 10 點子,筆者工作關係習慣使用千分率)。假設 iPhone 的價格現在被炒高一倍至 $20,000 一部,但假設交易數量不變,易手量佔市值依然是 8‰ = $16萬/$2千萬。這例子說明利用總市值 Normalize 後的成交量(即「成交比例」),不會受貨幣供應或股價因素影響。
那麼市場上有 0.8% 的股票易手,算是死寂還是熾熱?這便要看歷史數據了。
港交所主板的歷史成交金額以及歷史市值的數據,可以簡單在港交所網站免費取得。數據大約包含 30 年歷史——歷史成交額由 1986年 4月起提供每日數據,而歷史市值同樣由 1986年4月起提供,但僅提供每月月末的市值數據,直至 1994年12月末才開始提供每日收市市值。30年每月數據,覆蓋和頻率剛巧切合筆者就沸騰指數歷史表現的分析。如果讀者希望做更高頻率的分析,可能就需要放棄某段歷史,或另找數據庫了。
得到數據後,便可以為 30 年歷史中的每個月,計算平均每個交易日的「成交比例」。對於一個曆月而言,算式如下:
成交比例 = 平均每日交易金額 / 平均市值
其中 每日交易金額 = 該曆月的成交金額總和 / 交易日數
平均市值 = ( 該曆月月末的總市值 + 上一曆月月末的總市值 ) / 2
結果如下圖:
在 Excel 成圖後筆者第一反應是暗喜,因為數據反映 30 年來的成交比例並沒有翻天覆地的改變。縱使 Trendline 是微微向上,反映現在購買股票的渠道多了方便了,也許也因為多了些程式交易(Algo Trading),但在 Order of Magnitude 上並沒有太大的變化,歷史數據應該會很有參考價值。這正如恆指的歷史股息率和市盈率在過去 30年的區間並沒有太大的變化,使得「恆指沸騰指數」具有參考價值。
「主板熱鬧指數」的構築
由於歷史數據顯示成交比例成上升趨勢,必須去除此趨勢(即 De-Trend)數據才能用於未來測市。例如 80、90年代曾有不少日子成交比例低於 2‰,但金融海嘯後這現象基本上已不會發生。如果我們單看成交量的歷史數據並發現成交比例低於 2‰ 的日子是有利於後市,這結果一來根本在未來就沒有實用價值,二來只是敍述了某段歷史的表現(即 「2‰ 以下表現較佳」只是代表了「80、90年代表現較佳」而非表示在此水平的成交比例的一些實際意義,是統計學中某程度的共因謬誤 Confounding Error)。
認清要 De-Trend 之後,問題來了,要用甚麼方法來 De-Trend?這個是統計學中時間序列(Time Series)的課題。坦白說筆者當年大學上時間序列課時都是得過且過,到現在「書到用時方恨少」,所以都是用自己三教九流的方法,大抵沒有正統統計學基礎。
第一個想法是做差分(Differencing),即每項減去之前一項。這方法用來套入 AR、MA 模型做預測是好,但用來做指標檢測水平卻沒什麼作用。
第二個想法是用線性迴歸(Linear Regression),把一條最佳直線當成是最佳趨勢線放到序列上,然後每個項減去趨勢線的相應項。然而盲目套用這方法有兩大謬誤:
- 線性迴歸的基礎假設是殘差(Residual)跟從常態分佈,然而觀乎成交比例的數據,大部分日子風平浪靜少部分飆升亢奮熾熱,很明顯不是 Normally distributed。
- 利用 1987-2017 整整 30 年數據找出最佳直線放在圖上,再用這直線來 De-Trend 1987 年的點,意味分析員在 1987 年有超能力預知 30 年後的成交比例水平。
處理第一個問題的過程也很意外的。筆者在利用統計軟件探索數據時,無意中發現成交比例的數據取自然對數(Natural Logarithm)後,竟然大致遵從常態分佈(見下圖)。即是說成交比例大致遵從對數常態分佈(Lognormal Distribution)。讀者不要被其名字嚇壞了,其實日常生活中很多東西都可以用對數常態分佈描述模型的,例如是一頭牛的牛奶產量、一個地方的雨量、一個病毒的潛伏期等等。更甚者,曾淵滄博士的曾氏通道,說穿了就是假設恆指跟從對數常態分佈,然後做線性迴歸(當然筆者在前文指出這個假設不太好,恆指的對數要比常態分佈表現得更尖峰厚尾就是了)。可以說,數學上,筆者往後的動作是跟曾氏通道分析是一致的,但筆者在統計學上的論證(看似)比較嚴謹。
要處理第二個問題,方法就是避免使用未來的數據去分析過去的數據點。換句話說,就著每一個數據點,我們都可以利用該點之前的所有數據點(的對數),以迴歸做一條趨勢線。讀者可能也聽說過「移動曾氏通道分析」 (可參考此 Blog 文章),正正就是這個概念了。不過,這就要犧牲最初幾年的數據點,因為利用最初幾年這麼少觀測點所畫成的趨勢線,基本上是不準確的。由於成交比例圖看似首 10 年和次 10 年來了一個循環,筆者決定犧牲首 10 年的數據,製作 20 年歷史的「主板熱鬧指數」。
以 1996 年 12月的數據點為例,筆者利用 1986年 12月 至 1996年 11月共 120 個月的數據,做一次對數線性迴歸並做出一條趨勢線,然後利用這條趨勢線預測下一個數據點(即1996 年 12月)的成交比例。由於下一個月的成交比例是隨機的,所以我們只能給予一個隨機分佈去描述我們的預測。根據我們的假設,這個隨機分佈就是對數常態分佈(Lognormal Distribution),而迴歸結果能給予這分佈的參數(Parameters)。利用這個分佈,我們可以描述,有多大的機會,下一個月的成交比例會在某數值之下。
1996年 12月的實際平均成交比例在 2.446‰,而根據模型預測,有 83.4% 的機會成交比例會在此數字以下,只有 16.6% 的機會成交比例會在此數字之上。換人講的說話,就是考慮歷史趨勢後,1996年 12月的實際成交比例是偏高的;而至於有多高,就是大約每 6 個月有 1 個月(16.6% = 1/6)的成交比例比這個月的要高;另外 5 個月要比這個月的要低。
這個 83.4% 機會率,就是筆者新開發的「主板熱鬧指數」;指數依然是 0-100 為限,指數愈高代表主板交投愈熾熱,指數愈低代表主板交投愈疏落。
將上三段重覆 239 遍,建立 239 個迴歸模型後,就能得到下圖(實際上建立這 239 個迴歸模型只是一分鐘的 Excel 工作;預備分析用的數據所花的時間何只百倍):
至此「主板熱鬧指數」的構築大致完成,下篇將會探討大市過往在不同交投氣氛下的後市表現,以及如何利用「主板熱鬧指數」進一步提升「恆指沸騰指數」的回報表現。
真是極有營養的教學呢,謝謝福祿兄的分享👍
回覆刪除謝謝 Cherry!我也明白這篇文章很難消化 😅 但愈寫愈大癮,最後寫了篇論文 :P
刪除福祿壽兄, 感謝你的大作!!! 很想知道熱鬧指數與指數表現的關係, 期待你下一篇大作。
回覆刪除二當家曾經也以HIBOR, FEDERAL FUNDS RATE, UNEMPLOYEMENT RATE, 樓市平均租金回報率, 交投價/量, 銀行結餘等希望找到一個 CORRELATION, 可惜暫時未有成果。
回覆刪除感謝二當家兄的欣賞和期待!看來下篇要讓你失望了,哈哈!
刪除我想,數學 / 統計學底子較強的人也希望用迴歸等數學方法找出關聯性或所謂「發達方程式」,但是我發現愈探討愈難:
其一是傳統的統計學有很多假設性上的限制。譬如說上述分析中我已經很小心的去證明 ln(成交比例) ~ Normal,但迴歸分析的真正要求不只是 Residual ~ Normal,還要 Independently and identically distributed (i.i.d.) Normal,但明眼人一看就知沒可能 independent 的,今個月跟上個月的成交量是有時間性上的關聯,即是 autoregressive。實際上 Financial Data 很難真正滿足統計學對於假設的要求。
其二是雖說 Financial Markets 不是 perfectly efficient,但在大是大非上還是蠻 efficient 的,如果真的有很高的歷史長河的 Correlation,我們散戶憑什麼 Cap 這條水?
我傾向用 Distribution-free 的方法,例如上次的「沸騰指數」;但這次「熱鬧指數」我暫時沒想到更好的 De-Trending 方法,方才出此下策。長遠我比較傾向較近期 Develop 的各種機器學習演算法,不過自己工作繁忙沒有很多時間去學習⋯
Btw, 上面 autoregressive 應是 autocorrelated :)
刪除Sorry 福兄唔係撥你冷水,但crudely咁睇,主板熱鬧指數很容易便走向80甚至90以上,false signal頻現,相比下大市沸騰指數似乎有參考價值得多。
回覆刪除哈哈,R兄似乎在為下篇內容做節目預告呢 :P
刪除首先我猜 R兄 的意思是出入 [80-100] 這個 Range 的次數,熱鬧指數比沸騰指數要頻密吧。如果單從出現的頻率而言,因為兩個指數都是以 Percentile 定義,所以不應該存在很大差異。
幸好熱鬧指數並不是出入市的指標--請先容許我賣個關子 :) 但如果現在要延續「沸騰指數」乃「大市溫度計」的比喻,則「熱鬧指數」比較像是「大市濕度計」。我們不會單憑濕度去決定穿甚麼衣服,但卻能區分乾爽的熱和翳焗悶熱;某程度上濕度可以是溫度的 Modifier,例如在乾爽的日子,日夜溫差通常都比較大。(希望 R 兄讀完下篇不會覺得這個比喻很爛就是了,哈哈!:D)
期待福兄更詳細的分享!
刪除謝謝 R兄!現在下篇只差一些 Illustration 便可以面世了 :)
刪除