相对活力指数(RVI):公式、信号与参数设置

相对活力指数(Relative Vigor Index,简称RVI或RVGI)是John Ehlers设计的动量振荡指标:它把每根K线的“收盘减开盘”与“最高减最低”进行比较,先用1-2-2-1加权平均平滑,再对10根K线求和。读数在零轴上方,说明收盘价普遍高于开盘价;它与4根K线信号线的交叉以及背离,都会给出交易信号。它和Dorsey的相对波动率指数(Relative Volatility Index)不是同一个指标。
大多数振荡指标只看收盘价。相对活力指数还把开盘价纳入计算,正是这一个区别,让它能看到RSI和随机指标看不到的东西:K线在自身波幅之内是强势收尾,还是逐渐走弱。本篇Quantum Algo指南会用13根贴近真实行情的K线手算一遍Ehlers的公式,说明滞后从何而来,把它与名字相近的相对波动率指数区分开,并给出TradingView参数设置、一个Pine Script版本以及需要警惕的失效情形。
经得起公开验证的指标。
一个引擎,四款精准工具:Gold(XAU)Scalper、机构级 Gravity Zone、Zeno 动量振荡指标,以及面向股票的 Zeno Stocks。
相对活力指数衡量的是什么?
每根K线都透露出两条关于力度的信息:收盘价相对开盘价的位置,以及为了到达那里走了多远。一根从最低点开盘、在最高点收盘的K线,全是“活力”。一根波动了两美元、最后又收在开盘价的K线,则毫无活力可言。相对活力指数(通常简称RVI或RVGI)把这一观察变成了一个振荡指标:用平滑后的收盘减开盘,除以平滑后的最高减最低。
John F. Ehlers在2002年1月号的Technical Analysis of Stocks & Commodities(第20卷第1期,第16至20页)上发表了这个指标。文章的前提很简单:上涨行情中价格往往收在开盘价之上,下跌行情中则收在开盘价之下;再用波幅进行归一化,就能让结果在不同品种和不同波动环境之间相互比较。Ehlers是一位把信号处理思想带入交易的工程师,这个指标的4根K线对称滤波器就带着他的鲜明印记——他在自己的各类研究中都使用这种短周期平滑。
指标输出围绕零轴波动。正值表示回看周期内收盘价一直强于开盘价,负值则相反。理论上它没有固定的上下限,但由于任何单根K线的分子都不可能超过分母,读数始终落在−1到+1之间,通常都在±0.5以内。信号线是对RVI再做一次4根K线的平滑,用于产生交叉信号。
如果你已经在用随机指标,最贴切的理解方式是:随机指标问的是收盘价位于近期高低区间的什么位置,而RVI问的是收盘价相对开盘价的位置,并用该区间来缩放。就是这一处改动,让它衡量的是K线内部的买卖压力,而不是价格在区间中的位置。
相对活力指数与相对波动率指数:千万别搞混
搜索“RVI”,你会得到两个毫不相干的指标。这一点经常让交易者犯错,论坛上如此,一些经纪商的术语表里也是如此。之所以要紧,是因为它们回答的是不同的问题,绘制的刻度也不同。
| 相对活力指数(Relative Vigor Index) | 相对波动率指数(Relative Volatility Index) | |
|---|---|---|
| 发明者 | John Ehlers | Donald Dorsey |
| 首次发表 | Stocks & Commodities,2002年1月 | Stocks & Commodities,1993年6月(在1995年的后续文章中加以改进) |
| 核心输入 | 收盘 − 开盘,除以最高 − 最低 | 10日标准差,代入类似RSI的上涨/下跌拆分计算 |
| 刻度 | 以零为中心,大致在−1到+1之间 | 0到100,以50为中线 |
| 回答的问题 | K线是否在某一方向上有力度地收盘? | 波动率是在上涨日扩张,还是在下跌日扩张? |
| TradingView中的名称 | Relative Vigor Index(简称RVGI) | Relative Volatility Index(RVI) |
Dorsey把他的RVI设计成一个确认型指标。他在1993年的文章中提出,确认工具应当衡量与被确认工具不同的东西,因此他用标准差取代了RSI中的价格变化。Ehlers的RVI则是一个主要的动量振荡指标,拥有自己的交叉信号。如果策略要求用其中一个,你却用了另一个,策略就会在不知不觉中失效。
◆ Quick test: if the indicator you're looking at runs 0 to 100 and has a 50 line, it's Dorsey's Relative Volatility Index. If it oscillates around zero with a red signal line, it's Ehlers' Relative Vigor Index. On TradingView, look for the short title RVGI.
本指南接下来讨论的都是Ehlers的相对活力指数。
相对活力指数公式,逐步拆解

计算分为四步。每一步都使用同一个4根K线的对称加权移动平均(SWMA),权重为1、2、2、1。
分子 = [(C−O) + 2(C−O)[1] + 2(C−O)[2] + (C−O)[3]] / 6
分母 = [(H−L) + 2(H−L)[1] + 2(H−L)[2] + (H−L)[3]] / 6
RVI = Sum(分子, N) / Sum(分母, N)
信号线 = [RVI + 2·RVI[1] + 2·RVI[2] + RVI[3]] / 6
这里的[1]表示前一根K线,N是长度,默认为10。有几个细节是大多数讲解都略过的:
- Sum or average makes no difference. Ehlers' original TradeStation code (published in the January 2002 Traders' Tips) uses Summation over Length. Other sources describe a simple moving average of the numerator divided by a simple moving average of the denominator. Since both are divided by the same N, the ratio is identical.
- The /6 cancels too. The numerator and denominator are both divided by 6, so it drops out of the ratio. It only matters for the signal line.
- The filter is symmetric. Weights 1-2-2-1 centre the smoothing 1.5 bars back. Ehlers' code calls it a triangular average of length 4, MetaTrader's documentation spells out the 1-2-2-1 weights, and TradingView's Pine function
ta.swmauses the same weights. - Warm-up. The first numerator needs 4 bars, the first RVI needs N + 3 bars (13 at length 10), and the first signal value needs N + 6 bars (16).
要预期到滞后。4根K线的滤波器会让分子和分母延迟约1.5根K线,对10根K线求和又增加约4.5根,因此RVI线反映的是以大约6根K线之前为中心的市场状况。信号线还要再滞后1.5根。这就是为什么RVI交叉往往出现在一段行情的第一波之后,而不是在行情起点。
为什么用1-2-2-1,而不是简单平均?
这些权重并非随意设定。Ehlers把RVI定位为一个用滤波和信号处理方法翻新的老思路,而这个4阶滤波器有一个简洁的特性,几行算术就能验证:它能完全抵消每2根K线重复一次的周期,以及每3根K线重复一次的周期。输入+1、−1、+1、−1这样的交替序列,输出是(1 − 2 + 2 − 1) / 6 = 0。输入不断重复的+1、0、−1序列,每个输出同样都是0。这类2根和3根K线的小幅抖动在任何时间周期上基本都是噪音,所以在求和之前先把它们去掉,得到的曲线会比4根K线简单平均更干净——后者只能抵消2根和4根K线的周期。
代价是这个滤波器很短。它只清除最快的那部分噪音,更慢的波动全都保留在数据里。处理这部分是N根K线求和的任务,这也是为什么决定RVI看起来有多跳跃的是长度参数,而不是平滑方式。
计算示例:手算RVI
为了让算术更易读,这个例子使用长度4而不是10,逻辑完全相同。下面是13根K线,行情从100上涨到104附近,随后停滞、回调,然后开始回升:
| K线 | 开盘 / 最高 / 最低 / 收盘 | 收盘 − 开盘 | 最高 − 最低 |
|---|---|---|---|
| 1 | 100.0 / 101.2 / 99.6 / 100.9 | +0.90 | 1.60 |
| 2 | 100.9 / 102.0 / 100.5 / 101.8 | +0.90 | 1.50 |
| 3 | 101.8 / 102.4 / 101.0 / 101.3 | -0.50 | 1.40 |
| 4 | 101.3 / 102.9 / 101.1 / 102.6 | +1.30 | 1.80 |
| 5 | 102.6 / 103.5 / 102.2 / 103.1 | +0.50 | 1.30 |
| 6 | 103.1 / 103.6 / 102.0 / 102.4 | -0.70 | 1.60 |
| 7 | 102.4 / 103.0 / 101.5 / 102.8 | +0.40 | 1.50 |
| 8 | 102.8 / 104.1 / 102.6 / 103.9 | +1.10 | 1.50 |
| 9 | 103.9 / 104.4 / 103.0 / 103.2 | -0.70 | 1.40 |
| 10 | 103.2 / 103.8 / 102.1 / 102.5 | -0.70 | 1.70 |
| 11 | 102.5 / 103.0 / 101.4 / 101.7 | -0.80 | 1.60 |
| 12 | 101.7 / 102.6 / 101.2 / 102.3 | +0.60 | 1.40 |
| 13 | 102.3 / 103.4 / 102.0 / 103.1 | +0.80 | 1.40 |
第1步:第一个分子与分母
On bar 4, the close-minus-open values for bars 4, 3, 2 and 1 are +1.30, −0.50, +0.90 and +0.90. Applying 1-2-2-1 weights: (1.30 + 2×(−0.50) + 2×0.90 + 0.90) / 6 = 3.00 / 6 = 0.5000. The ranges are 1.80, 1.40, 1.50 and 1.60: (1.80 + 2.80 + 3.00 + 1.60) / 6 = 9.20 / 6 = 1.5333.
第2步:第一个RVI值
With length 4, the first RVI needs four numerators, so it arrives on bar 7. Sum of numerators for bars 4 to 7: 0.5000 + 0.5000 + 0.4000 + 0.2167 = 1.6167. Sum of denominators: 1.5333 × 3 + 1.5167 = 6.1167. RVI = 1.6167 / 6.1167 = 0.2643. In plain words, over that window the smoothed bodies were about 26% of the smoothed ranges, in the bullish direction.
第3步:信号线
The signal needs four RVI values, so it first appears on bar 10: (0.1219 + 2×0.1736 + 2×0.2110 + 0.2643) / 6 = 1.1554 / 6 = 0.1926 (0.1925 at full precision).
| K线 | 分子(C−O的SWMA) | 分母(H−L的SWMA) | RVI,长度4 | 信号线 |
|---|---|---|---|---|
| 4 | 0.5000 | 1.5333 | 无 | 无 |
| 5 | 0.5000 | 1.5333 | 无 | 无 |
| 6 | 0.4000 | 1.5333 | 无 | 无 |
| 7 | 0.2167 | 1.5167 | 0.2643 | 无 |
| 8 | 0.1667 | 1.5000 | 0.2110 | 无 |
| 9 | 0.2667 | 1.5000 | 0.1736 | 无 |
| 10 | 0.0833 | 1.5000 | 0.1219 | 0.1925 |
| 11 | -0.4167 | 1.5500 | 0.0165 | 0.1364 |
| 12 | -0.5167 | 1.5667 | -0.0954 | 0.0592 |
| 13 | -0.0500 | 1.5167 | -0.1467 | -0.0304 |
这些数字说明了什么
价格在第8根K线收出最高收盘价103.9,但RVI更早见顶,在第7根K线,此后每一根都在下降。这正是指标在发挥作用:价格仍在高位附近时,第6、9、10和11根K线都收在开盘价下方,所以在回调到来之前,活力就已经衰减了。到第10根K线时,RVI(0.1219)已位于信号线(0.1925)下方,形成看跌交叉,并在第12根K线跌破零轴。
再看最后两根K线。第12和第13根都是实体饱满的阳线,价格也回到了103.1,可RVI仍在下滑,跌到−0.1467。4根K线滤波器和求和窗口带来的滞后,意味着它还没跟上这次转折。如果长度是10,延迟还会更长。把这些数据行粘贴到下面的计算器里,就能复现每一个数字;再改动长度,看看读数变化得有多快。
如何解读RVI信号:交叉、零轴与背离

信号线交叉
经典信号是RVI与其信号线交叉:上穿看涨,下穿看跌。由于信号线只是对RVI做了4根K线的平滑,交叉出现得很频繁;在横盘行情中,每隔几根K线就会来回交替。最可靠的用法是顺着更高时间周期的趋势方向操作。上升趋势回调中的看涨交叉,比区间中部的看涨交叉要好得多。
相对零轴的位置
在零轴上方,说明整个窗口内收盘价一直强于开盘价,买方的K线收得更强;在零轴下方,则是卖方占优。零轴很适合用作行情状态过滤器:RVI在零轴上方时只做多头交叉,在零轴下方时只做空头交叉,就能避开大量逆势的来回打脸。
背离
当价格创出更高的高点,RVI却形成更低的高点时,说明新高处的K线收盘力度不如前一个高点处的K线。Ehlers认为收盘与开盘之差承载着行情的能量,这恰恰是这种背离具有参考价值的原因:即使极值仍在走高,它也显示买方在K线内部正逐渐失去控制。上面的计算示例就是一个缩小版。看涨背离则相反:价格创出更低的低点,RVI却形成更高的低点。
把背离当作警告,而不是入场信号。在强势趋势中,动量可以背离很长时间。行动之前,先配合一个结构性触发条件,比如我们在BOS与CHoCH指南中讲到的突破最近一个摆动点。
结合K线形态
由于RVI由K线实体和波幅构成,它与你在图表上看到的K线形态高度吻合。一连串十字星K线会把分子拉向零,即使波幅依然很大,也会把RVI拖向零轴。
不同时间周期下相对活力指数的最佳参数
在Ehlers的原始代码、MetaTrader以及TradingView内置指标中,默认长度都是10,三者的信号线平滑也都固定为4根K线。信号线你几乎不需要动,长度则值得调整:
| 使用场景 | 长度 | 原因 |
|---|---|---|
| 1到5分钟图上的scalping | 6到8 | 转向更快;接受更多噪音,并用趋势过滤 |
| 15分钟到1小时的日内交易 | 10 | 默认值,兼顾速度与平滑度 |
| 4小时图和日线上的swing trading | 10到14 | 在持续多日的回调中交叉更少 |
| 周线级别的趋势背景 | 14到20 | 读取的是底层压力,而不是单个波段 |
这些范围是来自实际使用的起点,并非优化出来的数值,我们也没有找到任何确定最佳长度的已发表研究。有两条经验法则站得住脚。第一,长度每增加一根K线,大约增加半根K线的滞后。第二,长度低于6时,RVI会紧跟单根K线的实体,这时你还不如直接看K线。
一个不错的多时间周期习惯,是在比入场周期高一级的时间周期上读RVI。如果1小时图的RVGI位于零轴上方且在信号线之上,就只在15分钟图上做多头交叉。这样你既能用高周期的力度做过滤,又能用低周期把握时机,两个周期的参数也不必一致。
市场类型同样重要。有真实开盘时段的股票和股指期货,开盘价是有意义的。而在加密货币和现货外汇这类24小时市场中,日内K线的开盘价就是前一根K线的收盘价,因此RVI在这些市场里更像是平滑后的收盘对收盘动量。它仍然有效,但日线和按交易时段划分的图表能提供更有意义的开盘价。
RVI与随机指标、RSI和MACD相比如何?
| 指标 | 比较的对象 | 刻度 | 是否用到开盘价? | 最擅长 |
|---|---|---|---|---|
| 相对活力指数 | 收盘价对比开盘价,按波幅缩放 | 围绕零轴 | 是 | K线内部的力度、推动力衰减 |
| 随机指标 | 收盘价对比近期高低区间 | 0到100 | 否 | 区间极值、回调时机 |
| RSI | 平均上涨收盘对比平均下跌收盘 | 0到100 | 否 | 超买/超卖、动量状态 |
| MACD | 收盘价的快速均线对比慢速均线 | 无上下限,以价格为单位 | 否 | 趋势动量及其转折 |
真正的区别在于开盘价。只看收盘价的振荡指标无法区分两种交易日:一种是高开后全天被抛售,另一种是平开后一路上涨——只要两者收盘价相同。RVI能区分:前者是负实体,后者是正实体。这让RVI成为RSI旁边一个有用的“第二意见”,而不是替代品。
反过来说,RVI会忽略跳空。收盘减开盘只衡量K线内部发生的事情,所以隔夜高开后全天横盘,读数就是中性的。如果你的优势来自跳空,那么像RSI这样基于收盘对收盘的工具能看到它们,而RVI看不到。想找搭配思路,可以参考我们的最佳指标组合指南和随机动量指数(SMI)指南,其中介绍了能相互补充、又不重复使用同一输入的振荡指标。
如何在TradingView上设置相对活力指数
- Open a chart, click Indicators, and search "Relative Vigor Index". Pick the built-in one; its short title on the chart is RVGI. Don't pick Relative Volatility Index by mistake.
- RVGI窗格显示两条线:RVGI线(默认绿色)和Signal信号线(红色)。
- Open settings. The Length input defaults to 10. Change it there; the signal smoothing has no input because it's fixed at 4 bars.
- 在“样式”选项卡中或用绘图工具在0处添加一条水平线,方便一眼看清零轴所代表的行情状态。
- Set alerts with Alert → condition RVGI, "Crossing", Signal. Use "Once per bar close" so the alert only fires on a confirmed cross, since the live bar's values move until it closes.
如果你想修改它,下面这个Pine Script v6版本可以复现内置指标的计算:
//@version=6
indicator("Relative Vigor Index", "RVGI", format = format.price, precision = 4)
len = input.int(10, "Length", minval = 1)
rvi = math.sum(ta.swma(close - open), len) / math.sum(ta.swma(high - low), len)
sig = ta.swma(rvi)
plot(rvi, "RVGI", color.green)
plot(sig, "Signal", color.red)
hline(0, "Zero")
在已确认的K线上,RVI不会重绘:每个输入都是已完成K线的OHLC数据。当前K线的数值在收盘前会不断变化,任何指标都是如此,所以警报应当等到收盘再触发。我们的不重绘指标指南详细解释了其中的区别。
相对活力指数何时会失效
- Choppy ranges. In sideways markets, candle bodies alternate direction and the signal line crosses every few bars. This is the main source of losing RVI trades. A trend filter, such as price relative to a 50-period average from our moving averages guide, removes many of them.
- Gap-driven moves. RVI only sees what happens between open and close. A stock that gaps 4% on earnings and then drifts sideways shows little vigor, even though the gap was the whole move.
- Late signals in fast reversals. As the worked example showed, the RVI was still falling two strong green bars into a recovery. V-shaped turns leave it behind.
- Thin or tiny-range bars. When ranges are very small, as in pre-market or holiday sessions, a few ticks of body produce large RVI swings. The denominator is the safeguard, but only if the window includes normal bars too.
- Persistent strong trends. In a steady trend with small bodies and long wicks, RVI can hover near zero and print bearish crosses that never pay. Momentum is fading on paper while price keeps grinding.
- Misidentification. Running the Relative Volatility Index while following an RVGI method, or vice versa, is the most common avoidable mistake.
关于实证:我们没有找到任何严谨、独立的RVI交叉表现研究,Ehlers的原始文章也只是把它作为一个振荡指标来介绍,而不是一个经过检验的交易系统。在信任它之前,先在你自己的市场和时间周期上测试,并使用基于ATR的止损,让风险控制完全不依赖于振荡指标。
一种基于规则的简单RVI交易方法

下面这个框架让RVI发挥它的长处,其余部分则交给其他工具。这是一个供你测试的框架,而不是经过验证的系统。
- Trend. Trade long only when price is above its 50-period EMA and the EMA is rising; short only in the mirror case.
- Pullback. Wait for price to pull back toward the EMA, with the RVI dipping below its signal line.
- Trigger. Enter when the RVI crosses back above its signal on a closed bar, preferably while still above zero or crossing up through it.
- Stop. Below the pullback low, or 1.5× ATR from entry, whichever is wider.
- Exit. Take partial profit at 2R. Exit the rest on a bearish RVI cross below zero, or on a bearish divergence at a new high followed by a structure break.
数字示例:上升趋势中价格回调至104.20,RVI在0.08处上穿信号线,ATR为0.60。1.5× ATR的止损位于入场价下方0.90,即103.30。如果单笔风险为$300,仓位就是$300 / 0.90 ≈ 333个单位。2R目标位在106.00。
如果想找基于类似滤波思路、更平滑的动量替代指标,可以看看我们的TRIX指标指南和卡尔曼滤波交易指南。
相对活力指数与Quantum Algo
RVI最适合作为确认工具:它告诉你K线是否正朝着你预期的方向有力度地收盘。但在告诉你该从哪里入场、止损该放在哪里这方面,它很弱。
这正是Quantum Algo的Zeno套件填补的空白。Zeno给出买入和卖出信号,并内置止损和目标位,Zeno Oscillator还自带动量确认。一种实用的搭配方式,是在窗格中保留RVGI作为力度检查:当Zeno信号触发,而RVI与零轴和信号线的相对位置都在同一侧时,说明推动这波行情的K线与信号一致。两者不一致时,把它当作减小仓位的理由,而不是否决信号。信号历史可在公开的track record中查看。
如果想要免费的选择,QuantumAlgo的Multi-Oscillator Divergence Scanner可以在多个振荡指标上自动完成上面提到的背离检查,MACD Matrix则提供基于收盘价的动量读数,与RVI基于开盘价的视角形成互补。如果你刚接触振荡指标,Academy里有动量基础知识的讲解。
◆ 互动检查
您对 相对活力指数 了解多少?
交易者常问的 相对活力指数 问题
它是John Ehlers设计的动量振荡指标,衡量K线相对开盘价收盘的力度,并用K线的高低波幅进行缩放。正值表示收盘价强于开盘价,负值表示收盘价弱于开盘价。
它们通常是同一个指标:Ehlers的相对活力指数。TradingView把它标为RVGI,是为了与Dorsey的相对波动率指数区分开,后者在TradingView中标为RVI。
长度10是TradingView、MetaTrader以及Ehlers原始代码中的标准默认值。较短的长度(6到8)适合scalping,10到14适合swing trading。信号线的4根K线平滑是固定的。
用1-2-2-1权重在四根K线上分别平滑收盘减开盘和最高减最低,再各自对N根K线求和,用第一个和除以第二个和。信号线是对结果再做一次1-2-2-1平滑。
它是滞后的。长度为10时,RVI反映的是以大约6根K线之前为中心的状况,信号线还要再滞后约1.5根。背离可以提供早期预警,但交叉是在行情启动之后才加以确认。
RVI上穿信号线,说明活力相对其近期均值正在增强,是看涨信号;下穿则是看跌信号。顺着更大级别趋势方向的交叉最可靠。
不是。相对波动率指数是Donald Dorsey在1993年推出的指标,它把类似RSI的计算应用到标准差上,刻度为0到100。相对活力指数则是Ehlers设计、以零轴为中心、比较收盘与开盘的振荡指标。
在已收盘的K线上不会,因为它只使用已完成的OHLC数据。正在形成的K线上的数值在收盘前会变化,所以警报应设置为每根K线收盘时触发一次。
两者并没有全面的优劣之分。RVI用到开盘价,能捕捉K线内部的力度;RSI使用收盘对收盘的变化,能反映跳空。很多交易者会把两者搭配使用,详见我们的RSI指南。
适用,但在24小时交易的市场里,日内K线的开盘价就是前一根K线的收盘价,所以RVI在那里更像平滑后的收盘对收盘动量。日线或按交易时段划分的K线能让开盘价更有意义。
参考资料与相关指南
接下来阅读
- 随机振荡指标:完整动量指标指南
- RSI 指标:完整相对强弱指数交易指南
- MACD 指标:完整交易指南
- Stochastic Momentum Index:SMI 完整交易指南
- WaveTrend Oscillator
- 最佳指标组合:真正提升胜率的共振
- 免费 TradingView 指标
- Zeno — 高级引擎
主要来源
- Stocks & Commodities — V.20:1 (16-20): Relative Vigor Index by John F. Ehlers
- Stocks & Commodities — Traders' Tips, January 2002 (RVI code)
- MetaTrader 5 Help — Relative Vigor Index
- TradingView Help Center — Relative Vigor Index
- Fidelity Learning Center — Relative Vigor Index (RVI)
- Stocks & Commodities — V.11:6 (253-256): The Relative Volatility Index by Donald Dorsey
- TradingView Help Center — Relative Volatility Index