这篇来一个宏观择时方面的量化统计。
所谓中美国债利差,是指中国国债收益率与美国国债收益率之间的差值。通常的计算方法是用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()
最终运行结果如下:
从上图中看,
2020年初至2021年初,沪深300指数和中美国债利差共同保持上升趋势;
2021年初至今,沪深300指数和中美国债利差一起保持下降趋势。
的确有较强的相关性。
未来随着美联储持续降息,价值型宽基指数最典型代表沪深300能否有所表现?