平时盯黄金行情,最常碰到的就是价格波动大得让人手心发汗。前几天看着K线一路拉升,RSI蹭蹭往上窜,我就在想,这波是动能还在,还是要回调了?这个时候,RSI就派上用场了,它帮我把直觉量化,把市场情绪用数字表现出来。
RSI 直观感受
RSI 是相对强弱指数,把一段时间内上涨和下跌的幅度比率算出来,再映射到 0~100 之间。说白了就是:数字高了,说明最近买得猛,短期可能要喘口气;数字低了,说明卖得狠,可能会反弹。
我用得最多的是 14 天周期,代码很简洁:
import pandas as pd def calc_rsi(prices, period=14): delta = prices.diff() up = delta.clip(lower=0) down = -1 * delta.clip(upper=0) roll_up = up.rolling(period).mean() roll_down = down.rolling(period).mean() rsi = 100 - (100 / (1 + roll_up / roll_down)) return rsi df['RSI'] = calc_rsi(df['close'])
算出来的 RSI 就像心跳一样,涨跌节奏清晰可见,行情一目了然。
超买超卖并非绝对
很多人只看 70/30 的数值来买卖,其实容易踩坑。黄金波动性大,RSI 连续高位或低位很常见。有次 RSI 连续五天在 75 以上,价格还是往上走,这时候硬盯“超买”只会掉队。
我会结合价格趋势来看:上升趋势里 RSI 高更多说明动能还在,而不是马上回调;横盘或下跌里,RSI 高就可能真要回落。
df['trend'] = df['close'].rolling(20).mean() df['signal'] = '中性' df.loc[(df['RSI'] > 70) & (df['close'] > df['trend']), 'signal'] = '动能强' df.loc[(df['RSI'] > 70) & (df['close'] < df['trend']), 'signal'] = '可能回调' df.loc[(df['RSI'] < 30) & (df['close'] < df['trend']), 'signal'] = '可能反弹'
这样一来,RSI 就不孤立,和趋势一起看,信号更有参考价值。
背离和动态阈值
RSI 有两个小技巧特别管用:
背离:价格创新高,RSI 没跟上,说明上涨动能减弱;价格创新低,RSI 没创新低,说明卖压在减轻。背离信号比单纯的超买超卖更靠谱。
动态阈值:不要死盯 70/30。黄金波动大,RSI 常年在 60~80 或 20~40。用近期极值调整阈值,效果自然不少:
rsi_max = df['RSI'].rolling(50).max() rsi_min = df['RSI'].rolling(50).min() df['RSI_norm'] = (df['RSI'] - rsi_min) / (rsi_max - rsi_min) * 100
归一化之后,不同阶段都能判断 RSI 相对强弱,更贴合行情。
数据怎么来
上面的分析跑起来,第一步得把黄金的实时价格稳稳当当地接进来。我以前用免费源老遇到延迟和缺K线的问题,后来行情和策略层直接接了 Alltick 的数据接口,黄金、外汇、数字货币都能覆盖,数据质量和实时性跟免费源不在一个级别。有了可靠的数据基座,RSI计算、动态阈值这些技巧才能真正发挥作用。
一些感受
光看指标不够,但有了 RSI,至少能把市场短期情绪量化出来。黄金动荡,光盯价格和成交量容易被情绪带走。RSI 配合趋势、背离和动态阈值,让策略多了点理性依据。
最近在实盘里试了下,归一化 RSI 来判断超买超卖,比以前直接看 70/30 效果顺眼多了,入场点、止盈点都自然不少,也不容易跟着行情情绪跑。
