分类
风险
难度
入门
适用场景
风险管理MT5 操作策略设计

止损

止损是附加在持仓上的一个价格水平,价格触及时经纪商会自动平仓,把这笔交易的亏损封在上限之内。它挂在经纪商的服务器上,所以终端没有开着时它照样生效。

亦称:SL, 止损位, 止损单, 硬止损, 保护性止损

更新于 · 审阅于

一句话讲清

你事先同意「自己判断错了」的那个价格。把它定下来,一笔敞着的持仓就变成了一笔已知的成本。

为什么重要

止损在市场开口之前就把最坏情形定死。头寸规模、风险回报比、预期回撤,全都从这一个距离里推出来。没有它,策略报告的是已经平掉的亏损,而不是它可能承受的亏损。

  • 它把风险变成算术。一个止损距离加上一个风险上限,就得出手数;没有它,就没有任何可以据以定规模的东西。
  • 一旦设定,它就挂在经纪商的服务器上,所以终端关着或者 VPS 重启时它照样触发。
  • 它缺席,最坏情形就没有边界。网格和马丁格尔式的补仓回本把它省掉了,所以那些曲线在崩掉之前一直看着很平静。

在 MetaTrader 5 中

在 MT5 的什么位置

  • 新建订单(New Order)对话框(F9)→ 止损(Stop Loss)—— 在入场时设定,填的是价格而不是点数
  • 工具箱(Toolbox)→ 交易(Trade)标签页 → 右键点击持仓 → 修改或删除持仓(Modify or Delete Position)
  • 市场报价(Market Watch)→ 右键点击品种 → 规格(Specification)—— 止损位限制(Stops level)那一行就是这家经纪商接受的最小距离
  • 工具箱(Toolbox)→ 日志(Journal)—— 止损无效被拒绝时会在这里显示,而不是智能交易(Experts)标签页
  • 策略测试器(Strategy Tester)→ 输入参数(Inputs)—— 止损和别的输入参数没有两样,所以优化器会把它拟合到你的历史数据上

EA 如何使用它

  • 在与订单相同的 MqlTradeRequest 里于入场时一并设定。sl 字段装的是价格而不是距离,所以点数换算要 EA 自己做。
  • 当策略需要先拿到成交价时,事后用 TRADE_ACTION_SLTP 或 CTrade::PositionModify() 挂上去。
  • 实际出厂的通常是固定距离:这里公开的 27 份记录中,没有一份是从 ATR 推导止损的。
  • 止损比 SYMBOL_TRADE_STOPS_LEVEL 更贴近价格时,经纪商会拒绝。EA 必须处理这个拒绝,而不是假定止损已经挂上了。

常见设置

设置项 常见取值 备注
ATR 倍数(波动率止损) 1.5–2.5 × ATR(14) 这是一条建议,不是普查结果 —— 这里没有任何一份记录是这样设的。低于 1.5,止损就落在寻常波动的范围之内。
出厂止损,这里的 16 个单一止损 EA 25–114 点,中位数 100 这些版本实际发送出去的值。十六个里有五个正好发送 114。
每笔交易风险 账户余额的 0.5–2 % 这个值与止损距离一起确定手数。先选手数,等于把逻辑倒过来。
与价格的最小距离 经纪商的 stops level 市场报价 → 规格 里会写出来。落在它以内的止损永远到不了服务器。
移到保本位 浮盈达到 1 倍止损距离之后 很常见,但不是免费的:一次回调就会把一些盈利单变成打平单。

常见运行问题

  • 订单成交了,止损却因为离价格太近被退回来,于是日志里只留下一行记录,持仓就此毫无保护地敞着。
  • EA 用请求价而不是成交价来计算这个水平,于是滑点把真实风险挪走了。
  • 五位报价上 point 与 pip 会撞车:本想设 30 点(pip)的止损,发出去却变成 30 个 point,实际距离只有十分之一。

相关 MT5 函数

MqlTradeRequest.sl
随订单一起发送的止损价格;为零表示没有止损。
SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL)
价格与止损之间的最小 point 数(不是 pip),低于它经纪商就会拒绝。
SymbolInfoInteger(symbol, SYMBOL_TRADE_FREEZE_LEVEL)
在这个距离之内,服务器拒绝修改或平掉订单。
PositionGetDouble(POSITION_SL)
回读实际生效的止损 —— 也就是确认服务器确实收下了它的那道检查。

示例

没有人会单独去挑一个止损距离。它和风险上限一起走,两者共同得出手数。

账户余额
$10,000
每笔交易风险
1 % = $100
止损距离
40 点
由此得出的头寸规模
0.25 手
主要货币对上每手每点大约 $10。

把止损放宽到 80 点,规模就必须减半到 0.125,否则风险翻倍。

计算 100 ÷ (40 × 10) = 0.25 手

结果 一个 40 点的止损,被打中时正好花掉 $100

怎么使用

把止损当成一对来读 —— 距离,以及配套的规模。任何一个单独拿出来,都说明不了风险。

区间 含义
止损在 1 倍 ATR 以内 寻常波动就会把持仓打掉;胜率下降的原因与入场无关。
1.5–2.5 倍 ATR,规模同步调整 落在噪音之外,而且仓位规模配得当,使「判断错了」的代价是一个事先计划好的数额。
止损放宽,手数不变 每笔交易的风险按放宽的比例同步涨了。
完全不设止损 最坏情形就是整个账户;回撤只涵盖那些已经平掉的亏损。
  • 成交之后把 POSITION_SL 回读一遍。假定服务器接受了请求,正是持仓毫无保护地敞着的由来。
  • 亏损要按价格在哪里平仓来数,而不是按账户被扣了多少:隔夜利息和佣金让其中 207 行在价格上赢了、在钱上却是亏损。

这里每一个 EA 都写明自己的止损规则并公开交易记录,所以实现的亏损就摆在它所隐含的止损旁边。本页的实测数字全部来自那些回测交易记录(EXP-STOP-OVERSHOOT-001)。

常见误区

为了不认这笔亏损而把止损挪离价格

这是唯一一种能把受控亏损变成失控亏损的修改。账户上每一个风险数字,原本都压在那个数上。

以为止损锁定了平仓价格

它是触发条件,不是对成交价的承诺:跳空会直接穿过这个水平,持仓在下一个可成交价上平掉。想锁定价格得用止损限价单,代价是可能根本不成交;MT5 提供这种单,MT4 没有。

在不同市况下沿用固定点数止损

三十点在平静的市场里很宽裕,在剧烈波动的市场里则装不下一根 K 线。

按账户扛得住的位置来放止损

为了迁就一个过大的头寸而选出来的距离,会落进噪音里面。该让步的是规模。

深入说明

已公开的 2,719 笔亏损交易,对那道本该止住它们的水平做了什么

每一个商品页面都附上自己的平仓交易清单,所以每一段平仓距离都紧挨着它所携带的止损。 27 份记录里有 16 份对每一笔订单都发送同一个距离;下文中的亏损,指价格在入场价的 反方向上平仓。

止损一致的 16 份记录,2,719 笔亏损交易数值
在出厂止损 ±2 % 以内平仓的亏损81.98 %(2,229)
在它之外平仓的亏损4.34 %(118)
最深亏损比设定值又深出一半的记录16 份中 9 份
每份记录最深超出幅度的中位数55.65 %
单笔最深亏损114 点止损对上 316.6 点
周五入场、非周五平仓:全部亏损对超出12.69 % 对 18.64 %(22)

第一行是止损在起作用:五笔亏损里有四笔落在预设写着的那个数字上。第二行是任何设定 都管不住的部分。最后一行比看上去更单薄:改成统计所有跨越周六或周日的持仓,两个 比例就会收敛到 33.36 % 对 35.59 %。第三行和第四行同样单薄:Sundial 最深的那笔亏损, 25 点止损对上 39.0 点,是唯一一条耗时为零而又是亏损的记录;把这三条全部剔掉,两个 数字就变成 16 份中 8 份和 44.06 %。Sundial 的定时平仓通常先一步到达,亏损中位数 8.1 点 —— 更快的离场挪动的是通常的亏损,不是最坏的那一笔。

相关术语与接下来该核对什么

由此得出一条规模换算规则:把出厂止损乘以 1.56 —— 这 16 份记录中最坏情形的中位数 —— 再拿它去对照你自己每笔交易的限额;有一半连这个数都超过了。距离要从实测的 波动率推算,而每一个 智能交易系统搭载的是什么止损,去 目录里它自己的页面上看。

常见问题

MT5 的 EA 是不是应该始终使用止损?
只要你打算把这个 EA 的风险量化,就必须用:头寸规模、风险回报比和预期回撤都是从止损距离推出来的。网格和马丁格尔式的补仓回本把它省掉了,所以它们的最坏情形没有边界。
止损距离取多少比较合适?
要远到寻常波动够不着 —— 日内大约是 ATR 的 1.5 到 2.5 倍。更重要的是那一对:把手数配到被止损时正好损失账户中事先计划好的那一小部分。
电脑关机之后止损还有效吗?
有效。一旦被接受,它就挂在经纪商的服务器上并在那里触发,与你的终端是否运行无关。而由 EA 在代码里自行管理的止损,则需要终端一直活着。
我的止损为什么被拒绝了?
通常是因为它比该品种的止损位限制(stops level)更贴近价格,那个值写在规格(Specification)对话框里。其他原因还有:方向对不上的无效价格,或者在冻结区间之内提交的修改。
亏损最多能比止损差多少?
在这里公开的 16 个单一止损 EA 上,每份交易记录里最深的那笔亏损,比出厂距离多出的幅度中位数为 55.65 %。十六个里有九个至少出现过一次比自己设定值还宽出一半的亏损。