上一篇说了趋势跟踪需要一条「只上不下」的止损线。这篇把这条线怎么算,从头到尾算一遍。
第一步:ATR 是什么
ATR 的全称是平均真实波幅,它回答一个问题:这只股票平均每天会动多少钱?
先算单日的「真实波幅」TR,取三个数里的最大值:
TR = max(今日最高 - 今日最低,
|今日最高 - 昨日收盘|,
|今日最低 - 昨日收盘|)
后两项是为了处理跳空。如果今天开盘就比昨天收盘高出一大截,只看今天的高低点会低估实际发生的价格移动。
把 TR 做平滑(默认 14 天)就得到 ATR。ATR 的单位是元,不是百分比——这一点很重要:它让止损距离自动适配标的的波动水平,你不需要为高波动的股票单独放宽止损。
第二步:止损线的公式
止损线 = 持仓期间的最高价 - ATR × 倍数
生效止损 = 从入场至今算出的所有止损线里的最大值
第二行是全部关键。止损线只会往上走。 价格回落时,「持仓期间的最高价」不变,但 ATR 可能变大,公式算出的数会变小——这时我们不采用它,继续沿用之前更高的那个值。
我们的引擎用了两个倍数:
entry_mult = 2.0:入场当天的初始止损,贴得近一些;exit_mult = 3.0:之后每天的跟踪止损,放得宽一些,给趋势留空间。
第三步:跟着一笔交易算七天
假设某只股票在第 1 天满足入场条件(收盘价站上 100 日均线,且创下 22 日新高),收盘价 101.00 元买入。
| 日 | 最高价 | 收盘价 | ATR | 持仓最高价 | 公式算出的线 | 生效止损 |
|---|---|---|---|---|---|---|
| 1 | 102.00 | 101.00 | 4.00 | 102.00 | 102.00 − 2×4.00 = 94.00 | 94.00 |
| 2 | 106.00 | 105.00 | 4.20 | 106.00 | 106.00 − 3×4.20 = 93.40 | 94.00 |
| 3 | 110.00 | 109.00 | 4.50 | 110.00 | 110.00 − 3×4.50 = 96.50 | 96.50 |
| 4 | 109.00 | 104.00 | 4.80 | 110.00 | 110.00 − 3×4.80 = 95.60 | 96.50 |
| 5 | 118.00 | 117.00 | 5.00 | 118.00 | 118.00 − 3×5.00 = 103.00 | 103.00 |
| 6 | 119.00 | 112.00 | 5.40 | 119.00 | 119.00 − 3×5.40 = 102.80 | 103.00 |
| 7 | 114.00 | — | 5.40 | 119.00 | — | 当日最低跌破 103.00,出场 |
逐行看几个要点:
- 第 1 天用的是
entry_mult = 2.0,所以止损是 102 − 8 = 94,而不是 90。初始止损更紧,是因为这一刻你对这笔交易还没有任何浮盈作缓冲。 - 第 2 天公式算出 93.40,比昨天的 94.00 低。我们不采用它,止损保持 94.00。这就是「只上不下」。
- 第 4 天价格回落(收盘从 109 跌到 104),ATR 还变大了,公式算出 95.60。同样低于前一日的 96.50,止损保持 96.50 不动。
- 第 5 天大涨,持仓最高价抬到 118,止损一跃升到 103.00。此时这笔交易已经锁定盈利:即使明天就被止损,出场价 103 仍高于入场价 101。
- 第 7 天盘中最低跌破 103.00,触发出场。
第四步:这笔交易的账
- 入场 101.00,出场 103.00,+1.98%;
- 期间最高收盘价 117.00,浮盈一度到 +15.8%;
- 也就是说,从最高点回撤到出场,交出了约 12 个百分点。
这一点必须讲清楚,因为它是新手最容易失望的地方:跟踪止损一定会让你交出一部分利润。 它的设计目标不是在最高点卖出——没有任何规则能做到那件事——而是保证你不必判断顶部在哪里,就能把大部分趋势留在手里。
代价与收益是同一枚硬币:正因为止损放得足够宽(3 倍 ATR),第 4 天和第 6 天的回落才没有把你洗出去,第 5 天的大涨你才吃得到。如果把 exit_mult 调到 1.5,第 4 天你就出场了,后面那段涨幅与你无关。
第五步:自己动手改一个参数
打开回测工具,用默认参数跑一次,记下交易次数、胜率、总收益。然后只改一个参数:
- **
exit_mult从 3.0 调到 2.0**:止损变紧,交易次数增加,单笔平均盈利下降。看看总收益是变好还是变差。 - **
exit_mult从 3.0 调到 5.0**:止损变松,被洗出的次数减少,但每次出场都要回吐更多。
你会发现两个方向都不是单调变好的——存在一个区间,太紧和太松都更差。找到这个区间的大致位置,比记住某个「最优值」有用得多。至于为什么不该去追求那个最优值,见《回测的三个陷阱》里关于过拟合的部分。
常见疑问
止损用收盘价还是盘中价触发? 我们的引擎用盘中最低价触发,这与实盘中挂止损单的行为一致,也更保守。用收盘价触发会让回测结果偏好看。
跳空低开穿过止损线怎么办? 按开盘价成交,实际亏损大于计划亏损。止损是价格水平,不是保险合约,这个风险无法通过调参数消除,只能靠控制单笔仓位来限制。
能不能加止盈? 可以加,但趋势跟踪的收益高度集中在少数几笔大赚上,设置固定止盈会把这些交易提前截断,通常会显著降低总收益。这也是这类策略默认不设盈利目标的原因。
本文仅用于量化技术研究与教育目的,不构成任何投资建议。历史回测结果不代表未来收益,交易风险由投资者自行承担。