按波动率缩放仓位:一个公式,五个品种实测,六成时间不改仓位
本文目录(12 节)
「每笔只 risk 2%」这句话,在 BTC 一天正常走 3.7% 的环境里和一天正常走 6.2% 的环境里,说的不是同一件事。名义上都是 2%,实际承担的风险差一截。这篇给出的做法是在 2% 规则外面再乘一层系数,系数由当前波动率相对自己过去半年的位置决定。五个品种的实测数据放在正文里,其中最反直觉的一条是:这套规则在六成左右的时间里对你的仓位没有任何影响,它只在少数真正高波动的时段起作用。
一、名义 2% 和实际 2%,差在哪里
按 2% 规则做仓位的标准流程是:先定止损距离,再用「账户 × 2% ÷ 止损距离 ÷ 每点价值」反推手数。这套算法本身没有问题,完整做法在一笔交易该用多少仓位里写过。
它保证的是一件事:如果止损按原价成交,这一笔亏掉的钱就是账户的 2%。
问题在「如果」两个字上。高波动期里,这个前提有四处会松动。
止损价不等于成交价。 止损是触发价,触发之后按市价走。波动越大,触发到成交之间的价格跳跃越大。同一个 2% 的止损,平静期实际亏 2.05%,剧烈期可能亏 2.6%,隔夜跳空直接开在止损下方 3% 的位置,你亏的是 5%。这部分超额亏损不出现在你的仓位公式里,但它真实存在。
坏日子是扎堆来的。 波动率有聚集性,今天波动大明天大概率仍然大。这意味着高波动时段不是随机散落在你的交易记录里,是连成一段的。如果你的方法在这种环境下胜率下降,那么连续止损也会集中在同一段时间里发生,回撤叠加的速度比按独立事件算出来的快得多。这个不均匀性的统计事实,市场的波动和机会在时间上极度不均匀那篇讲得更细。
保证金要求会变。 波动放大的时候,交易所和券商上调保证金比例是常规操作。你没改仓位,但可用资金被动收缩,极端情况下会被强制减仓,减在最差的位置上。
执行度会掉。 连续几天账户大幅晃动之后,还能不能按规则砍第四笔,这是一个现实问题,不是意志力问题。
四条合起来的结论是:名义风险恒定,不代表实际风险恒定。 要让实际风险也大致恒定,需要在高波动期主动把名义风险往下压。
二、先看五个品种的真实数据
在讨论怎么压之前,先把「波动率」这个词换成一个可以计算的数字。
用 ATR 除以收盘价,得到一个百分比:
N = ATR(14) ÷ 收盘价
ATR 本身是绝对金额,黄金的 ATR 是 30 美元、欧元的 ATR 是 0.007,两个数字没法比。除以收盘价之后都变成百分比,不同价格不同品种就落在同一把尺子上了。ATR 本身怎么算、为什么用真实波幅而不是高低点差,ATR平均真实波幅那篇是本文的前置。
下面是五个品种日线 N 值的实测分布,区间 2021 年 1 月到 2026 年 9 月:
| 品种 | P10 | P25 | 中位 | P75 | P90 | 最大 | 样本 |
|---|---|---|---|---|---|---|---|
| EURUSD | 0.49 | 0.58 | 0.71 | 0.88 | 1.10 | 1.65 | 1470 |
| 标普500 | 0.75 | 0.88 | 1.14 | 1.52 | 2.06 | 4.46 | 1418 |
| 沪深300 | 0.99 | 1.15 | 1.35 | 1.68 | 2.06 | 4.75 | 1371 |
| XAUUSD | 1.14 | 1.28 | 1.50 | 1.83 | 2.49 | 6.16 | 1421 |
| BTCUSD | 2.34 | 2.82 | 3.70 | 4.73 | 6.24 | 16.51 | 2071 |
单位都是百分比。数据源:EURUSD、XAUUSD(GC=F)、BTCUSD、标普500 取自 yfinance,沪深300 取自腾讯日 K 前复权接口。

这张表里有四个可以直接拿去用的判据。
判据一:品种之间的差距是 5.2 倍。 EURUSD 中位 0.71%,BTCUSD 中位 3.70%,比值 5.21。这直接否定了「统一波动阈值」这种做法。
判据二:BTC 最平静的时候,比欧元最动荡的时候还动荡。 BTC 的 P10 是 2.34%,EURUSD 有记录以来的最大值是 1.65%。也就是说,BTC 十分之一的「低波动日」放到欧元身上,全是历史极值。你如果定了一条「N 超过 1.5% 就减仓」的规则,欧元永远不触发,BTC 永远触发,这条规则在两个品种上都等于不存在。
判据三:相邻品种也没法互相借尺子。 XAUUSD 的 P10 是 1.14%,EURUSD 的 P90 是 1.10%。黄金最平静的十分之一时段,波动仍然高于欧元最动荡的十分之一时段。黄金和欧元在很多人眼里是「都挺稳」的一类,实际不是一个量级。
判据四:中枢高不等于尾部厚。 沪深300 的中位是 1.35%,比标普500 的 1.14% 高 18%,但两者的 P90 完全相同,都是 2.06%,最大值也接近(4.75% 对 4.46%)。沪深300 是平时更颠,标普500 是平时稳但极端时段追得上来。判断一个品种要不要缩仓,看中位没用,得看它当前落在自己分布的哪个位置。
把判据一和品种内部的离散度放在一起看,结论更清楚。各品种 P90 除以 P10:EURUSD 2.24 倍,标普500 2.75 倍,沪深300 2.08 倍,XAUUSD 2.18 倍,BTCUSD 2.67 倍。品种内部的波动率起伏是 2 到 2.8 倍,品种之间的差距是 5.2 倍。 后者明显大于前者,所以分母只能是品种自己的历史,不能是任何跨品种的固定数字。
三、公式只有三行
N = ATR(14) ÷ 收盘价
系数 = min(1, MA(N,120) ÷ N)
最终仓位 = 按 2% 规则算出的仓位 × 系数
第一行解决可比性。 把绝对波幅换成百分比,不同价格不同品种拉到同一个刻度。
第二行解决参照系。 分母是当前的 N,分子是这个品种自己过去 120 个交易日 N 的均值。比值大于 1 说明现在比自己的常态平静,比值小于 1 说明现在比自己的常态剧烈。min(1, ...) 把上限封在 1:剧烈的时候缩仓,平静的时候封顶,不放大。
第三行说明它的位置。 这不是 2% 规则的替代品,是乘在 2% 之上的第二层。第一层由止损距离决定手数,第二层由波动率位置决定要不要在这个手数上打折。两层的分工不冲突:止损距离回答「走多远算我错了」,系数回答「现在这个环境值不值得按满额下注」。
顺带说清楚和止损的分工。ATR 在站内出现过两次,固定点数止损和ATR止损各自的适用条件讲的是把 ATR 用在止损距离上,用 2 倍 ATR 或 3 倍 ATR 定止损位置。本文讲的是把 ATR 用在仓位缩放上,两者是两个独立的位置,可以同时用,也可以只用一个。 如果你的止损已经是 ATR 倍数,那么高波动期止损自然放宽、手数自然变小,名义风险仍是 2%;系数这一层压的是第一节说的那部分「公式里看不见的超额风险」。
四、最反直觉的部分:它六成时间不干活
「按波动率自动缩放仓位」这句话,听起来像仓位天天在变,像你每天开盘要先算一个 0.4 到 1 之间的数再下单。实测结果不是这样。
下面是系数 min(1, MA(N,120) ÷ N) 在四个品种上的实际分布:
| 品种 | P10 | 中位 | P90 | 最小 | 低于 0.5 的时间占比 | 等于 1 的时间占比 |
|---|---|---|---|---|---|---|
| EURUSD | 0.78 | 1.00 | 1.00 | 0.49 | 0.2% | 60.0% |
| XAUUSD | 0.75 | 1.00 | 1.00 | 0.35 | 1.0% | 56.3% |
| BTCUSD | 0.68 | 1.00 | 1.00 | 0.37 | 1.5% | 59.7% |
| 标普500 | 0.70 | 1.00 | 1.00 | 0.31 | 2.1% | 62.7% |

三个数字要盯住。
中位数是 1.00,四个品种全部如此。 一半以上的交易日,这套规则算出来的系数就是 1,仓位和你不用它的时候完全一样。
等于 1 的时间占 56.3% 到 62.7%。 也就是每 10 个交易日里有 6 天,它一点都没介入。
低于 0.5 的时间只占 0.2% 到 2.1%。 按一年 250 个交易日折算,EURUSD 上大约半天,标普500 上大约 5 天。真正把仓位砍到一半以下,是一年里屈指可数的几次。
这个分布把这套方法的性质讲清楚了:它不是一个天天在调仓的系统,是一个绝大多数时候沉默、只在少数时段出手的开关。 这反而是它最实用的地方。一个天天改变你仓位的规则,你执行两周就会烦,然后停掉;一个六成时间不出声、一年只在几个真正危险的时段拽你袖子的规则,你能一直开着。
顺便修正一个常见的表述。把这套方法描述成「把仓位在 0.4 到 1 倍之间自动缩放」,字面上没错,0.4 确实在取值范围里,但它给人的印象是仓位常年在这个区间里游走。实际的时间分布严重偏向上界,0.4 附近是尾部,不是常态。
五、为什么中位数正好落在 1
这不是巧合,是波动率分布形状决定的。
看第二节那张表的最右两列。最大值除以中位数:EURUSD 2.32 倍,标普500 3.91 倍,沪深300 3.52 倍,XAUUSD 4.11 倍,BTCUSD 4.46 倍。再看 P10 除以中位数,五个品种都在 0.63 到 0.76 之间。
向下最多偏离三成多,向上能偏离三倍到四倍。 这就是右偏分布:少数极端高波动的日子把均值拉得比中位数高。
MA(N,120) 算的是均值。均值被右尾拉高之后,N 低于自己 120 日均值的日子,就会多于一半。 而只要 N 低于均值,MA(N,120) ÷ N 就大于 1,被 min 截断成 1。
所以「六成时间系数等于 1」不是数据凑巧,是任何右偏分布放进这个公式都会得到的结果。你换个品种、换个时间段,这个比例大概率还在 55% 到 65% 之间。
六、min 里那个 1 不能拿掉
有人会想:既然大部分时间系数被截断在 1,那把 min 去掉,让低波动期放大仓位,不是能多赚吗?
这一步是这套方法里唯一真正危险的改动。
先算放大倍数的量级。 用手上这张表做估算:N 处在自己 P10 附近的时候,MA(N,120) ÷ N 大致相当于中位 N 除以 P10 的 N。五个品种分别是:EURUSD 1.45,标普500 1.52,沪深300 1.36,XAUUSD 1.32,BTCUSD 1.58。(这是按分位数做的量级估算,不是实测系数,因为 120 日均值不等于全样本中位。)
也就是说,去掉封顶之后,低波动时段的单笔风险从 2% 变成 2.6% 到 3.2%。听起来不多,但连续三笔止损就是 8% 到 9.5% 的回撤,而且这三笔很可能是连着发生的(第一节讲过坏日子扎堆)。
再看时机。 放大器开到最大的时刻,恰好是 N 处在历史低位的时刻。低波动之后跟着什么,没有任何规律保证,但有一点是确定的:N 在低位的时候,它向上的空间比向下的空间大得多(向下最多三成,向上三倍到四倍)。你在一个只能小幅下行、却能数倍上行的变量的低点上,把仓位放大了 1.5 倍。
min(1, ...) 这个封顶的作用,就是把这套方法限定成一个只减不加的单向阀门。它牺牲了低波动期的收益弹性,换来的是这个系统的最大单笔风险有一个硬上限,永远不超过你原来设定的 2%。这个交易划算。
七、两层叠加之后,你的单笔风险区间
把 2% 乘上系数,得到实际的名义风险:
| 品种 | 系数 P10 对应 | 系数最小值对应 | 中位 |
|---|---|---|---|
| EURUSD | 1.56% | 0.98% | 2.00% |
| XAUUSD | 1.50% | 0.70% | 2.00% |
| BTCUSD | 1.36% | 0.74% | 2.00% |
| 标普500 | 1.40% | 0.62% | 2.00% |
读法是这样的:
你的单笔风险区间是 0.62% 到 2%,上界就是你原来的 2%。 这套方法不会让任何一笔的名义风险超过你已经接受的水平,它只会往下走。
六成左右的时间,你承担的就是完整的 2%。 不存在「用了这个方法之后仓位一直很轻、赚不到钱」的问题。
大约十分之一的时间,你承担 1.4% 到 1.6%。 这是打七到八折,感觉得到但不影响交易节奏。
风险压到 1% 以下的时间占 0.2% 到 2.1%。 一年里几天而已,而这几天是你最不该满仓的几天。
如果你同时持有多个品种,这一层要和组合层面的敞口控制放在一起算,组合策略仓位分配法里那套「所有持仓同时止损总亏损可预知」的推演,把系数乘进去之后上限只会更低,不会更高。
八、它成立的前提,以及前提不覆盖的地方
这套方法的全部统计基础只有一条:波动率有聚集性。 今天的高波动预示明天大概率仍是高波动,所以用过去一段时间的 N 去推下一期的 N,有统计依据。这是金融时间序列里最稳固的经验规律之一,跨市场跨周期反复被验证。
但这条性质只在波动的幅度上成立,在方向上不成立。
同一组 N 值序列,不能拿来判断明天涨还是跌。波动率聚集说的是「明天大概率也会剧烈晃」,它不说往哪边晃。把 N 高当成利空、N 低当成利多,或者反过来,都是把一个关于幅度的统计规律强行用在方向上,没有依据。
这条前提必须写在规则的第一行,因为它直接决定了这个系数能出现在哪一步:它只能出现在仓位计算里,不能出现在开仓信号里。
九、失效场景:它必然慢半拍
这是这套方法最需要讲清楚的短板,不讲清楚会让人误以为它能防极端行情。
波动率从低位跳升的那一根 K 线上,系数还停在旧值。
原因在 ATR 的平滑方式上。ATR(14) 按 Wilder 递推,新的 ATR = 旧 ATR + (当日真实波幅 − 旧 ATR) ÷ 14。单日的新信息只被吸收进去十四分之一。
拿 BTC 做一次推演。假设它一直在中位附近,N = 3.70%,某天真实波幅直接干到 15%,大约是平时的 4 倍:
新的 N ≈ 3.70% + (15% − 3.70%) ÷ 14 = 4.51%
系数 ≈ 3.70 ÷ 4.51 = 0.82
当天的实际波动是平时的 4 倍,仓位只缩了 18%。 如果后面几天波动维持在 15% 这个水平,按同一个递推往下走,大约 5 个交易日后 N 才升到 7.2% 左右,系数降到 0.5 附近;大约 10 个交易日后 N 到 9.6% 左右,系数降到 0.39 附近。(这是按 ATR 递推公式推的示意,忽略了收盘价本身的变化和 120 日均值的同步上移,实际系数会比这个略高一点。)
结论要说得直白:这套方法降低的是「长期在高波动区里反复试错」的损耗,不是黑天鹅当天的损失。
高波动区通常持续几周到几个月,在这段时间里你会开很多笔交易,系数把这几十笔的平均下注规模压下来,累积效果明显。但跳升的第一天,它基本帮不上忙。
防第一天要靠别的东西:品种上限、总敞口上限、隔夜持仓规则、事件日历(财报、议息、数据公布)。这些是另外的机制,不能指望一个基于历史均值的系数去覆盖。
十、参数怎么定
14 是 ATR 的行业惯例,不用改。 改成 10 或 20 对结果的影响远小于你以为的,不要在这个数上花时间。
120 是分母窗口,约等于半年交易日。 选它的理由只有一条:分母窗口必须显著长于分子窗口。 120 除以 14 约等于 8.6 倍。如果分母窗口太短,比如用 MA(N,20),那分母会跟着当前波动一起跑,高波动时分子分母同步上升,比值始终在 1 附近,系数几乎不动,规则失效。如果分母窗口太长,比如 500 日,它会把两年前的波动状态一直挂在参照系里,反应太钝。
换周期要按比例换。 做 4 小时线,分子仍是 ATR(14),分母换成 120 根 4 小时 K 线(约 20 个交易日)。别把日线的 120 直接搬到小周期上。
不要去优化这两个数。 这套方法的价值在于它的方向是对的(高波动少下注),不在于参数精确。任何把 120 调成 117 能让回测曲线更好看的结论,都是过拟合。
十一、上手清单
六条,按顺序做完就能跑起来。
一、先算自己在做的品种的 N 值分布。 取过去三到五年日线,算 ATR(14) ÷ 收盘价,输出 P10、中位、P90。这一步的产出不是拿来当阈值,是让你知道自己这个品种的常态是多少,以后看到一个 N 值心里有数。
二、把 MA(N,120) 加进你的行情软件。 多数平台可以直接用「ATR ÷ 收盘价」建一个自定义指标,再挂一条 120 周期均线上去。
三、每天开盘前记一个数。 就是 min(1, MA(N,120) ÷ N),记在你的交易日志里。六成时间它是 1,你会很快习惯。
四、下单时乘进去。 按 2% 规则算完手数,乘系数,向下取整。
五、系数低于 0.6 的日子,单独标记。 这些日子一年只有十几天,事后回看这几天的交易结果,是判断这套方法在你身上有没有用的最直接证据。
六、不要把系数用在方向上。 第八节那条前提,写在规则文档的第一行。
写在最后
这套方法的说服力不在公式,在第四节那张分布表。
一个「自动缩放仓位」的规则,听上去像是要接管你的交易,实际上它六成时间安静地等于 1,一年只有几天真正把仓位砍到一半以下。它没有增加任何日常负担,也没有改变你已经在用的 2% 规则,它只是在你原来的算法后面挂了一个单向阀门,在波动率明显高于自己常态的时候,把下注规模往回收一点。
它做不到的事同样要记住:跳升当天它慢半拍,方向上它什么都不说,极端行情的第一根 K 线要靠别的机制去挡。
先把自己品种的 N 值分布算出来。这一步做完,你对「今天这个行情算不算大」这个问题的回答方式就会变了。
在微信里搜「Tom讲交易」即可关注,每周更新交易教学
推荐课程
合约陪跑实战训练营
不只教方法,更带你实盘执行。从仓位管理到止损止盈,手把手纠正你的交易习惯,建立可复制的盈利系统。
相关图解
一张图看完这件事,适合存下来随时翻
相关文章
固定点数止损和ATR止损各自的适用条件:四种场景对应四种选法,附ATR倍数怎么定
止损用固定点数还是ATR,这个问题问反了。两种方法回答的不是同一个问题:固定点数回答「我最多认赔多少」,ATR回答「多远才算真的走错」。这篇给出固定点数适用的四个条件、ATR适用的四个条件、ATR倍数从起点值到校准的完整三步,四种交易风格的倍数起点表,以及两种方法同时失效的那个场景。
仓位管理杠杆悖论:为什么50倍杠杆押2%仓位,可能比2倍全仓更安全
同样的名义仓位,50倍杠杆押总资金的2%,和2倍杠杆全仓押上,理论收益可能一样,但真实风险完全不是一回事。本文用一套简单的风险敞口算法,拆解杠杆悖论背后的数学逻辑,并用312、519、1011等历史极端行情反复验证:决定生死的从来不是杠杆倍数这个数字,而是这一笔交易能让你损失多少总资金。仓位管理的核心变量,从来就不是倍数,而是敞口。
风险管理日亏损上限设多少:按本金比例的三档 1%、2%、3%,以及日内熔断为什么比月度更重要
日亏损上限不该拍一个百分比,它由单笔风险反推:日上限等于单笔风险的两到三倍,意味着你一天最多允许自己错两三次。这篇给出三档数字和各自对应的单笔风险、上限基数该用哪个权益、触发之后的四个强制动作、三个最常见的绕过漏洞,以及日线闸门和月度闸门同时存在时哪条先到走哪条。
风险管理账户回撤到多少该停手:三档阈值 8%、15%、25%,各带恢复条件
回撤 10% 还是 20% 该停手,这个问题的答案不该拍脑袋,它由三样东西反推出来:回本需要涨多少、按你的期望值需要多少笔才能涨回来、以及正常连亏在你的仓位下会造成多大回撤。回撤 20% 需要涨 25% 才回本,按胜率 40% 盈亏比 2 的系统计算需要约 125 笔交易。这篇给出三档阈值、每一档的强制动作和明确的恢复条件,并附完整的回本难度表。
风险管理月度最大回撤上限设多少:三档 4%、7%、8%,以及它为什么只有两个百分点的自由度
月度回撤上限不是你挑一个顺眼的百分比,它被两条线夹在中间:往下不能低于一次正常连亏的成本,否则系统没坏你就被踢出场;往上不能超过账户回撤软线 8%,否则月度线永远不会先响,等于不存在。对单笔风险 1% 的标准配置来说,这个区间只有 6% 到 8% 两个百分点宽。这篇给出三档数字、月内回撤的准确口径、每档的恢复条件,以及日线、月线、账户线三条闸门谁先到走谁的判定规则。
风险管理LTCM归还27亿美元之后:安全垫是怎么被自己主动收窄的
LTCM崩盘的故事里,模型失灵和25倍杠杆已经被讲了无数遍。但很少有人注意到崩盘前一年那个听起来极其理性的决定:1997年,因为规模扩大导致回报率下降,团队主动把27亿美元还给投资者。这篇文章只讲这一个细节:他们退还的不是多余的钱,是自己的安全垫,退还之后又被迫挤进自己没有信息优势的新领域去维持规模效益。
觉得有用?关注公众号
扫码或在微信里搜「Tom讲交易」,每周更新交易教学文章