分类
风险
难度
入门
适用场景
风险管理策略设计回测

波动率

波动率是价格随时间变化的程度——衡量的是价格走了多远,而不是往哪个方向走。统计上它是收益率的标准差;在 MT5 EA 内部它以平均真实波幅 (ATR) 读取,并决定上个月的止损距离放到今天是否仍然合适。

亦称:market volatility, price volatility

更新于 · 审阅于

一句话讲清

价格通常会走多远,而不是往哪个方向走。一个平静的市场和一个剧烈的市场可以在同一个价格上收完这一周;波动率就是这两段旅程之间的差别。

为什么重要

EA 内部的每一个止损距离、目标和手数,都是按照“价格在一个交易时段里会走多远”的某种假设校准的。波动率就是把这个假设摆到明面上。当它在部署之后发生变化时,一只原本正确的 EA 会在逻辑一行未改的情况下变成错的。

  • 它决定了一个止损的含义。30 点在平静的 8 月对 EUR/USD 来说是宽止损,在政策公告期间对 GBP/JPY 来说则是窄止损。
  • 它是风险与仓位大小之间的桥梁。按账户固定百分比承担风险,意味着波动率上升时手数必须下降——而这只有在 EA 真的在测量波动率时才会发生。
  • 回测继承的是其窗口内的波动率,而这个窗口很少只包含一种状态。在本站测得的 22 份公开账本上,最剧烈季度的波动率是最平静季度的 2.29 倍(中位数),全程使用同一套设置。
  • 它是实盘结果在什么都没坏的情况下偏离回测的主要原因。点差随波动率扩大,滑点随之增加,而两者都落在账本不利的一侧。

如何计算

σ = 各周期收益率的标准差 · 年化 σ = σ_daily × √252
各周期收益率
从一根 K 线的收盘价到下一根收盘价的百分比变化,时间周期取测量所用的那一个。
√252
从日度换算到年度的缩放。它假定每个周期与上一个周期相互独立;日内系统则改按其持仓时长内的 K 线数量 (√N) 缩放。
ATR
N 根 K 线上的平均真实波幅——EA 可以用 iATR 直接读取的实用替代指标,以点而非百分比表示。

统计定义是收益率的标准差,夏普比率、风险价值和每一个风险模型用的都是它。EA 内部的实用定义则是平均真实波幅,它以价格单位度量同一个概念,且无需收益率序列即可计算。两个都叫“波动率”的数字,往往其实是这两样不同的东西。

多少算高、多少算低

  • 低于测试窗口 σ 的 0.75 倍 比测试窗口更平静——目标够不到,反复出现的小额成本占据主导
  • 测试窗口 σ 的 0.75–1.25 倍 设置被调校时所处的状态。在公开账本上,375 个季度中有 282 个落在这里
  • 1.25–2 倍 偏高——按测试窗口设定的止损开始被普通 K 线打到
  • 高于 2 倍 另一种状态。22 份公开账本中只有 2 份有某个季度高出其整个窗口 σ 这么多

需要一起看的指标

单一数字无法描述一套策略。下列指标会改变这个数字的读法。

示例

一个演算示例:同一只 EA 带着 30 点固定止损穿过两种状态。变化的只有一根普通小时线的幅度。

平静状态——H1 上的 ATR(14)
12 点
30 点的止损距离价格 2.5 个平均波幅——稳稳地落在噪音之外。
剧烈状态——H1 上的 ATR(14)
34 点
同一个止损现在落在一根平均 K 线之内,普通的波动就会把交易平掉。
按 2.5 × ATR 设定的 ATR 止损,平静状态
30 点
按 2.5 × ATR 设定的 ATR 止损,剧烈状态
85 点

基于 ATR 的版本会随市场一起放宽——但手数也必须随之缩小。

计算 30 ÷ 12 = 2.5 个波幅 · 30 ÷ 34 = 0.88 个波幅

结果 固定止损的含义变化了将近三倍;基于 ATR 的止损则没有

怎么读这个数字

  • 当一个策略要在无人值守下跨年运行时,优先选择按波动率缩放的止损而非固定点数距离——但手数要按同一个尺度缩放,否则更宽的止损只不过意味着更大的亏损。
  • 把波动率飙升当作一次点差与滑点事件来对待,而不只是一次价格事件。执行成本随之上升,而且恰恰在止损最可能被打到的那些时刻上升得最快。

mt5depot 的 EA 页面为每个商品注明了测试窗口和数据来源,所以一个结果是否跨越了不止一种状态,可以从日期上读出来。本页上每一个实测数字都来自这些商品公开的交易账本 (EXP-VOL-REGIME-001),按已平仓交易基准。

常见误区

把波动率当作方向

高波动率说的是价格在大幅移动,而不是在向上移动。趋势和波动率是两个独立的度量——一段剧烈的震荡区间既是高波动率,又同时没有趋势。

把波动率当作亏损

在公开账本上,EA 日度盈亏最剧烈的那个季度在 22 只中有 13 只是盈利的,而最差的单日在 22 只中有 15 只落在那个季度之外。一个在高波动率时关闭 EA 的过滤器,会错过那个季度,却仍然躲不掉大多数最差的日子。

放宽止损却不缩小手数

一个在剧烈状态下扩大到三倍的 ATR 止损,会把承担风险的资金也扩大到三倍,除非仓位大小随之下降。自适应止损只有在与自适应仓位配对时才有帮助。

深入说明

波动率从哪里进入 MT5 策略测试器

测试器从不打印波动率数字。它的三项设置决定了有多少波动率能到达报告。

建模。 Every tick based on real ticks(基于真实 Tick 的每笔 Tick)重放每根 K 线内部记录下来的路径,所以一个落在普通 K 线之内的止损会在它本该被打到的地方被打到。由 M1 K 线生成的 Every tick(每笔 Tick)对这条路径做插值,而 Open prices only(仅开盘价)则把它丢弃。止损比 K 线幅度更窄的策略,用这两种模式都无法判断——参见 Tick 数据建模质量

点差。 策略测试器 → Settings → Spread 提供 Current(当前值)或一个固定的点数。两者都把一个数值固定在数年之上,所以随波动率飙升而来的点差扩大在生成 Tick 的测试中是缺失的。在真实 Tick 上,点差就是 Tick 文件所携带的那个值。

输入参数。 一个按 ATR 设定的止损会在 Inputs 选项卡上暴露两个输入项:周期和倍数。一个在 2.0 有效、在 1.8 或 2.2 却无效的倍数,是被拟合到了某一个窗口的回调上,而不是拟合到了波动率上。在 MQL5 中,句柄在 OnInit 里用 iATR(_Symbol, PERIOD_CURRENT, 14) 创建一次。数值从最后一根已完成的 K 线(索引 1)读取,这样止损距离就不取决于信号触发的时刻。平均真实波幅 (ATR) 词条里有相关设置。

22 份公开账本说明了什么

每个商品页面都附有其已平仓交易列表,所以可以按日历季度测量 EA 自身日度盈亏的 σ,并与整个窗口比较。24 个商品中有 2 个在任何一个季度都没有达到 10 个活跃日,被跳过而没有填补。

指标(已平仓交易基准,活跃日 10 天以上的季度)22 只 EA 的中位数范围或数量
每只 EA 符合条件的季度数15.5合计 375 个
状态跨度:最剧烈季度 σ ÷ 最平静季度 σ2.29×1.25× 至 5.33×
状态跨度超过 2× 的 EA22 只中 15 只
落在整个窗口 σ 的 ±25% 以内的季度78.76%375 个中 282 个
最差单日落在最剧烈季度之内22 只中 7 只
最剧烈季度亏损22 只中 9 只
最后一个符合条件的季度 σ ÷ 整个窗口 σ0.91×22 只中 17 只低于 1

有两行与波动率过滤器的假设相矛盾。最差的一天在 22 只 EA 中有 15 只落在最剧烈季度之外,而那个季度在 22 只中有 13 只是赚钱的。一个坏日子不是一种状态,而滚动测量也看不见它的到来。

最宽的跨度属于 Murmuration:2026-Q1 的季度 σ 为 4.591%,下一个季度则为 0.862%,设置完全相同却相差 5.33 倍。它最差的一天是 2020-03-18 的 9.579%,落在六年前一个更平静的季度里。

拿这个数字做什么

读状态,而不是读水平:在 EA 交易的时间周期上,把今天的 ATR 与测试窗口内的 ATR 作比较。

  1. 从商品页面取得测试窗口的起止日期,以及 EA 运行的时间周期。
  2. 在该时间周期的图表上加载 Average True Range(周期 14),读取最后一根已完成的 K 线。这就是部署时的 ATR。
  3. 窗口平均值则用 CopyBuffer(handle, 0, 1, bars, array) 在测试日期范围内读取同一指标,并对数组求平均。
  4. 相除。落在 0.75–1.25 之内,公开的数字适用;超过 2,你就处在一种测试窗口可能不包含的状态里——本站 22 份账本中只有 2 份有某个季度高出其整个窗口 σ 这么多。

在 MT5 中运行回测涵盖上面这些设置,参数优化则涵盖 ATR 倍数的相邻取值检查。一次飙升如何变成钱,是仓位管理滑点最大回撤的主题。

常见问题

波动率如何影响 MT5 EA?
它改变 EA 使用的每一个距离的含义。以固定点数设定的止损和目标,会在波动率上升时变窄、下降时变宽,所以同一套设置在不同的状态下会变成不同的策略。点差和滑点也随之增大。
对一个策略来说,怎样的波动率水平算正常?
没有有用的绝对数字;真正要读的是当前状况相对于策略被测试的那个窗口。在 22 份公开账本上,中位数 78.76% 的季度落在整个窗口数值的 25% 以内。其余部分就是回测中固定设置没有被调校到的那一段。
MT5 策略测试器会对波动率建模吗?
它只是重放,并不建模。“Every tick based on real ticks”(基于真实 Tick 的每笔 Tick)重放记录下来的 K 线内部路径,生成 Tick 的各个模式在每根 K 线内部做插值,而仅用开盘价的模式则丢弃 K 线内部的走势。点差设置同样重要。“Current”(当前值)会把一个数值固定在整个测试上,所以除非 Tick 文件本身带有,否则随飙升而来的点差扩大在报告里是不存在的。
高波动率对 EA 是好是坏?
取决于策略。突破和趋势系统一般需要行情才能运作,在平静的市场里会停滞;而均值回归和网格系统偏好平静,会被持续的趋势伤害。两者共同的问题是:设置固定之后状态发生了变化。