【量化分析】殖利率曲線倒掛
衰退的前兆?
本文重點概要
- 文章難度:★★☆☆☆
- 閱讀建議:本文會利用Python實作視覺化過程,需要讀者對視覺化以及程式有基本認識。
前言
當兩年期美國公債減十年期美國公債利差為正,我們稱之為殖利率曲線倒掛。
通常天期越長的債券需要較高的風險溢酬,而發生倒掛時伴隨而來的是關於景氣衰退的疑慮,而本文將以尋找每個發生倒掛的時點,接著繪出一年之前與兩年後的總經數據以提供觀察。
編輯環境及模組需求
本文使用 Window10 並以 Spyder(anaconda31) 作為編輯器
#######################3
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#########################3
import tejapi
import plotly.graph_objects as go
import plotly.io as pio
##################
pio.renderers.default = 'browser' ##PLOT IN WEB
資料庫使用
總體經濟資料: 總體經濟 資料庫代碼 (GLOBAL/ANMAR),
總體經濟資料: 總體經濟說明 資料庫代碼 (GLOBAL/ABMAR)
TEJ PRO 總體經濟資料庫
資料導入
本文的公債取自TEJ PRO資料庫,所以在本機端讀取
df=pd.read_excel("C:\\Users/user/Desktop/Tej/美國公債殖利率.xlsx")
資料裡面有na值,我們要將她刪除 並且重設index
df.dropna(inplace=True)df.reset_index(drop=True,inplace=True)
資料處理 step1 計算指標
df["dif2Y"]=df.US10Y-df.US2Y
df["invertkeepday"]=df["dif2Y"].apply(lambda x : 1 if x < 0 else 0 )df["cross"]=np.nan
df["notcross"]=np.nan
用此指標計算倒掛的日期,並且將放便後續視覺化
startday=[]
endday =[]
keep = 0
df=df.copy()
for i in range(len(df)):
if df["invertkeepday"][i] >0 :
if keep == 0:
df["cross"][i]=df["US10Y"][i]
startday.append(df["日期"][i])
keep = 1
elif keep == 1 :
df["notcross"][i]=df["US10Y"][i]if df["invertkeepday"][i] < 1 :
endday.append(df["日期"][i])
keep = 0
我們用程式來看有多少資料
for start , end in zip(startday,endday): print(start , end, end-start)
我們發現資料有些是 時間相近的,於是我們把它聚合再一起把它視為同次倒掛!
inverted=pd.DataFrame(endday,startday)
inverted.reset_index(inplace=True)
inverted["year"]=inverted["index"].dt.year
datetime=inverted.groupby('year')
datetime=list(datetime)
getstart=[]
getend =[]
for i in datetime :
i[1].reset_index(drop=True,inplace=True)
start = i[1]["index"][0]
end = i[1][ 0][len(i[1])-1]
getstart.append(start)
getend.append(end)
for start , end in zip(getstart,getend):
print(start , end, end-start)
通過這樣的整理大致上就能大概看到,這30年來發生幾次倒掛
1990 , 1998 ,2000 ,2005~2007 , 2019, 2022 ,一共發生六次
df.set_index("日期",inplace=True)plt.figure(figsize=(12.2,4.5))
plt.scatter(df.index,df['cross'],color='red', label='cross!',marker='x',alpha=1)
plt.scatter(df.index,df['notcross'],color='green', label='Notcross',marker='o',alpha=1)
plt.plot(df["US2Y"], label='2Y', alpha=0.35)
plt.plot(df["US10Y"], label='10Y', alpha=0.35)
plt.plot(df["dif2Y"], label='dif', alpha=0.35)plt.title('Close Price Buy & Sell Signals')
plt.xticks(rotation=45)
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid()
df[df["US2Y"]==0]df.drop(index="2017-04-14",axis=1,inplace=True)##因為資料有0 影響畫圖
Step 2. 視覺化資料(完整詳見程式碼)
接下來我們擁有倒掛發生的時間後,使用他為輸入繪出近兩年的經濟數據,包含PMI ,失業率,經濟成長率,消費者信心等
結論
從各方面的經濟數據來看可能代表著景氣已過高峰,因此對未來景氣產生疑慮,售出短天期的債券,而偏好更長期的債券,才導致殖利率發生倒掛,雖然每次發生倒掛後,會伴隨著經濟衰退,但這五次發生倒掛後,有兩次美國經濟並未在兩年內發生經濟衰退,2000年因為遇上網路泡沫,而2019年倒掛後也是因為遇上疫情後才產生經濟衰退。
- 近五次的衰退,有四次股票續創新高
- 三次發生衰退時,皆處於降息循環,兩次未發生衰退時,美國正處於升息循環
而現在呢?
目前美國的經濟數據高峰雖已過,但仍維持在很高的水準,也因為依然強勁的經濟表現,使美國聯準會進入了升息循環,雖然每次的倒掛隨後都會衰退,但這個指標為非常領先的指標了,過去五次兩年期與十年期發生倒掛,平均還要18個月才會發生衰退,或許倒掛是想告訴我們
嘿! 該注意風險了。
完整程式碼
延伸閱讀
相關連結
- TEJ API 資料庫首頁
- TEJ E-Shop 完整資料庫購買
給我們鼓勵
之後會持續分享更多財金資料庫的應用
如果你的覺得今天的文章不錯,可以幫我們在下面的 掌聲 icon 點 1下
如果覺得超讚,可以按住 掌聲 icon 不放直到 50 下
有任何想法歡迎點選 留言 icon和我們討論