殖利率曲線倒掛

本文重點概要

  • 文章難度:★★☆☆☆
  • 閱讀建議:本文會利用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年來發生幾次倒掛
通過這樣的整理大致上就能大概看到,這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 ,失業率,經濟成長率,消費者信心等

1990年
1990年
1990年
1990年
1998年
1998年
1998年
1998年
2000年
2000年
2000年
2000年
2006年
2006年
2006年
2006年
2019年
2019年
2019年資料
2019年資料

結論

從各方面的經濟數據來看可能代表著景氣已過高峰,因此對未來景氣產生疑慮,售出短天期的債券,而偏好更長期的債券,才導致殖利率發生倒掛,雖然每次發生倒掛後,會伴隨著經濟衰退,但這五次發生倒掛後,有兩次美國經濟並未在兩年內發生經濟衰退,2000年因為遇上網路泡沫,而2019年倒掛後也是因為遇上疫情後才產生經濟衰退。

  1. 近五次的衰退,有四次股票續創新高
  2. 三次發生衰退時,皆處於降息循環,兩次未發生衰退時,美國正處於升息循環

而現在呢?

2021年資料
2021年資料

目前美國的經濟數據高峰雖已過,但仍維持在很高的水準,也因為依然強勁的經濟表現,使美國聯準會進入了升息循環,雖然每次的倒掛隨後都會衰退,但這個指標為非常領先的指標了,過去五次兩年期與十年期發生倒掛,平均還要18個月才會發生衰退,或許倒掛是想告訴我們

嘿! 該注意風險了。

完整程式碼

延伸閱讀

相關連結

返回總覽頁
Procesing