tushare实战分析上证综指与美债收益率的关系

作者: pdnbplus | 发布时间: 2024/07/14 | 阅读量: 181

# tushare实战分析上证综指与美债收益率的关系

提示:如果还不知道tushare的小伙伴,我悄悄告诉你们tushare网址

数据获取

目标数据: 2000-2021美国国债收益率与利率 、 2000-2021上证综指的历史数据

获取2000-2021美国国债收益率与利率的数据

书接上文, 导入上次获取的2000-2021美国国债收益率与利率的数据;

如果没看过我上篇文章的请快去 Tushare实战分析美国国债收益率与利率的关系

先将每日数据转换为月度数据

代码如下:

import pandas as pd
#%% 数据处理

data = pd.read_csv('2000-2021美债收益率及货币量变化.csv')
# 将每日的数据调整成每月数据
def transfer(data):
    for i in range(len(data)):
        data.iloc[i, 0] = data.iloc[i, 0][0:6]
    return data.groupby('date').mean()

data_month = transfer(data)
# 缺失值处理
sum(data_month.m1.isna()==True)  #查看缺失值个数
sum(data_month.m3.isna()==True)  #查看缺失值个数
sum(data_month.m6.isna()==True)  #查看缺失值个数
sum(data_month.y10.isna()==True)  #查看缺失值个数
sum(data_month.y20.isna()==True)  #查看缺失值个数
sum(data_month.y30.isna()==True)  #查看缺失值个数

data_month.fillna(method='bfill', inplace=True)  #把最邻近填充进去
data_month.to_csv('2000-2021美债收益率及货币量变化(月).csv')

获取2000-2021上证综指的历史数据

# 导入tushare
import tushare as ts
# 初始化pro接口
pro = ts.pro_api('你的神秘代码')

# 拉取数据 000001.SH 上证综指
df = pro.index_monthly(**{
    "ts_code": "000001.SH",
    "trade_date": "",
    "start_date": 20000101,
    "end_date": 20210101,
    "limit": "",
    "offset": ""
}, fields=[
    "ts_code",
    "trade_date",
    "close",
    "open",
    "high",
    "low",
    "pre_close",
    "change",
    "pct_chg",
    "vol",
    "amount"
])

注意: 你的神秘代码在tushare的个人主页 -- 接口token中获取

将两个数据集依据时间合并

注意事项

  • 在合并的时候是横向合并, 以时间为index, 将两个数据表横向拼接; axis=1
  • 要保持index不变, 所以要将两个数据表的date(美债是date, 上证是trade_date)字段的类型控制相同

话不多说, 上代码!!!

# 导入2021美债收益率及货币量变化数据
import pandas as pd
american_bond = pd.read_csv('2000-2021美债收益率及货币量变化(月).csv')

# df数据是上面带下来的
df['trade_date'] = df['trade_date'].apply(lambda x: x[0:6])
df['trade_date'] = df['trade_date'].astype(int)
df = df[::-1]
df.to_csv('2000-2021上证综指变化(月).csv')

df.set_index('trade_date', inplace=True)
american_bond.set_index('date', inplace=True)
data = pd.concat([df, american_bond], axis=1)

绘图查看上证综指变化率与美债收益率的关系

将上证综指的指数变换与美债收益率的变化画在同一幅图中

注意

  • 不同y轴刻度画在同一幅图中, 关键是twinx()
  • 设置年份的x轴, 关键是xticks

话不多说, 上代码!!!

#%% 绘图查看上证综指变化率与美债收益率的关系
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig, ax1 = plt.subplots()
month = [12*i for i in range(21)]
year = [i for i in range(2000, 2021)]
plt.xticks(month, year, rotation=45)
ax1.plot(range(len(data)), data.close, '-r', label='上证综指')
ax1.set_xlabel("年份")
ax1.set_ylabel("上证综指")
ax2 = ax1.twinx()
ax2.plot(range(len(data)), data.y30, 'y', label='美国国债收益率')
ax2.set_ylabel("美国国债收益率")
fig.legend()
plt.show()

结果如下: 在这里插入图片描述


绘图查看上证综指变化率与利率的关系

基本同上;

fig, ax1 = plt.subplots()
month = [12*i for i in range(21)]
year = [i for i in range(2000, 2021)]
plt.xticks(month, year, rotation=45)
ax1.plot(range(len(data)), data.close, '-r', label='上证综指')
ax1.set_xlabel("年份")
ax1.set_ylabel("上证综指")
ax2 = ax1.twinx()
ax2.plot(range(len(data)), data.m6, 'y', label='利率')
ax2.set_ylabel("利率")
fig.legend()
plt.show()

结果如下: 在这里插入图片描述


结果分析

  • 从上图可以看出股债市场基本是反向变动. 所以给我们的投资组合中的股债对冲形成了理论依据;

  • 从上图可以看出利率变动与股市变动基本是同向变动, 而股票市场的变动相对于利率变动则要滞后一些, 从图中预期上证综指在21年后会有一个不小的涨幅