【量化分析】殖利率曲線倒掛

TEJ 台灣經濟新報
TEJ-API 金融資料分析
8 min readApr 26, 2022

衰退的前兆?

本文重點概要

  • 文章難度:★★☆☆☆
  • 閱讀建議:本文會利用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 ,失業率,經濟成長率,消費者信心等

1990年
1990年
1998年
1998年
2000年
2000年
2006年
2006年
2019年
2019年

結論

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

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

而現在呢?

2021年

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

嘿! 該注意風險了。

完整程式碼

延伸閱讀

相關連結

給我們鼓勵
之後會持續分享更多財金資料庫的應用
如果你的覺得今天的文章不錯,可以幫我們在下面的
掌聲 icon 點 1下
如果覺得超讚,可以按住
掌聲 icon 不放直到 50 下
有任何想法歡迎點選
留言 icon和我們討論

--

--

TEJ 台灣經濟新報
TEJ-API 金融資料分析

TEJ 為台灣本土第一大財經資訊公司,成立於 1990 年,提供金融市場基本分析所需資訊,以及信用風險、法遵科技、資產評價、量化分析及 ESG 等解決方案及顧問服務。鑒於財務金融領域日趨多元與複雜,TEJ 結合實務與學術界的精英人才,致力於開發機器學習、人工智慧 AI 及自然語言處理 NLP 等新技術,持續提供創新服務