為什麼美股大跌,在台灣的投資人要很緊張?原因就是相關性!想知道台股跟哪國指數最同步嗎?不是S&P 500美國指數,也不是深圳指數,那究竟是哪國呢?這篇文章我們就來研究一下吧!
相關性
首先我們先介紹什麼是相關性,
相關性最白話的講法,你可以想像,看到天空烏雲密佈,代表可能要下雨了,
代表天空的顏色跟下雨機率有相關,
你可以由一個現象,去預測另一個現象,這就是相關性!
相關性稍微數學一點
這張圖中:
- 我們可以看上方左側圖,天氣溫度跟買冰棒人數的變化圖,可以想像某人每一天記錄天氣溫度與冰棒人數,每天畫一個黃點,時間久了,就可以看出黃點之間的關係,也就是天氣越熱,越有人會想要買冰棒!
- 同理,上方中間那張圖,某人也可以記錄每天生病的人數,此時就發現,天氣越冷,越多人會感冒!
- 當然某人覺得有趣,於是又記錄了溫度與擲筊的關係,最後發現:沒什麼關連
好了,某人已將觀測值變成數字記錄起來了,但每次都必須畫這麼多點,才能看出相關性,也太累了吧?能不能用一個數字取代呢?
這時就可以用
correlation coefficient (相關性係數)
有人可能覺得太多點點了,有密集恐懼症,希望可以將上方這三張圖,每張圖用一個數字代表就好,這樣就不需要看到這麼多點點。
所以某人提出了 correlation coefficient ,從上面第一張圖開始從左而又,分別可以用 1、-1、0來代表:
- 1 代表正相關,也就是X越高Y越高,X越低Y越低(成正比)
- ─1 代表負相關,也就是X越高Y越低,或X越低Y越高(成反比)
- 0 代表無相關性
上述只是化簡後的例子
事實上相關性係數不是整數,而是會介於─1~1間,代表正負相關的程度!
讀到這裡,你可能會問,
所以相關性跟投資有什麼關係?
投資就是預測未來現象與當下現象的相關性!
就像你看到天空烏雲密佈,就能預測接下來會下雨,
我們也可以將相關性係數用於全球指數,
為什麼美股大跌,在台灣的投資人要很緊張?原因就是相關性!
台股跟美股有正相關。
我們可以用Python將相關性畫出來,假如你還沒有爬取歷史股價的話,可以先到前個單元爬取喔!
程式碼撰寫
歷史數據回顧
首先我們可以看一下上個單元爬下來的歷史數據
print(world_index_history['S&P 500'].head())
還記得world_index_history
嗎?它是一個dictionary,根據不同的字串,例如S&P 500
,可以叫出相對應的表格(dataframe)
有了 world_index_history
我們就可以將國際指數的相關性給畫出來,但首先,我們要先來瞭解
比對歷史數據,發現close價格不一樣?
假如你認真的比對歷史數據(例如玩股網),就會發現離現在越久遠以前的歷史價格,誤差越大!這是為什麼呢?其實這個並不是誤差喔!因為 yahoo finance 的歷史價格是「調整後收盤價」代表這是考慮了除權息的價格變化,所計算出來的價格。
簡單的例子
當除權息、增減資時,一般股價會有大波動,以除權息為例,股票價格瞬間下跌
然而帳戶裡的股票張數會變多(例如領股利)
或是帳戶資金量變多(領股息)
總體來講是不賺不賠的
所以當除權息時,
正常的收盤價 會突然下跌很多,
而 yahoo finance 的調整後收盤價,不會因為除權息有巨幅下跌
更能夠精確的反映股票價值,跟投資的獲利狀況!
Python 終於開始了
首先我們先將所有指數的 Adj Close
先集合起來,變成一張表格(dataframe)
close = {}
for name, price in world_index_history.items():
if len(price) != 0:
close[name] = price['Close']
close = pd.DataFrame(close)
close = close.resample('1d').last().dropna(how='all', axis=1).dropna(how='all', axis=0)
接下來就可以來觀察每檔指數的 Adj Close
相關性,
corr = close.corr()
print(corr)
上圖可以看到一個二維的表,就是每個指數跟每個指數之間的相關性,
上圖中可以發現,指數自己跟自己的相關性一定是1,代表完全正相關!
而這張表會是symmetric matrix,也就是做對角線會是對稱的。
接下來我們可以用更視覺化的方式來表示,假如沒有sns的package,要記得先去安裝pip install sns
即可,想瞭解如何安裝,可以到此安裝教學的下半部分,有簡單的教學喔!
import seaborn as sns
sns.heatmap(corr, square=True ,vmax=1.0, linecolor='white', annot=True)
假如你發現圖比我的小,字看不清楚,可以改成以下程式碼
# set figure size
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = (18, 18)
# original code
import seaborn as sns
sns.heatmap(corr, square=True ,vmax=1.0, linecolor='white', annot=True)
有了以上的code,我們就可以知道
台灣股票跟誰最連動
我們可以人眼觀察,發現台灣指數TSEC weighted index
跟英國前一百大Cboe UK 100
超像!相關係數高達0.9,代表非常非常像
我們可以將這兩個指數畫出來檢查一下:
close['Cboe UK 100']['2015':].plot()
close['TSEC weighted index']['2015':].plot()
雖然價格不同,但是趨勢還真的頗像的耶!然而台灣的加權指數,在2020年的價格,跟某幾個美國的指數相關性非常高,究竟是哪一個指數呢?可以使用我們寫好的colab範例跑跑看喔!
如何用於交易?
兩個相關性很高的股票,可以拿來做pair trading配對交易,但也不是只看相關性,
這個就容我們之後再慢慢分析吧!
這個單元會一直帶你從零開始,慢慢學習,直到機器學習的部分喔!敬請期待~
下一個單元中,我們來看一下要怎麼控制報酬與風險