分類
風險
難度
入門
適用情境
風險管理MT5 操作策略設計

停損

停損(stop-loss)是掛在持倉上的一個價位,價格觸及時經紀商會自動平倉,把這筆交易的虧損封在上限之內。它存放在經紀商的伺服器上,所以終端沒開著它照樣有效。

亦稱:SL, 止損, 停損點, 停損單, 保護性停損

更新於 · 審閱於

一句話講清

你事先同意自己看錯的那個價位。設下它,就把一筆未平倉部位變成一筆已知的成本。

為什麼重要

停損在市場插手之前,就把最壞情況定了下來。部位大小、風險報酬比與預期回撤,全都由這一段距離推導出來。少了它,一套策略報出來的只是已經平掉的虧損,而不是它可能承受的虧損。

  • 它把風險變成算術。一段停損距離加上一個風險上限,就得出手數;沒有它,就沒有東西可以拿來計算部位大小。
  • 一旦設好,它就待在經紀商的伺服器上,所以終端關閉或 VPS 重新開機時,它照樣會觸發。
  • 沒有它,最壞情況就沒有上界。網格與馬丁格爾式的攤平不設停損,這正是那些資金曲線看起來一路平穩、直到不再平穩為止的原因。

在 MetaTrader 5 中

在 MT5 的什麼位置

  • 新訂單對話框(F9)→ Stop Loss——在進場時設定,填的是價格而不是點數
  • 工具箱(Toolbox)→ 交易(Trade)分頁 → 在持倉上按右鍵 → 修改或刪除持倉
  • 市場報價(Market Watch)→ 在商品上按右鍵 → 規格(Specification)——Stops level 這一列,就是這家經紀商接受的最小距離
  • 工具箱 → 日誌(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 市場報價 → 規格裡就印著這個值。落在它之內的停損,永遠到不了伺服器。
移到成本價(break-even) 獲利達到 1 × 停損距離之後 很常見,而且不是免費的:一次拉回就會把一些原本會賺的交易變成打平出場。

常見運行問題

  • 訂單成交了,停損卻因為離價格太近而被退回,於是日誌只留下一行,持倉就這樣毫無防護地跑著。
  • EA 用委託價而不是成交價去算這個價位,於是滑價把真實風險挪動了。
  • 在 5 位數報價上,point 與 pip 會撞在一起:一個 30 點(pip)的停損,被當成 30 point 送了出去。

相關 MT5 函式

MqlTradeRequest.sl
隨訂單一起送出的停損價格;填 0 表示不設停損。
SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL)
價格與停損之間的最小 point 數,低於這個值經紀商就會拒絕。
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)。

常見誤解

為了不認賠而把停損移離價格

這是唯一一種會把受控虧損變成失控虧損的修改。帳戶上每一個風險數字,都建立在那個數值上。

以為停損能鎖定出場價格

它是一個觸發條件,不是一項承諾:跳空會直接穿過這個價位,持倉在下一個可成交的價格上被平掉。停損限價(stop-limit)鎖的才是價格,代價是可能成交不了;MT5 有這種單型,MT4 沒有。

跨市場狀態沿用同一個固定點數停損

30 點在平靜的市場裡很寬裕,在劇烈的市場裡卻裝不滿一根 K 線。

把停損設在帳戶負擔得起的地方

按一個過大部位所能容忍的距離擺出來的停損,會落在雜訊之內。該讓步的是手數。

深入說明

2,719 筆公開虧損交易,對那個本該攔住它們的價位做了什麼

每一個上架商品都附上自己的已平倉交易清單,所以每一段出場距離,都擺在它所帶的 那個停損旁邊。27 份紀錄中有 16 份在每一張訂單上都送出同一段距離;下文說的一筆 虧損,指的是價格收在對進場不利的一側。

16 份統一停損紀錄,2,719 筆虧損交易數值
收在出廠設定停損 ±2 % 以內的虧損81.98 %(2,229)
收在它之外的虧損4.34 %(118)
最深虧損比設定值還寬一半以上的紀錄16 份中的 9 份
每份紀錄最深衝出幅度的中位數55.65 %
最深的單筆虧損316.6 點,對上 114 點的停損
週五進場、非週五出場:全部虧損 vs 衝出者12.69 % vs 18.64 %(22)

第一列是停損在起作用:五筆虧損裡有四筆落在預設值的那個數字上。第二列則是任何 設定都管不到的部分。最後一列沒有看起來那麼站得住腳:改成把每一筆跨越週六或週日 的持倉都算進來,兩個比例就收斂了,33.36 % 對上 35.59 %。第三與第四列同樣經不起 細看:Sundial 最深的一筆虧損,39.0 點對上 25 點的停損,是唯一一筆歷時為零而且是 虧損的紀錄,把這三筆全部剔除,它們就變成 16 份中的 8 份與 44.06 %。Sundial 的 定時平倉通常會先一步觸發,虧損中位數 8.1 點——出場更快,移動的是典型虧損,而不 是最壞的那一筆。

相關詞條與下一步該查什麼

由此得出一條部位規則:把出廠設定的停損乘上 1.56——這是這 16 份紀錄最壞情況的 中位數——再拿去對照你每筆交易的上限;有一半的紀錄超過了它。距離要按實測的 波動率縮放,而任何一個 EA 出廠時帶著的停損,都可以在 商品目錄裡它自己的頁面上讀到。

常見問題

MT5 的 EA 一定要用停損嗎?
只要你打算量化它的風險,就非用不可:部位大小、風險報酬比與預期回撤,全都由停損距離推導出來。網格與馬丁格爾式的攤平不設停損,所以它們的最壞情況沒有上界。
停損距離設多少才算好?
要遠到普通走勢碰不到——日內大致是 ATR 的 1.5 到 2.5 倍。更重要的是那個配對:手數要配得讓被停損掃出場時,損失的是帳戶中事先規劃好的那一小部分。
電腦關機的時候停損還有效嗎?
有效。一旦被接受,它就待在經紀商的伺服器上並在那裡觸發,與你的終端有沒有在跑無關。但由 EA 在程式碼裡自行管理的停損,需要終端活著。
我的停損為什麼被拒絕?
通常是因為它比該商品的 stops level 更貼近價格,這個值公布在規格(Specification)對話框裡。其他原因還有:對該方向而言無效的價格,或是在 freeze level 之內做修改。
一筆虧損可能比停損還糟到什麼程度?
在本站公開的 16 個單一停損 EA 上,每份帳本裡最深的那筆虧損超出出廠設定距離的中位數是 55.65 %。十六個裡有九個,至少吃過一筆比自身設定還寬一半的虧損。