中美国债利差和沪深300指数相关性统计

这篇来一个宏观择时方面的量化统计。

所谓中美国债利差,是指中国国债收益率与美国国债收益率之间的差值。通常的计算方法是用10年期中国国债收益率减去10年期美国国债收益率。

随着人民币国际化的推进,国际资本对A股的影响越来越大。当中美利差扩大时,资金往往会流向收益更高的中国市场;反之,当利差缩小时,资金可能会流出中国市场,回流美国。

对于宏观择时,中国经济的景气度很重要,美元周期也同样重要。

那么具体情况如何?我们用程序跑跑数据。

先通过搜索找到了中美国债收益率的历史数据:
https://data.eastmoney.com/cjsj/zmgzsyl.html
东方财富上有详细数据信息。

然后akshare上也找到了指数历史点位数据的API,都可以免费获取。
下面直接上代码:

import pandas as pd
import matplotlib.pyplot as plt
import akshare as ak
import requests
from tqdm import *

plt.rcParams['font.sans-serif']=['SimHei'] #用来在图中正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来在图中正常显示负号

# 下面这个函数用于从东财上获取中美国债数据,魔改了akshare源代码
def bond_cn_us_rate() -> pd.DataFrame:
    """
    东方财富网-数据中心-经济数据-中美国债收益率
    http://data.eastmoney.com/cjsj/zmgzsyl.html
    :return: 中美国债收益率
    :rtype: pandas.DataFrame
    """
    url = "http://datacenter.eastmoney.com/api/data/get"
    params = {
        "type": "RPTA_WEB_TREASURYYIELD",
        "sty": "ALL",
        "st": "SOLAR_DATE",
        "sr": "-1",
        "token": "894050c76af8597a853f5b408b759f5d",
        "p": "1",
        "ps": "99999",
        "pageNo": "1",
        "pageNum": "1",
        "_": "1615791534490",
    }
    r = requests.get(url, params=params)
    data_json = r.json()
    total_page = data_json["result"]["pages"]
    big_df = pd.DataFrame()
    for page in tqdm(range(1, total_page + 1), leave=False):
        params = {
            "type": "RPTA_WEB_TREASURYYIELD",
            "sty": "ALL",
            "st": "SOLAR_DATE",
            "sr": "-1",
            "token": "894050c76af8597a853f5b408b759f5d",
            "p": page,
            "ps": "99999",
            "pageNo": page,
            "pageNum": page,
            "_": "1615791534490",
        }
        r = requests.get(url, params=params)
        data_json = r.json()
        temp_df = pd.DataFrame(data_json["result"]["data"])
        big_df = pd.concat([big_df, temp_df], ignore_index=True)
    big_df.rename(
        columns={
            "SOLAR_DATE": "date",
            "EMM00166462": "中国国债收益率5年",
            "EMM00166466": "中国国债收益率10年",
            "EMM00166469": "中国国债收益率30年",
            "EMM00588704": "中国国债收益率2年",
            "EMM01276014": "中国国债收益率10年-2年",
            "EMG00001306": "美国国债收益率2年",
            "EMG00001308": "美国国债收益率5年",
            "EMG00001310": "美国国债收益率10年",
            "EMG00001312": "美国国债收益率30年",
            "EMG01339436": "美国国债收益率10年-2年",
            "EMM00000024": "中国GDP年增率",
            "EMG00159635": "美国GDP年增率",
        },
        inplace=True,
    )
    big_df = big_df[
        [
            "date",
            "中国国债收益率2年",
            "中国国债收益率5年",
            "中国国债收益率10年",
            "中国国债收益率30年",
            "中国国债收益率10年-2年",
            "中国GDP年增率",
            "美国国债收益率2年",
            "美国国债收益率5年",
            "美国国债收益率10年",
            "美国国债收益率30年",
            "美国国债收益率10年-2年",
            "美国GDP年增率",
        ]
    ]
    big_df["date"] = pd.to_datetime(big_df["date"]).dt.date
    big_df["中国国债收益率2年"] = pd.to_numeric(big_df["中国国债收益率2年"])
    big_df["中国国债收益率5年"] = pd.to_numeric(big_df["中国国债收益率5年"])
    big_df["中国国债收益率10年"] = pd.to_numeric(big_df["中国国债收益率10年"])
    big_df["中国国债收益率30年"] = pd.to_numeric(big_df["中国国债收益率30年"])
    big_df["中国国债收益率10年-2年"] = pd.to_numeric(big_df["中国国债收益率10年-2年"])
    big_df["中国GDP年增率"] = pd.to_numeric(big_df["中国GDP年增率"])
    big_df["美国国债收益率2年"] = pd.to_numeric(big_df["美国国债收益率2年"])
    big_df["美国国债收益率5年"] = pd.to_numeric(big_df["美国国债收益率5年"])
    big_df["美国国债收益率10年"] = pd.to_numeric(big_df["美国国债收益率10年"])
    big_df["美国国债收益率30年"] = pd.to_numeric(big_df["美国国债收益率30年"])
    big_df["美国国债收益率10年-2年"] = pd.to_numeric(big_df["美国国债收益率10年-2年"])
    big_df["美国GDP年增率"] = pd.to_numeric(big_df["美国GDP年增率"])
    big_df["中美10年期国债利差"] = big_df["中国国债收益率10年"]-big_df["美国国债收益率10年"]
    big_df.sort_values("date", inplace=True)
    big_df.reset_index(inplace=True, drop=True)
    return big_df

guozhai_df = bond_cn_us_rate()
print(guozhai_df)

下面这段代码用akshare从腾讯获取沪深300指数信息:

# 沪深300每日行情
index_daily_df = ak.stock_zh_index_daily_tx(symbol="sh000300")
print(index_daily_df)

下面这段代码用来绘图:

total_df = pd.merge(index_daily_df, guozhai_df, on=['date'], how='left')

# 画出折线图
fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('日期')
ax1.set_ylabel('中美10年期国债利差', color=color)
ax1.plot(total_df['date'], total_df['中美10年期国债利差'], color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # 实例化第二个坐标轴
color = 'tab:blue'
ax2.set_ylabel('收盘点位', color=color)
ax2.plot(total_df['date'], total_df['close'], color=color)
ax2.tick_params(axis='y', labelcolor=color)
fig.set_figwidth(10)
fig.tight_layout()  # 自动调整布局
plt.show()

最终运行结果如下:
截至2024年
从上图中看,
2020年初至2021年初,沪深300指数和中美国债利差共同保持上升趋势;
2021年初至今,沪深300指数和中美国债利差一起保持下降趋势。
的确有较强的相关性。

未来随着美联储持续降息,价值型宽基指数最典型代表沪深300能否有所表现?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值