Python新手教學(4)台股跟哪國指數最相關?

為什麼美股大跌,在台灣的投資人要很緊張?原因就是相關性!想知道台股跟哪國指數最同步嗎?不是S&P 500美國指數,也不是深圳指數,那究竟是哪國呢?這篇文章我們就來研究一下吧!

相關性最白話

首先我們先介紹什麼是相關性,
相關性最白話,你可以想像,看到天空烏雲密佈,代表可能要下雨了,
代表天空的顏色跟下雨機率有相關,
你可以由一個現象,去預測另一個現象,這就是相關性!

相關性稍微數學一點

相關性也可以更數值化的方式表示,先用以下例子講解:

這張圖中:

  • 我們可以看上方左側圖,天氣溫度跟買冰棒人數的變化圖,可以想像某人每一天記錄天氣溫度與冰棒人數,每天畫一個黃點,時間久了,就可以看出黃點之間的關係,也就是天氣越熱,越有人會想要買冰棒!

  • 同理,上方中間那張圖,某人也可以記錄每天生病的人數,此時就發現,天氣越冷,越多人會感冒!

  • 當然某人覺得有趣,於是又記錄了溫度與擲筊的關係,最後發現:沒什麼關連

好了,某人已將觀測值變成數字記錄起來了,但每次都必須畫這麼多點,才能看出相關性,也太累了吧?能不能用一個數字取代呢?

這時就可以用

correlation coefficient (相關性係數)

有人可能覺得太多點點了,有密集恐懼症,希望可以將上方這三張圖,每張圖用一個數字代表就好,這樣就不需要看到這麼多點點。

所以某人提出了 correlation coefficient ,從上面第一張圖開始從左而又,分別可以用 1、-1、0來代表:

  • 1 代表正相關,也就是X越高Y越高,X越低Y越低(成正比)
  • ─1 代表負相關,也就是X越高Y越低,或X越低Y越高(成反比)
  • 0 代表無相關性

上述只是化簡後的例子
事實上相關性係數不是整數,而是會介於─1~1間,代表正負相關的程度!

讀到這裡,你可能會問,

所以跟投資有什麼關係?

投資就是預測未來現象與當下現象的相關性!
就像你看到天空烏雲密佈,就能預測接下來會下雨,
我們也可以將相關性係數用於全球指數,

為什麼美股大跌,在台灣的投資人要很緊張?原因就是相關性!
台股跟美股有正相關。

我們可以用Python將相關性畫出來,

首先我們可以看一下上個單元的一些元素:

1
print(world_index_history['S&P 500'].head())

還記得world_index_history嗎?它是一個dictionary,根據不同的字串,例如S&P 500,可以叫出相對應的表格(dataframe)

有了 world_index_history 我們就可以將國際指數的相關性給畫出來,但首先,我們要先來瞭解

Adj CloseClose的差異?

close 就是收盤價,每天股市休盤瞬間的最後數字。那Adj Close呢?
我們用圖會比較好解說,先將 S&P500 指數的 Adj CloseClose 畫出來

1
2
3
sp500 = world_index_history['S&P 500']
sp500['Close'].plot(color='red')
sp500['Adj Close'].plot(color='blue')

上圖中紅色的為Close而藍色的為Adj Close,兩者幾乎重疊,因為Adj Close其實跟Close很像,但是有點不同,台灣叫做「調整後收盤價」,你有時候也會看到「復權收盤價」。這個價格的好處是,它移除了除權息和增減資的價格波動,更準確的反映了「股票價值」的變化。

簡單的例子

當除權息、增減資時,一般股價會有大波動,以除權息為例,股票價格瞬間下跌
然而帳戶裡的股票張數會變多(例如領股利)
或是帳戶資金量變多(領股息)
總體來講是不賺不賠的

所以當除權息時,
收盤價 Close 會突然下跌很多,
而調整後收盤價 Adj Close 不會因為除權息有巨幅下跌
更能夠精確的反映股票價值,跟投資的獲利狀況!
所以我們在做相關性分析,可以用 Adj Close

Python 終於開始了

首先我們先將所有指數的 Adj Close 先集合起來,變成一張表格(dataframe)

1
2
3
4
5
6
7
adjclose = {}
for name, price in world_index_history.items():
if price.index.is_unique:
adjclose[name] = price['Adj Close']

adjclose = pd.DataFrame(adjclose)
adjclose

接下來就可以來觀察每檔指數的 Adj Close 相關性,

1
2
corr = adjclose.corr()
print(corr)

上圖可以看到一個二維的表,就是每個指數跟每個指數之間的相關性,
上圖中可以發現,指數自己跟自己的相關性一定是1,代表完全正相關!
而這張表會是symmetric matrix,也就是做對角線會是對稱的。

接下來我們可以用更視覺化的方式來表示,假如沒有sns的package,要記得先去安裝pip install sns即可,想瞭解如何安裝,可以到此安裝教學的下半部分,有簡單的教學喔!

1
2
3
4

import seaborn as sns
sns.heatmap(corr, square=True ,vmax=1.0, linecolor='white', annot=True)

假如你發現圖比我的小,字看不清楚,可以改成以下程式碼

1
2
3
4
5
6
7
8
9

# 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,代表非常非常像

我們可以將這兩個指數畫出來檢查一下:

1
2
adjclose['Cboe UK 100 Price Return']['2015':].plot()
adjclose['TSEC weighted index']['2015':].plot()

雖然價格不同,但是趨勢還真的頗像的耶!

如何用於交易?

兩個相關性很高的股票,可以拿來做pair trading配對交易,但也不是只看相關性,
這個就容我們之後再慢慢分析吧!
這個單元會一直帶你從零開始,慢慢學習,直到機器學習的部分喔!敬請期待~

假如覺得文章不錯,那更不能錯過我們的影音課程喔!
或我們按個 鼓勵一下吧!