RSI 和 MACD 的计算方法
直接答案
RSI(相对强弱指数)和 MACD(指数平滑异同移动平均线)是根据历史价格序列和一组少量设置计算得出的。
- RSI 通过选定回溯周期内的平均涨幅和平均跌幅,将近期价格动量转换为 0–100 的尺度。
- MACD 使用指数移动平均线(EMA)来衡量快线与慢线趋势估计值之间的差异,然后可选择性地用另一个 EMA 对该差异进行平滑处理。
要解释或验证任一指标,你只需要:(1) 一个按时间排序的价格列表,(2) 指标的参数(如回溯长度或 EMA 周期),以及 (3) 精确的计算方法(特别是 RSI 的平均方式)。由于计算方法依赖于这些选择,不同图表工具或不同设置可能导致结果不同。
机制与定义
RSI:动量输入的定义
RSI 从连续数据点之间的价格变化开始计算。
- 计算变化量:
- (\Delta_t = \text{Price}t - \text{Price}{t-1})
- 将变化量拆分为涨幅和跌幅:
- (\text{Gain}_t = \max(\Delta_t, 0))
- (\text{Loss}_t = \max(-\Delta_t, 0))
- 在选定长度为 (N) 的回溯窗口内,计算平均涨幅和平均跌幅。
一种常见的 RSI 计算方法使用 Wilder 式平滑法。使用 Wilder 平滑时,首先用前 (N) 个涨幅和跌幅计算初始平均值,然后递归更新:
- 初始值(用于第一个 RSI 值):
- (\text{AvgGain}N = \frac{1}{N}\sum{i=1}^{N}\text{Gain}_i)
- (\text{AvgLoss}N = \frac{1}{N}\sum{i=1}^{N}\text{Loss}_i)
- 更新(对于 (t > N)):
- (\text{AvgGain}t = \frac{(\text{AvgGain}{t-1}\cdot (N-1)) + \text{Gain}_t}{N})
- (\text{AvgLoss}t = \frac{(\text{AvgLoss}{t-1}\cdot (N-1)) + \text{Loss}_t}{N})
然后计算相对强度比率:
- (\text{RS}_t = \frac{\text{AvgGain}_t}{\text{AvgLoss}_t})
最后转换为 RSI 尺度:
- (\text{RSI}_t = 100 - \frac{100}{1 + \text{RS}_t})
重要边界情况:如果 (\text{AvgLoss}_t = 0),则直接除法会导致 (\text{RS}_t) 未定义。许多实现方式在这种情况下将 RSI 视为趋近于 100(当平均跌幅在平均窗口内实际为零时)。在验证结果时,必须与所用数据工具采用的惯例保持一致。
MACD:EMA 差值的定义
MACD 基于指数移动平均线(EMA),这是一种加权移动平均线,对近期价格反应更快。
核心输入包括:
- 一个快线 EMA 周期 (a)
- 一个慢线 EMA 周期 (b)
- 一个信号线周期 (c)(通常在许多默认设置中 (c) 为 9,但应确认你的具体设置)
-
在选定的价格序列上计算快线和慢线 EMA:
- (\text{EMA}_{a}(t))
- (\text{EMA}_{b}(t))
-
将 MACD 线计算为两者之差:
- (\text{MACD}(t) = \text{EMA}{a}(t) - \text{EMA}{b}(t))
-
可选择性地将信号线计算为 MACD 线的 EMA:
- (\text{Signal}(t) = \text{EMA}_{c} \big(\text{MACD}(t)\big))
-
通常还会显示直方图(取决于图表惯例):
- (\text{Histogram}(t) = \text{MACD}(t) - \text{Signal}(t))
验证的关键细节:EMA 的初始化方式以及实现中使用的精确公式可能有所不同(例如,第一个 EMA 值的初始化方式)。如果你计算的 MACD 与图表不一致,请检查双方是否使用了相同的 EMA 初始化方式和周期。
证据或示例(可自检)
以下是一些简单且可验证的方法,可用于你已有的任何固定历史价格序列来检验你的理解。
RSI 示例设置
本示例的假设:
- 你有价格数据 (\text{Price}_0, \text{Price}_1, …)
- 你选择回溯周期 (N)
- 你使用上述 Wilder 式平滑方法
你可以复现的步骤:
- 为每一步构建 (\Delta_t)。
- 转换为 (\text{Gain}_t) 和 (\text{Loss}_t)。
- 对于第一个 RSI 值,对前 (N) 个涨幅和跌幅取平均。
- 对后续点,使用 Wilder 递推公式更新平均值。
- 应用公式 (\text{RSI}_t = 100 - \frac{100}{1 + \text{AvgGain}_t/\text{AvgLoss}_t})。
一个可靠的自测方法是:从头开始在相同输入上重新计算 RSI,并在相同时间索引处比较数值。如果你只想验证计算机制,可重点关注早期 RSI 输出,因为初始平均值在此阶段影响最大。
MACD 示例设置
假设:
- 你有一个按时间排序的价格序列
- 你选择周期 (a)(快线)、(b)(慢线)和 (c)(信号线)
- 你对两个 EMA 和信号 EMA 使用相同的 EMA 方法(包括初始化)
步骤:
- 在整个序列上计算 (\text{EMA}{a}(t)) 和 (\text{EMA}{b}(t))。
- 相减得到 (\text{MACD}(t))。
- 将 (\text{Signal}(t)) 计算为 (\text{MACD}(t)) 的 EMA。
- 如有必要,计算 (\text{Histogram}(t) = \text{MACD}(t) - \text{Signal}(t))。
一个自检方法是:验证你的 MACD 线是否在每个索引处等于快线 EMA 减去慢线 EMA。如果 MACD 线匹配但信号线不匹配,差异几乎总是由于信号周期或 EMA 初始化不一致所致。
局限性与失效模式
1) 不同“标准”设置产生不同数值
RSI 和 MACD 的输出都依赖于参数(RSI 回溯周期 (N);MACD 的 EMA 周期 (a)、(b),以及可选的信号周期 (c))。即使用户认为使用的是相同指标,不同平台的设置也可能不同。
2) 数据对齐和缺失点改变计算结果
这些指标基于连续数据点构建。如果你的输入序列存在缺失K线、不规则时间戳,或“价格”定义不同(例如收盘价与其他衍生值),RSI 的涨跌幅和 MACD 的 EMA 序列都可能发生变化。
3) EMA 和 RSI 平均初始化影响早期数值
RSI 的首个计算值依赖于前 (N) 个周期的初始平均。MACD 的早期数值取决于 EMA 在算法“锁定”前的初始化方式。这可能导致图表历史起始部分出现明显差异。
4) 边界情况可能导致未定义比率
在 RSI 中,当平均跌幅为零(或实际为零)时,(\text{RS}) 会出现除零错误。不同实现方式处理方式不同(例如,将 RSI 视为 100)。如果你独立验证,必须采用相同的边界情况处理惯例。
5) 指标并非结果的独立保证
RSI 和 MACD 描述的是价格和动量中的模式(经数学转换),而非未来行为的保证。