基于tushare的美元黄金美债利率联动分析实战

1. 为什么我要用 tushare 去啃美元黄金与美债利率这块硬骨头

做宏观数据研究的人都有一个共同的痛点:数据源太散。想看黄金价格得去翻伦敦金或者纽约金,想看美债收益率得去某财经网站扒表格,想看美元指数又是另一个地方。更别提还要把这三者的时间轴对齐、频率统一、缺失值处理干净。我以前用 Excel 手工拼过一回,三个数据源的时间戳格式都不一样,一个是美东时间日频,一个是北京时间日频,还有一个是周频,光对齐就花了一整个下午,最后还发现有两个数据源对“交易日”的定义不同,感恩节那天一个有一个没有,直接导致后面的相关性计算全歪了。

后来我转向用 tushare 来做这件事,核心原因就一个:它把宏观、利率、汇率、商品这几条线的数据接口统一在了一套 API 体系下,返回的都是结构化的 DataFrame,时间戳规范、字段命名一致,省掉了大量清洗对齐的脏活。tushare 本身是国内做量化研究用得比较多的数据接口库,覆盖股票、基金、期货、宏观经济、利率汇率等多个门类,对于想做跨市场联动分析的人来说,它相当于一个“数据中转站”,不用在五六个网站之间来回切换。

这篇文章要聊的,就是怎么用 tushare 把美元指数、黄金价格、美债收益率和利率这几条线拉到一起,做一次完整的联动关系分析。适合谁看?如果你已经会用 Python 做基本的数据处理,对 pandas 不陌生,想入门宏观量化或者跨资产相关性研究,那这篇内容基本可以照着复现。如果你只是想看看黄金和美元到底是不是“跷跷板”,那看完也能有个数据支撑的判断,而不是停留在“大家都这么说”的层面。

需要提前说明的是,tushare 的部分宏观和利率接口需要一定的积分权限,不同接口的门槛不一样。我在实操中会尽量给出替代方案,比如某些数据可以用 ETF 价格或者公开的利率指标来近似,保证即使权限不够也能把分析框架跑通。另外,本文所有代码基于 tushare 的 pro 接口编写,假设你已经完成了 token 的注册和初始化,这部分不再赘述。

2. 数据管道的搭建:从 tushare 拉取四条核心数据线

2.1 四条数据线分别对应哪些接口

在动手写代码之前,先把我们要用的数据线理清楚。这个分析的核心是四个变量:美元指数、黄金价格、美债收益率、利率。它们各自在 tushare 里的获取方式不太一样,我逐个说明。

美元指数,tushare 的fx_daily接口可以拿到美元兑人民币等货币对的日频数据,但严格意义上的美元指数(DXY)需要看index_global接口,它覆盖了全球主要指数,包括美元指数。如果你权限不够,一个常见的替代方案是用美元兑欧元或者美元兑日元汇率来近似美元强弱,虽然不如 DXY 全面,但方向性基本一致。

黄金价格,tushare 里可以通过fx_daily拿伦敦金现的报价,也可以用futures_daily拿纽约黄金期货的主力合约价格。我一般倾向于用伦敦金现,因为它是现货价格,受期货展期影响小,连续性更好。如果你只做趋势分析,期货主力合约也够用。

美债收益率,这是最关键也最麻烦的一条线。tushare 的us_tycr接口提供了美国国债收益率曲线数据,涵盖 1 个月到 30 年的多个期限。做黄金分析最常用的是 10 年期美债收益率,因为它被视为全球资产定价的锚。这个接口对积分有一定要求,如果拿不到,可以用us_trycr或者通过美债 ETF 的价格反推收益率变化方向。

利率,这里我指的是联邦基金利率或者短期政策利率。tushare 的us_fed_rate接口可以拿到联邦基金目标利率的历史数据。这个数据是低频的,只在议息会议后变动,所以处理时需要注意频率对齐问题。

2.2 时间轴对齐:日频、低频和缺失值的处理逻辑

四条数据线拉下来之后,第一个要解决的问题就是时间轴对齐。美元指数和黄金是日频数据,美债收益率也是日频,但利率是事件驱动的低频数据。直接 merge 会出现大量 NaN,因为利率只在特定日期有值。

我的处理方式是:先把利率数据做前向填充(forward fill),也就是把最近一次变动的利率值延续到下一次变动之前。这在利率分析里是合理的,因为政策利率在两次调整之间确实是保持不变的。前向填充之后,再和日频数据做左连接,以日频数据的日期为主轴。

这里有个细节要注意:tushare 返回的日期字段通常是trade_date格式的字符串,比如20240101,需要先转成 datetime 类型再做对齐。另外,不同接口返回的日期范围可能不一致,比如黄金数据可能从 2005 年开始,但美债收益率数据可能只到 2010 年之后。我一般会取四者的交集时间段,保证每条线都有数据,避免因为某条线缺失导致整段分析失效。

还有一个坑是交易日历的差异。美元指数和黄金基本遵循全球主要市场的交易日,但美债收益率在某些美国假期会缺失。如果你直接用dropna(),可能会把一些本来有黄金和美元数据的日期也删掉。我的做法是先用reindex把日期轴统一到黄金数据的交易日,然后对美债收益率做插值或者前向填充,而不是简单粗暴地删行。

2.3 代码实现:一个可复用的数据拉取函数

下面是我实际用的一套数据拉取代码,封装成了一个函数,输入起止日期,返回一个对齐好的 DataFrame。你可以直接拿去改改就用。

import tushare as ts import pandas as pd import numpy as np # 初始化 pro 接口 pro = ts.pro_api('你的token') def fetch_macro_data(start_date, end_date): """ 拉取美元指数、黄金、美债收益率、联邦基金利率数据并对齐 """ # 1. 美元指数(用 index_global 接口) dxy = pro.index_global(ts_code='DXY', start_date=start_date, end_date=end_date) dxy = dxy[['trade_date', 'close']].rename(columns={'close': 'dxy'}) # 2. 黄金价格(伦敦金现,用 fx_daily 接口) gold = pro.fx_daily(ts_code='XAUUSD', start_date=start_date, end_date=end_date) gold = gold[['trade_date', 'bid_close']].rename(columns={'bid_close': 'gold'}) # 3. 美债收益率(10年期) us10y = pro.us_tycr(start_date=start_date, end_date=end_date) us10y = us10y[['date', 'y10']].rename(columns={'date': 'trade_date', 'y10': 'us10y'}) # 4. 联邦基金利率 fed_rate = pro.us_fed_rate(start_date=start_date, end_date=end_date) fed_rate = fed_rate[['date', 'fr']].rename(columns={'date': 'trade_date', 'fr': 'fed_rate'}) # 统一日期格式 for df in [dxy, gold, us10y, fed_rate]: df['trade_date'] = pd.to_datetime(df['trade_date']) # 以黄金交易日为主轴做左连接 df = gold.merge(dxy, on='trade_date', how='left') df = df.merge(us10y, on='trade_date', how='left') df = df.merge(fed_rate, on='trade_date', how='left') # 利率做前向填充 df['fed_rate'] = df['fed_rate'].ffill() # 美债收益率缺失值用线性插值补 df['us10y'] = df['us10y'].interpolate(method='linear') # 删除仍然缺失的行 df = df.dropna().reset_index(drop=True) return df # 拉取 2015 年至今的数据 df = fetch_macro_data('20150101', '20241231') print(df.head()) print(f"数据行数: {len(df)}")

这段代码跑通之后,你会得到一个包含trade_date、gold、dxy、us10y、fed_rate五列的 DataFrame。我实测下来,2015 年至今大概有 2000 多行日频数据,足够做各种相关性分析和回归了。

注意:index_global和us_tycr接口对积分有要求,如果你的账号权限不够,可以先跳过美元指数和美债收益率,用黄金和利率两条线做基础分析,框架是一样的。

3. 相关性分析:黄金、美元、美债收益率到底怎么互相牵制

3.1 先看长期相关性,别被短期波动带偏

数据拿到手之后,最直观的做法就是算相关系数。但这里有个陷阱:如果你直接用日频收益率算相关性,可能会得到一个和直觉相反的结果。我一开始就是这么干的,发现黄金和美元在某些时间段居然是正相关,和“美元涨黄金跌”的常识不符。

问题出在频率上。日频数据噪音太大,短期资金流动、避险情绪、突发事件都会干扰两者的关系。我的做法是先把价格转成周频或者月频的收益率,再算滚动相关性。具体来说,用resample('W').last()把日频数据降成周频,然后算 52 周滚动相关系数。这样得到的曲线平滑得多,趋势也更清晰。

从长期数据来看,黄金和美元指数确实呈现负相关,但相关系数并不是稳定的 -1,而是在 -0.3 到 -0.7 之间波动。这意味着“美元涨黄金跌”这个规律在大部分时间是成立的,但并不是铁律。特别是在避险情绪极端的时候,比如全球市场大幅波动期间,黄金和美元可能同时走强,因为两者都被当作避险资产。

黄金和美债收益率的关系更有意思。理论上,美债收益率上升意味着持有黄金的机会成本增加,因为黄金不生息,所以收益率上升应该压制金价。但实际数据里,这个负相关在有些年份很强,在有些年份几乎消失。我观察下来,当美债收益率的变化主要由实际利率驱动时,对黄金的压制最明显;如果收益率上升是因为通胀预期升温,那黄金反而可能跟着涨,因为它有抗通胀属性。

3.2 滚动窗口的选择:52 周还是 26 周

滚动窗口的长度直接决定了你看到的相关系数是“平滑趋势”还是“敏感波动”。我试过 26 周、52 周和 104 周三个窗口,感受差别很大。

26 周窗口对短期变化非常敏感,能快速捕捉到相关性的转折点,但噪音也多,经常出现上下翻飞的情况,看着像心电图。52 周窗口是我最常用的,它对应一年的交易日,既能反映中期趋势,又不会太滞后。104 周窗口则非常平滑,适合看长期结构性变化,但如果你用它来做交易信号,基本会慢半拍。

我的建议是:如果你做的是配置型分析,看的是年度级别的资产轮动,用 52 周窗口就够了。如果你想捕捉季度级别的机会,可以同时看 26 周和 52 周两条线,当短期相关性穿越长期相关性时,往往意味着市场逻辑在发生变化。

下面是对应的代码实现:

# 转周频 df_weekly = df.set_index('trade_date').resample('W').last().dropna() # 算收益率 df_weekly['gold_ret'] = df_weekly['gold'].pct_change() df_weekly['dxy_ret'] = df_weekly['dxy'].pct_change() df_weekly['us10y_chg'] = df_weekly['us10y'].diff() # 52周滚动相关性 df_weekly['corr_gold_dxy'] = df_weekly['gold_ret'].rolling(52).corr(df_weekly['dxy_ret']) df_weekly['corr_gold_us10y'] = df_weekly['gold_ret'].rolling(52).corr(df_weekly['us10y_chg']) print(df_weekly[['corr_gold_dxy', 'corr_gold_us10y']].describe())

跑完这段,你会看到黄金和美元的相关性均值大概在 -0.4 左右,黄金和美债收益率变化的相关性均值在 -0.2 到 -0.3 之间。注意,这里用的是收益率变化而不是收益率水平,因为收益率水平本身是非平稳的,直接算相关性容易得到虚假的高相关。

3.3 用热力图看不同期限美债收益率的影响差异

美债收益率不是只有 10 年期一个品种,2 年期、5 年期、30 年期对黄金的影响可能不一样。tushare 的us_tycr接口返回了多个期限的数据,我一般会拉 2 年、5 年、10 年和 30 年四个期限,分别算它们和黄金收益率的相关性。

实测下来的规律是:10 年期和黄金的负相关性最强,因为它是全球资产定价的基准。2 年期更多反映货币政策预期,对黄金的影响偏短期。30 年期反映的是长期通胀和财政预期,和黄金的相关性反而不如 10 年期稳定。5 年期介于两者之间,可以作为辅助参考。

如果你想把多个期限放在一张图里看,可以用 seaborn 画一个相关性热力图,横轴是不同期限,纵轴是不同时间段,颜色深浅代表相关系数大小。这样一眼就能看出哪个期限在哪个阶段对黄金的压制最明显。

import seaborn as sns import matplotlib.pyplot as plt # 拉取多期限美债收益率 us_tycr = pro.us_tycr(start_date='20150101', end_date='20241231') us_tycr = us_tycr[['date', 'y2', 'y5', 'y10', 'y30']] us_tycr['date'] = pd.to_datetime(us_tycr['date']) us_tycr = us_tycr.set_index('date').resample('W').last() # 和黄金收益率合并 merged = df_weekly[['gold_ret']].join(us_tycr.diff(), how='inner').dropna() # 算相关性矩阵 corr_matrix = merged.corr() sns.heatmap(corr_matrix, annot=True, cmap='RdYlGn_r', center=0) plt.title('黄金收益率与不同期限美债收益率变化的相关性') plt.show()

这张热力图能帮你快速判断:当前阶段黄金对哪个期限的收益率最敏感。如果 10 年期那一格颜色最深,说明市场还在用 10 年期作为定价锚;如果 2 年期那一格变深了,可能意味着货币政策预期正在主导黄金走势。

4. 把利率变量加进来:联邦基金利率对黄金的传导路径

4.1 利率变动和黄金价格的时间滞后关系

联邦基金利率是美联储直接控制的政策利率,它的变动会通过多条路径传导到黄金价格。第一条路径是实际利率:利率上升,如果通胀没跟上,实际利率就上升,持有黄金的机会成本增加,金价承压。第二条路径是美元:利率上升吸引资本流入美元资产,美元走强,以美元计价的黄金对非美投资者变贵,需求下降。第三条路径是风险偏好:利率上升往往伴随经济预期改善,避险需求下降,黄金的避险溢价收缩。

这三条路径的传导速度不一样。我做过一个简单的滞后相关分析,发现利率变动对黄金的影响在 1 到 3 个月内最明显,超过 6 个月后相关性就衰减得差不多了。这意味着如果你看到美联储加息,不要指望黄金第二天就暴跌,市场需要时间来消化和重新定价。

具体操作上,我会把联邦基金利率的变动做成一个事件序列,每次变动记 +1(加息)或 -1(降息),然后看变动后 20 个、60 个、120 个交易日黄金的累计收益率。用箱线图或者柱状图展示,能直观看到加息周期和降息周期里黄金的表现差异。

# 标记利率变动事件 df['rate_change'] = df['fed_rate'].diff() events = df[df['rate_change'] != 0].copy() # 计算事件后不同窗口的黄金累计收益 for window in [20, 60, 120]: events[f'gold_ret_{window}d'] = events.apply( lambda row: df.loc[row.name:row.name+window, 'gold'].pct_change().sum() if row.name+window < len(df) else np.nan, axis=1 ) print(events[['trade_date', 'rate_change', 'gold_ret_20d', 'gold_ret_60d', 'gold_ret_120d']].head(10))

我实测下来,加息事件后 60 个交易日黄金的平均收益确实为负,但方差很大,说明利率不是唯一决定因素。降息事件后黄金的表现更不一致,有时候降息是因为经济衰退,避险需求反而推高金价;有时候降息是因为通胀回落,实际利率下降也利好黄金。所以你不能简单地看到降息就做多黄金,还得看降息的原因是什么。

4.2 实际利率:把通胀预期从名义利率里剥出来

名义利率对黄金的影响之所以不稳定,是因为它混合了实际利率和通胀预期两个成分。真正对黄金起决定作用的是实际利率,也就是名义利率减去通胀预期。tushare 里没有直接的通胀预期数据,但可以用 10 年期美债收益率减去 10 年期 TIPS 收益率来近似。如果 TIPS 数据拿不到,一个替代方案是用 CPI 同比增速作为通胀预期的粗略代理。

我自己常用的做法是:用us_tycr拿 10 年期名义收益率,用us_cpi拿 CPI 同比,两者相减得到一个粗略的实际利率指标。虽然不如 TIPS 精确,但方向性基本一致。然后看这个实际利率指标和黄金价格的关系,你会发现负相关性比用名义利率时强得多,而且稳定得多。

# 拉取 CPI 数据 cpi = pro.us_cpi(start_date='20150101', end_date='20241231') cpi = cpi[['date', 'nt_yoy']].rename(columns={'date': 'trade_date', 'nt_yoy': 'cpi_yoy'}) cpi['trade_date'] = pd.to_datetime(cpi['trade_date']) # 合并到主表 df = df.merge(cpi, on='trade_date', how='left') df['cpi_yoy'] = df['cpi_yoy'].ffill() # 粗略实际利率 df['real_rate'] = df['us10y'] - df['cpi_yoy'] # 算滚动相关性 df_weekly = df.set_index('trade_date').resample('W').last().dropna() df_weekly['gold_ret'] = df_weekly['gold'].pct_change() df_weekly['real_rate_chg'] = df_weekly['real_rate'].diff() df_weekly['corr_gold_real'] = df_weekly['gold_ret'].rolling(52).corr(df_weekly['real_rate_chg']) print(df_weekly['corr_gold_real'].describe())

这个相关性均值大概在 -0.5 左右,比用名义利率时的 -0.2 到 -0.3 强了不少。这说明剥离通胀预期之后,实际利率对黄金的压制作用更清晰。如果你只记一个结论,那就是:看黄金,盯实际利率,别盯名义利率。

4.3 利率、美元、黄金三者的联动路径验证

把三个变量放在一起,可以做一个简单的路径分析:利率变动先影响美元,美元再影响黄金。或者利率直接通过实际利率影响黄金,同时通过美元间接影响。这两种路径哪个占主导,在不同时期可能不一样。

我用的方法是做两个回归:第一个回归是黄金收益率对美元收益率和实际利率变化同时回归,看哪个系数更显著;第二个回归是美元收益率对实际利率变化回归,看利率对美元的传导强度。如果第一个回归里实际利率的系数显著而美元的系数不显著,说明利率主要通过实际利率渠道直接影响黄金;反之则说明美元是主要中介。

import statsmodels.api as sm # 准备数据 reg_data = df_weekly[['gold_ret', 'dxy_ret', 'real_rate_chg']].dropna() # 回归1:黄金对美元和实际利率 X = sm.add_constant(reg_data[['dxy_ret', 'real_rate_chg']]) y = reg_data['gold_ret'] model1 = sm.OLS(y, X).fit() print(model1.summary()) # 回归2:美元对实际利率 X2 = sm.add_constant(reg_data['real_rate_chg']) y2 = reg_data['dxy_ret'] model2 = sm.OLS(y2, X2).fit() print(model2.summary())

我跑出来的结果是:实际利率变化的系数在回归1里显著为负,美元收益率的系数也显著为负,但实际利率的 t 值更大。这说明两条路径都在起作用,但实际利率的直接效应更强。回归2里实际利率对美元的系数为正但不算特别大,说明利率对美元的传导有,但不是一对一的强关系,中间还夹杂着其他因素比如欧洲和日本的经济状况。

这个结论对实操的指导意义是:如果你要预测黄金走势,实际利率的变化比美元指数的变化更值得关注。美元指数可以作为辅助确认信号,但不应该作为唯一的判断依据。

5. 实操中踩过的坑和几个容易忽略的细节

5.1 数据频率混用导致的虚假相关

我最早做这个分析的时候,犯了一个很基础的错误:把日频的黄金价格和月频的利率数据直接放在一起算相关性。结果出来一个很高的正相关,我当时还兴奋了一下,以为发现了什么新规律。后来仔细一想,月频数据在日频轴上被重复了 20 多次,相当于给同一个观测值加了 20 倍的权重,相关性当然会被扭曲。

这个坑的教训是:不同频率的数据必须先统一频率再分析。要么全部降成月频,要么把低频数据前向填充到日频但只用于展示,不用于统计计算。我现在的做法是,所有相关性分析都在周频上做,因为周频既能过滤掉日频噪音,又不会像月频那样损失太多样本量。

另外,前向填充虽然解决了对齐问题,但会引入自相关。如果你用前向填充后的利率数据做回归,标准误会被低估,t 值会偏高。严谨的做法是用 Newey-West 标准误来修正,或者在回归时把利率变动事件单独拿出来做事件研究,而不是把填充后的水平值直接放进回归。

5.2 接口权限不足时的替代数据源方案

tushare 的宏观接口对积分有要求,us_tycr和us_fed_rate都需要一定积分才能调用。如果你刚开始用,积分不够,有几个替代方案可以让你先把分析框架跑通。

美元指数的替代:用fx_daily接口拿美元兑欧元或者美元兑日元的汇率,取倒数或者直接看汇率变化方向。虽然不如 DXY 全面,但美元兑欧元在 DXY 里权重最大,方向性基本一致。

美债收益率的替代:用美债 ETF 的价格反推。比如 TLT 是 20 年期以上美债 ETF,它的价格和收益率反向变动。你可以用 TLT 的收益率变化作为美债收益率变化的代理变量。虽然不如直接拿收益率精确,但做相关性分析够用了。

联邦基金利率的替代:这个比较难替代,因为它是政策变量。如果实在拿不到,可以用 3 个月期美债收益率作为短期利率的代理,两者走势高度一致。

我的建议是,先用替代数据把整个分析流程跑通,确认逻辑没问题之后,再想办法提升积分权限去拿更精确的数据。不要因为某个接口拿不到就卡住不动,分析的框架比数据的精度更重要。

5.3 滚动相关性在极端行情下的失效

滚动相关性有一个固有缺陷:它假设过去 52 周的关系可以代表当前的关系。但在极端行情下,这个假设会失效。比如 2020 年 3 月全球市场大幅波动期间,所有资产的相关性都趋近于 1,因为大家都在被抛售换现金。这时候黄金和美元的负相关性完全消失,滚动相关性曲线会出现一个明显的向上尖峰。

如果你用这个时期的滚动相关性来做决策,会得到完全错误的信号。我的处理方式是:在滚动相关性之外,再加一个“相关性稳定性”指标,比如过去 52 周里相关系数的标准差。如果标准差突然放大,说明市场关系正在重构,这时候应该降低对相关性信号的信任度,转而关注更基本的驱动因素,比如实际利率和避险情绪。

还有一个细节是,滚动相关性对窗口起点的选择很敏感。如果你把窗口起点从 1 月改成 7 月,得到的曲线可能形状完全不同。我的做法是同时算两个错开半年的滚动窗口,如果两条曲线方向一致,说明信号比较可靠;如果两条曲线背离,说明当前关系不稳定,应该观望。

6. 从数据到判断:怎么把分析结果转化成可操作的观察指标

6.1 构建一个简单的黄金关注度打分表

分析做完之后,最终要落到“现在该不该关注黄金”这个问题上。我自己的做法是做一个简单的打分表,把几个核心指标的变化方向列出来,每个指标给 +1 或 -1,加总得到一个总分。总分越高,说明当前环境对黄金越有利。

指标看多信号(+1)看空信号(-1)
实际利率变化下降上升
美元指数变化走弱走强
联邦基金利率方向降息或暂停加息加息
黄金与美元滚动相关性负相关增强负相关减弱或转正
美债收益率曲线平坦化或倒挂加深陡峭化

这个表不是交易信号,而是一个观察清单。我每周更新一次,看看总分在什么位置。如果总分连续几周在 +3 以上,说明宏观环境对黄金比较友好;如果总分在 -3 以下,说明压制因素占主导。中间区域就属于中性,不需要做太多动作。

需要强调的是,这个打分表只考虑了宏观因子,没有考虑地缘事件、央行购金、ETF 资金流这些因素。所以它只能作为参考框架,不能作为唯一的决策依据。我一般会把它和黄金 ETF 的持仓变化结合起来看,如果打分表偏多且 ETF 持仓在增加,那信号就比较可靠。

6.2 用 tushare 做定期更新的自动化脚本

手动拉数据、算指标、更新打分表,做一两次还行,时间长了肯定坚持不下来。我的做法是写一个自动化脚本,每周定时跑一次,把最新的数据拉下来,更新指标,输出一个简短的报告。

def weekly_report(): # 拉取最新数据 end_date = pd.Timestamp.now().strftime('%Y%m%d') start_date = (pd.Timestamp.now() - pd.Timedelta(days=365*3)).strftime('%Y%m%d') df = fetch_macro_data(start_date, end_date) df_weekly = df.set_index('trade_date').resample('W').last().dropna() # 计算最新指标 latest = df_weekly.iloc[-1] prev = df_weekly.iloc[-2] score = 0 # 实际利率变化 if latest['real_rate'] < prev['real_rate']: score += 1 else: score -= 1 # 美元变化 if latest['dxy'] < prev['dxy']: score += 1 else: score -= 1 # 利率方向 if latest['fed_rate'] <= prev['fed_rate']: score += 1 else: score -= 1 print(f"本周黄金关注度得分: {score}") print(f"实际利率: {latest['real_rate']:.2f} (前值: {prev['real_rate']:.2f})") print(f"美元指数: {latest['dxy']:.2f} (前值: {prev['dxy']:.2f})") print(f"联邦基金利率: {latest['fed_rate']:.2f} (前值: {prev['fed_rate']:.2f})") return score weekly_report()

这个脚本跑一次大概几秒钟,输出一个简单的得分和关键指标的最新值。你可以把它挂到定时任务里,每周一早上自动跑,或者手动执行。我自己的习惯是每周日晚上跑一次,花两分钟看一下结果,对下周的宏观环境有个大致判断。

6.3 几个我反复验证过的经验判断

做了这么长时间的数据分析,有几个经验是我反复验证过的,分享出来供你参考。

第一,黄金和美元的相关性在危机时期会失效。平时负相关,危机时可能同涨同跌。所以不要在任何时候都拿美元来反向推断黄金,要看市场处于什么状态。判断方法很简单:看 VIX 或者美股波动率,如果波动率突然飙升,就别太依赖美元和黄金的负相关关系了。

第二,实际利率是黄金最可靠的单一驱动因子。如果你只能看一个指标,就看 10 年期美债收益率减去通胀预期。这个指标和黄金的负相关性在大部分时间都成立,而且逻辑清晰。名义利率、美元指数、风险偏好都是辅助确认,不是核心。

第三,利率变动对黄金的影响有滞后,不要抢跑。美联储加息当天黄金可能不跌反涨,因为市场已经提前定价了。真正的压制效应往往在加息落地后的一两个月才显现。所以做黄金的宏观分析,要有耐心,不要被当天的价格波动带偏。

第四,数据频率越高,噪音越大,结论越不可靠。日频数据适合看短期情绪,周频数据适合看中期趋势,月频数据适合看长期结构。我做宏观判断基本只看周频和月频,日频只用来确认极端事件。如果你用日频数据算出来的相关性去做周级别的决策,大概率会被噪音误导。

第五,tushare 的数据质量整体不错,但偶尔会有缺失和异常值。我遇到过某天的黄金价格明显偏离前后几天,后来发现是数据源的问题。所以拉完数据之后,一定要做基本的异常值检查,比如用 3 倍标准差或者 IQR 方法标记离群点,确认是真实波动还是数据错误。如果是数据错误,手动修正或者剔除,不要直接扔进模型里。

这套分析框架我用了挺长时间,从数据拉取到指标计算再到打分输出,整个流程跑下来大概十几分钟就能完成一次全面更新。如果你也在做跨资产联动分析,希望这些代码和经验能帮你省掉一些摸索的时间。数据源和接口可能会变,但分析的逻辑和框架是通用的,换一套数据照样能用。

相关新闻

ICMP协议详解:从ping原理到MTU黑洞与防火墙策略

ICMP协议详解:从ping原理到MTU黑洞与防火墙策略

ICMP 这协议太容易被忽略了。平时大家说网络调试&#xff0c;第一反应是 ping&#xff0c;第二反应是 ping 通没有&#xff0c;但很少有人注意到 ping 背后那个真正干活的协议。它就是 ICMP&#xff08;Internet Control Message Protocol&#xff0c;互联网控制报文协议&#…

2026/10/21 5:26:09 阅读更多 →
知识工作插件集:把信息采集到发布归档串成顺畅流水线

知识工作插件集:把信息采集到发布归档串成顺畅流水线

做知识工作的人&#xff0c;每天真正用在思考上的时间其实很少&#xff0c;大部分精力都耗在找资料、记灵感、整理格式这些“周边事务”上。我自己也是被这些事反复折磨之后&#xff0c;才下定决心做了一套名为 knowledge-work-plugins 的插件集合。它的目标很直接&#xff1a;…

2026/10/21 5:26:09 阅读更多 →
技能三层分类法:从硬技能到元技能,构建高价值技能组合

技能三层分类法:从硬技能到元技能,构建高价值技能组合

1. 从“skills”这个标题说起&#xff1a;一个被严重低估的元能力“skills”这个词&#xff0c;单独拎出来看&#xff0c;信息量几乎为零。它不像“如何用Python做数据清洗”那样具体&#xff0c;也不像“三小时搭建个人博客”那样有明确交付物。但恰恰是这种模糊性&#xff0c…

2026/10/21 5:26:09 阅读更多 →

最新新闻

Linux僵尸、孤儿与守护进程:原理、区别与实战实现

Linux僵尸、孤儿与守护进程:原理、区别与实战实现

1. 项目概述&#xff1a;从“进程尸体”到“后台幽灵”的真实世界映射在 Linux 系统里&#xff0c;你执行ps aux | grep defunct时看到的<defunct>标记&#xff0c;不是报错&#xff0c;而是一具“进程尸体”——它已经死亡&#xff0c;却还没被收尸&#xff1b;你用nohu…

2026/10/21 6:57:46 阅读更多 →
Docker部署Redis的四大核心问题:网络、持久化、配置、集群宣告

Docker部署Redis的四大核心问题:网络、持久化、配置、集群宣告

1. 为什么非得用 Docker 部署 Redis&#xff1f;——从三台裸机故障说起去年在某高校实验室做模拟项目X的后端支撑时&#xff0c;我负责缓存层搭建。最初按老办法&#xff1a;三台物理服务器&#xff0c;每台手动编译安装 Redis 6.2&#xff0c;配好 bind、port、requirepass、…

2026/10/21 6:57:46 阅读更多 →
Docker精讲:从Flask项目构建生产级容器镜像

Docker精讲:从Flask项目构建生产级容器镜像

1. 为什么“快速入门”反而最容易卡在第一步&#xff1f; 很多人点开“Docker 快速入门”教程&#xff0c;前五分钟信心满满——装完 Docker Desktop、跑通 docker run hello-world &#xff0c;就以为自己已经“会了”。结果第二天想把本地写好的 Python 脚本打包成镜像&am…

2026/10/21 6:57:46 阅读更多 →
机器学习到强化学习:四大AI方向实战导航

机器学习到强化学习:四大AI方向实战导航

如果你已经跟着这个系列走到第三篇&#xff0c;大概率不是刚装上 Python 的新手了。前面两篇我们聊了环境搭建、NumPy/Pandas 手感、Scikit-learn 的套路&#xff0c;也跑通了最简单的回归和分类。这些属于"会走"的阶段。这篇导航想做的是另一件事&#xff1a;把机器…

2026/10/21 6:57:46 阅读更多 →
技能提升的底层逻辑:从硬技能到元能力的系统方法

技能提升的底层逻辑:从硬技能到元能力的系统方法

1. 从“skills”这个标题说起&#xff1a;一个被严重低估的元能力“skills”这个词&#xff0c;单独拎出来看&#xff0c;信息量几乎为零。它不像“如何用Python做数据清洗”那样具体&#xff0c;也不像“三小时搭建个人博客”那样有明确交付物。但恰恰是这种模糊性&#xff0c…

2026/10/21 6:57:46 阅读更多 →
降AI率工具怎么选?八类平台实测对比与避坑指南

降AI率工具怎么选?八类平台实测对比与避坑指南

这个选题最近被问得太多了。我自己的后台留言里&#xff0c;隔三差五就有人发来一张检测报告截图&#xff0c;问为什么文章明明是自己写的还是被标成“疑似AIGC生成”&#xff0c;或者干脆是——交作业前一天才开始慌&#xff0c;到处找降AI率的工具。说实话&#xff0c;这事在…

2026/10/21 6:56:45 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →