36.黄金价格与美债收益率的相关分析

黄金与国债:一对经典的”跷跷板”

  • 黄金:不生息资产,实际利率上升时吸引力下降
  • 国债:无风险资产,收益率上升时吸引力上升
  • 核心公式:实际利率 = 名义利率 − 通胀率
  • 理论预期:黄金价格与国债收益率呈负相关

为什么是负相关?

  • 国债收益率上升 → 持有国债更有吸引力
  • 资金从黄金流向国债 → 黄金需求下降
  • 持有黄金的机会成本增加 → 金价承压
  • 国债收益率上升 → 美元走强 → 黄金(美元计价)下跌

⭐ 平台任务代码

Listing 1
# 注:该代码块读取远程平台数据文件,且变量名与下方代码不匹配,渲染时无法正确执行
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
import pandas as pd  # 导入Pandas数据分析库
#读取黄金期货历史数据.csv和美国十年期国债收益率历史数据.csv
df1 = pd.read_csv('https://huoran.oss-cn-shenzhen.aliyuncs.com/20230411/csv/1645737586192834560.csv', thousands=',')

# 从CSV文件读取数据存入df2
df2 = pd.read_csv('https://huoran.oss-cn-shenzhen.aliyuncs.com/20230411/csv/1645737641935134720.csv', thousands=',')

#将index设置为日期,并转换为datetime类型
df1.set_index('日期', inplace=True)
df1.index = pd.to_datetime(df1.index)  # 转换为日期时间格式
df2.set_index('日期', inplace=True)  # 将日期列设为df2数据框的索引
df2.index = pd.to_datetime(df2.index)  # 转换为日期时间格式
#数据倒转
df1 = df1.iloc[::-1]
df2 = df2.iloc[::-1]  # 将数据按逆序排列
#提取黄金期货历史数据.csv中的收盘价,并转换为float类型
df1 = df1['收盘']
df1 = df1.astype(float)  # 转换数据类型
#提取美国十年期国债收益率历史数据.csv中的收盘价,并转换为float类型
df2 = df2['收盘']
df2 = df2.astype(float)  # 转换数据类型
 
#计算相关系数
result = df1.corr(df2)
print(result)  # 输出分析结果数据

数据准备关键步骤解析

  • 读取CSVpd.read_csv() 从URL加载远程数据
  • 设置索引set_index('日期') 将日期列设为行索引
  • 类型转换pd.to_datetime() 将字符串转为日期格式
  • 数据倒序iloc[::-1] 将时间序列按正序排列
  • 提取列:从DataFrame中取出”收盘”列为Series
  • 计算相关系数df1.corr(df2) 计算Pearson相关系数

Pearson相关系数原理

\[ \rho = \frac{\text{Cov}(X, Y)}{\sigma_X \times \sigma_Y} \]

  • \(\rho = 1\):完全正相关
  • \(\rho = -1\):完全负相关
  • \(\rho = 0\):无线性相关
  • \(|\rho| > 0.5\):强相关
  • \(0.3 < |\rho| < 0.5\):中度相关
  • \(|\rho| < 0.3\):弱相关

相关性计算与解读

Listing 2
# 注:该代码块依赖的数据来自上方平台任务代码块,因其未执行,本块也无法执行

# 计算Pearson相关系数
correlation = gold_price.corr(treasury_yield)

# 格式化输出相关系数
print(f'黄金价格与国债收益率相关系数: {correlation:.4f}')

相关系数结果的条件判断

Listing 3
# 注:该代码块依赖的数据来自上方平台任务代码块,因其未执行,本块也无法执行

print('\n相关性解读:')

if correlation < -0.5:
    # 强负相关:符合金融理论预期
    print('  强负相关,符合理论预期')
    print('  国债收益率上升时,黄金价格下跌')
elif correlation < -0.3:
    # 中度负相关:方向正确但关系不强
    print('  中度负相关')
    print('  大部分时候符合负相关关系')
elif correlation < 0.3:
    # 弱相关:其他因素影响更大
    print('  弱相关')
    print('  其他因素影响更大')
else:
    # 正相关:与理论预期相反
    print('  正相关或接近0')
    print('  不符合经典理论,可能有其他主导因素')

if-elif-else 判断逻辑解析

  • if correlation < -0.5:强负相关,完全符合理论
  • elif correlation < -0.3:中度负相关,方向正确
  • elif correlation < 0.3:弱相关,其他因素主导
  • else(≥ 0.3):正相关,与经典理论相悖

核心思路:根据相关系数的阈值区间,给出不同的经济学解释

可视化:双Y轴趋势图

Listing 4
# 注:该代码块依赖的数据来自上方平台任务代码块,因其未执行,本块也无法执行

fig, ax1 = plt.subplots(figsize=(14, 6))

# 左轴:黄金价格(蓝色)
ax1.plot(gold_price.index, gold_price.values,
         'b-', label='黄金价格', linewidth=2)
ax1.set_xlabel('日期', fontsize=12)
ax1.set_ylabel('黄金价格', fontsize=12, color='b')
ax1.tick_params(axis='y', labelcolor='b')
ax1.legend(loc='upper left')

# 右轴:国债收益率(红色)
ax2 = ax1.twinx()
ax2.plot(treasury_yield.index, treasury_yield.values,
         'r-', label='国债收益率', linewidth=2)
ax2.set_ylabel('国债收益率(%)', fontsize=12, color='r')
ax2.tick_params(axis='y', labelcolor='r')
ax2.legend(loc='upper right')

plt.title('黄金价格与国债收益率趋势', fontsize=14)
fig.tight_layout()
plt.show()

双Y轴图表的关键技术

  • plt.subplots():创建画布和主坐标轴
  • ax1.twinx():创建共享X轴的次Y轴
  • 为什么需要双轴?
    • 黄金价格范围:约1500–2000美元/盎司
    • 国债收益率范围:约1%–5%
    • 数值量纲差异巨大,单轴无法同时展示

负相关的三大传导机制

机制 传导路径 效果
替代效应 国债收益率↑ → 国债吸引力↑ 黄金需求↓
机会成本 国债收益率↑ → 持有黄金成本↑ 金价承压
美元汇率 国债收益率↑ → 美元升值 金价下跌

负相关关系的”背离”情况

  • 通胀预期高企:通胀上升 → 黄金保值需求增加 → 金价上涨
  • 避险需求激增:地缘政治风险 → 资金同时流入黄金和国债
  • 实际利率为负:通胀 > 名义利率 → 实际利率下降 → 黄金吸引力上升

这些特殊情况可能导致黄金与国债收益率同向变动

本章小结

  • 黄金价格与美债收益率存在经典的负相关关系
  • Series.corr() 方法可快速计算Pearson相关系数
  • if-elif-else 结构用于对相关系数进行区间判断
  • twinx() 双Y轴技术解决量纲差异可视化问题
  • 负相关关系在特定宏观环境下可能出现背离