殖利率曲线倒挂

本文重点概要

  • 文章难度:★★☆☆☆
  • 阅读建议:本文会利用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个月才会发生衰退,或许倒挂是想告诉我们

嘿! 该注意风险了。

完整程式码

延伸阅读

相关连结

返回总览页