ROC 变动率是什么?价格没动,ROC 为什么自己跳了
「价格今天明明没怎么动,ROC 怎么一下子从负的跳到正的?」
答案不在今天,在 12 根以前。ROC 只拿今天跟「N 根以前的那一天」比,那一天被换掉的时候,ROC 也会跟着变。如果被换掉的刚好是一根暴涨或暴跌的 K 线,ROC 就会自己跳一下。这一篇先用 7 根 K 线算一次,再用一张标了 1~4 的真实行情图(美元兑日元 2026 年),看这个「回音」长什么样。
这是 MASQuant 迈思量化「交易学院 · 技术指标大全」的一篇。所有指标的分类整理在〈技术指标大全〉。
一句话看懂
ROC=今天的价格,比 N 根以前涨跌了几 %。
它回答的问题是:「跟某一天比,现在涨了还是跌了、差多少?」
ROC 像「跟去年同月比」的同比增长率:今年 5 月的业绩跟去年 5 月比。去年 5 月如果刚好有一笔特别大的订单,今年 5 月的同比就会很难看——不是今年变差,而是比较的基数特别高。ROC 的数字,一半取决于今天,一半取决于被拿来比的那一天。
先算一次:价格没动,ROC 却跳了
为了好算,用 3 根的 ROC(今天跟 3 根以前比)。第 4 天价格从 100 跌到 90,之后一直停在 90(以下是举例用的整数,不是行情数据):
| 第几天 | 收盘 | 3 根以前的收盘 | ROC(3) |
|---|---|---|---|
| 第 4 天 | 90 | 100 | (90 − 100)÷ 100 × 100 = −10% |
| 第 5 天 | 90 | 100 | −10% |
| 第 6 天 | 90 | 100 | −10% |
| 第 7 天 | 90 | 90 | (90 − 90)÷ 90 × 100 = 0% |
第 5、6、7 天价格一动也不动。但到了第 7 天,被拿来比的那一天从「大跌前的 100」换成「大跌后的 90」,ROC 从 −10% 一下子跳回 0%。第 4 天那一跌,在 ROC 里留了 3 根,然后一次消失。周期换成 12,就是留 12 根。
正式公式
常用参数是 12(也有人用 9、10、14):
ROC =(今天收盘 − 12 根以前的收盘)÷ 12 根以前的收盘 × 100
0 以上:比 12 根以前高
0 以下:比 12 根以前低
MT5 里有两个相关的指标,算法不太一样:
- MT5 示例里的 ROC(Rate of Change,默认 12):除的是「今天的价格」而不是「12 根以前的价格」。所以涨 10% 会显示 9.09、跌 10% 会显示 −11.11,跟上面的标准算法略有差别。
- MT5 内置的 Momentum(动量,默认 14):算的是「今天 ÷ N 根以前 × 100」,100 代表没变,101 代表多 1%。本质跟 ROC 一样,只是把 0 换成 100。
本文的图用的是上面的标准算法。换平台比较数值之前,先确认用的是哪一种。
看图:美元兑日元 2026 年,照着 1~4 看
下面这张图是美元兑日元(USDJPY)2026 年 3 月初到 6 月下旬的日线,取自 MT5 的历史报价。整段从 157.689 走到 161.529,中间在 4 月 30 日有一根很大的阴线。灰底是那根阴线还留在 ROC 里的 12 根。

一天跌了 2.38%(2026 年 4 月 30 日)。这一天的跌幅,大约是平均真实波幅(ATR)的 4.5 倍,是这段期间最大的一根。
ROC 跟着往下:从 +0.58% 掉到 −1.38%。今天大跌,拿来跟 12 根以前比,当然是负的。这很合理。
12 根之后,价格几乎没动(2026 年 5 月 18 日,+0.01%)。这一天收在 158.773,跟前一天差不多。
ROC 却从 −1.00% 跳到 +1.42%,一天跳了 2.42 个百分点。原因是被拿来比的那一天换了:前一天比的是大跌之前的价格,这一天比的是 4 月 30 日大跌之后的收盘 156.554。今天什么事都没发生,ROC 却像出了一根大阳线。这就是 ROC 的「回音」。
这是一段真实的历史行情,用来说明ROC的性格,不是通则。换品种、换周期、换一段行情,数字都会变。
看到什么、代表什么
| 你看到 | 通常代表 | 但要小心 |
|---|---|---|
| ROC 在 0 以上 | 比 N 根以前高 | 只比一个点,不代表中间一路在涨 |
| ROC 在 0 以下 | 比 N 根以前低 | 同上 |
| ROC 从负转正 | 现在的价格超过 N 根以前 | 也可能是「被比的那一天」换掉了,今天不一定有涨(图上 4) |
| 价格创新高,ROC 却比上次低 | 涨势在减速 | 不代表会反转,只是比 N 根以前的差距变小 |
| ROC 突然大跳,价格却平平 | N 根以前有一根很大的 K 线刚离开 | 往前数 N 根找找看,通常就找到原因了 |
实际怎么用:三个例子
例一:当动能滤网
规则可以写成:「ROC(12) 大于 0 才做多。」意思是「现在比 12 根以前高」,顺势的单才做。这是最简单、也最常见的用法。
例二:比较不同品种谁比较强
ROC 是百分比,不同价位的品种可以直接比。例如同时看黄金、白银、指数最近 20 根的 ROC,只挑最强的那一个做多。
例三:避开回音造成的假信号
如果规则是「ROC 由负转正就进场」,可以加一个条件:「当天的收盘也要比前一天高」。图上 4 那种「价格没动、只是基数换掉」的翻正,就会被挡掉。
三个例子都要记得:ROC 只比两个点。今天这个点、N 根以前那个点,中间发生什么它不管。N 根以前那一天越特别,ROC 越容易自己跳。
常见误用
一、看到 ROC 翻正就以为今天涨了
图上 4,价格只涨 0.01%,ROC 却从 −1.00% 跳到 +1.42%。翻正的原因是 12 根以前那根大阴线离开了计算范围,不是今天有买盘。
二、把不同平台的 ROC 数字直接比
标准算法除的是 N 根以前的价格,MT5 示例的 ROC 除的是今天的价格,MT5 的 Momentum 又以 100 为中心。同样是「涨 10%」,三种会显示 10、9.09、110。
三、周期随便换
ROC(9) 和 ROC(14) 比的是不同的那一天,回音出现的时间也不一样。周期改了,信号的位置跟着变,要重新验证,不能直接沿用。
常见问题
ROC 指标是什么?
ROC(Rate of Change,变动率)是动量指标,算的是今天的价格比 N 根以前涨跌了几 %,常用周期 12。0 以上代表比 N 根以前高,0 以下代表比较低。
ROC 和 Momentum 有什么不同?
本质一样,都是拿今天跟 N 根以前比。ROC 以 0 为中心、单位是 %;MT5 内置的 Momentum 是「今天 ÷ N 根以前 × 100」,以 100 为中心。
ROC 为什么会突然跳动?
因为被拿来比的那一天每天都在换。N 根以前如果有一根特别大的 K 线,它离开计算范围的那一天,ROC 就会大跳,即使当天价格几乎没动。
MT5 有 ROC 吗?
MT5 安装时附带的示例指标(Examples 文件夹)里有 Rate of Change,默认周期 12;它除的是今天的价格,数值跟标准算法略有不同。MT5 指标列表里内置的是 Momentum。
结语
ROC 很直接:今天比 N 根以前涨了几 %。它的弱点也一样直接——比较的基数每天都在换,基数那一天越特别,数字越会自己跳。
所以真正该问的是:你的进场规则用「ROC 由负转正」,有多少次其实只是 12 根以前的那一天被换掉了? 这个问题,一段历史行情回答不了,要拿规则在很多段行情上回测。
还没有自己的规则、不想从指标一个一个拼起?MASQuant 迈思量化的策略精灵只要你先选一种投资风格,AI 会分析市况、挑选品种,一次给你三组候选策略,每组都先用历史数据回测过,收益和本金最大回撤摊开来看,再由你决定要不要部署到 MT5。
已经有自己的想法,就把条件写成一句话,例如「ROC(12) 大于 0、而且当天收盘高于前一天才做多」,丢进 AI 策略助理,按下去就开始回测,回测环境纳入点差、滑点、市场流动性变化与交易执行延迟这些真实市场摩擦(操作方式见〈策略助理使用教学〉)。再拿掉「当天收盘高于前一天」跑一次,就看得出回音造成的假信号有多少。回测告诉你的是「这条规则在过去的行情里表现如何」,不是未来的保证。
想法,经过验证,才叫策略。
文中走势图取自 MT5 平台的历史报价(日线;不同平台的报价与日线切法略有差异,数值可能不完全相同),指标由程序依标准算法计算;举例用的整数不是行情数据。历史行情只用来说明指标的性格,不代表未来走势。
风险揭露:CFD 属于高风险金融产品,可能导致快速资金损失。过往业绩不代表未来结果,所有策略与回测仅供参考,不构成投资建议。交易前请充分了解本公司风险揭露条款。



