分類
平台
難度
進階
適用情境
MT5 操作EA 評估券商選擇

滑價

訂單所要求的價格與實際成交價格之間的差額。它可能偏向任一邊,但對靠速度取勝的策略而言,這是一項回測很少建模的成本。

亦稱:slippage, 價格滑移, 偏差

更新於 · 審閱於

一句話講清

你要的是一個價格,拿到的是另一個。從訂單離開終端到成交為止,市場一直在動——有時對你有利,更多時候不利,而且往往在你最不希望的時候動得最厲害。

為什麼重要

回測按它自己決定的價格成交。真實帳戶按訂單抵達時券商手上還有的價格成交。這個差額在單筆交易上很小,卻隨交易筆數累積,因此它決定了一套快節奏策略能否經得起真實帳戶的考驗。

  • 它隨頻率放大,而不是隨手數放大。十分之一個點在一筆交易上不算什麼,攤到兩千筆就有分量了。
  • 它恰恰在最痛的地方最嚴重——數據公布時、開盤時、被強制平倉時,這些都是策略最可能正在送出訂單的時刻。
  • 它以回測無法捕捉的方式取決於券商:同一個 EA 跑同一份資料,在成交品質不同的兩家券商會得到不同的實盤結果。
  • 它可以測量。把要求價與成交價在幾百筆交易上取平均,就把一場關於成交品質的爭論變成了一個數字。

在 MetaTrader 5 中

在 MT5 的什麼位置

  • 新訂單對話框(F9)→ 偏差——市價單上你願意接受的最大滑價,以點為單位
  • 工具箱 → 歷史 → 該筆成交的價格,對照 EA 在 Experts 記錄中要求的價格
  • 日誌分頁,被拒絕的訂單在這裡顯示為重新報價或無效價格,而不是一次成交
  • 策略測試器——它建模點差,但不建模訂單延遲,這就是測試器裡的成交系統性地比實盤更寬厚的原因

EA 如何使用它

  • MqlTradeRequest 的 deviation 欄位設定容差:在距要求價這麼多點以內成交,否則寧可拒絕也不以更差的價格成交。
  • 在 Market Execution 下,要求會按市場給出的價格成交,而偏差限定了在訂單被拒絕之前這段距離可以拉開到多遠。
  • 成交模式在邊界上起決定作用:Fill or Kill 直接拒絕部分成交,Immediate or Cancel 先拿走可得的部分並取消其餘。
  • 寫得好的 EA 會把拿到的成交價與要求價相比較,並從成交價而不是要求價重新計算停損與目標。
  • 被拒絕後不重新核對訊號就再次送單,正是一次被拒成交演變成多次、且價格一次比一次差的路徑。

常見設定

設定項 常見取值 備註
偏差,波段策略 10–30 點 寬鬆。相對以百計的目標,幾個點的滑價無關緊要。
偏差,剝頭皮策略 1–5 點 窄到足以讓糟糕的成交被拒絕而不是被接受——代價是更多的拒單。
值得接受的平均滑價 低於 0.5 個點 在你自己的帳戶上以 100 筆以上的實盤交易測得,而不是引自券商的宣傳材料。
值得深究的平均滑價 高於 1.5 個點 對目標較小的策略來說,這已是每次獲利中相當可觀的一塊。
成交模式 以商品允許的為準 由券商按商品設定;送出不受支援的模式會讓訂單被拒絕,而不是被調整。

常見運行問題

  • 為波動大的商品把偏差設得過窄,會變成一連串被拒的訂單,EA 的交易次數遠少於回測所稱。
  • 把偏差設得過寬,會接受遠離訊號價的成交,於是真正做的那筆交易並不是策略建模的那筆。
  • EA 用要求價而不是成交價計算停損,於是每一次滑價進場,真實風險都與預期風險不一致。
  • 到券商伺服器的距離帶來延遲,延遲帶來滑價——這就是把 EA 放在靠近交易伺服器處運行的現實理由。
  • 數據公布製造的滑價遠超樣本中的任何值,因此穿越這些時刻交易的策略也必須在這些時刻被測試過。

相關 MT5 函式

MqlTradeRequest.deviation
市價單可接受的最大滑價,以點為單位。
CTrade::SetDeviationInPoints(points)
同一容差,一次設定後適用於該實例送出的每一張訂單。
MqlTradeResult.price
實際成交的價格——必須拿來與要求相比較的那個數。
SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE)
券商對該商品允許哪些成交模式;送出其他模式會被拒絕。
OrderSend(request, result)
回傳同時攜帶 retcode 與成交價的結果結構。

範例

同樣是平均 0.4 個點的滑價,用在目標不同的兩套策略上。每筆交易的成本相同;它吃掉的優勢比例並不相同。

每筆交易的平均滑價
0.4 個點
剝頭皮——平均獲利
6 個點
進出兩端的滑價約占毛利的 13 %。
波段 EA——平均獲利
120 個點
同樣的滑價約占毛利的 0.7 %。
剝頭皮——每年交易筆數
2,000
每年 1,600 個點僅僅損耗在成交環節。

在這兩列之間,券商那邊什麼都沒變。差別在於策略的優勢有多少落在成交這個窗口裡。

計算 0.8 ÷ 6 = 13 % · 0.8 ÷ 120 = 0.7 %

結果 同一種成交品質,兩個完全不同的結論

怎麼使用

滑價是測出來的,不是假設出來的。下面每一條結論都來自在你自己的帳戶、你自己的券商上,把要求價與成交價逐筆對照。

區間 含義
100 筆以上平均低於 0.5 個點 成交良好。回測結果打個不大的折扣即可移轉過來。
0.5–1.5 個點 對目標以數十點計的策略可以接受;對任何更小的目標都是實打實的拖累。
平均高於 1.5 個點 放大之前先查清楚。要麼策略在錯誤的時刻交易,要麼成交品質沒有競爭力。
始終偏向同一方向 有利方向的滑價也該出現。如果成交永遠比要求更差,那描述的是成交品質,而不是市場的波動。
  • 每筆交易都把要求價記在成交價旁邊。沒有這一對數字,就沒有東西可測,也沒有比較券商的依據。
  • 拿同一時期的實盤運行和它的回測作對照——每筆平均結果之間的落差,正是滑價與點差棲身的地方。
  • 從目標大小推導偏差:目標小就設窄,好讓糟糕的成交被拒絕;目標大就設寬,免得為了零點幾個點錯過好訊號。
  • 從成交價而不是要求價重新計算停損與目標。否則一次滑價進場會悄悄改變這筆交易的風險。
  • 把數據公布時段的成交單獨評估。取自平靜時段的平均值,對那幾秒鐘裡發生的成交什麼也說明不了。

mt5depot 的商品頁會公布每份回測是在哪家券商、什麼帳戶條件下產生的,因此一個結果背後的成交假設是被寫明的,而不是被預設的。

常見誤解

以為滑價總是不利的

有利方向的滑價——成交價好於要求價——在真正的市價成交下、正常行情中就會發生。一份在數百筆交易裡只出現不利滑價的紀錄,描述的是成交品質,不是市場。

把回測當成已經建模了成交

策略測試器建模點差,卻不建模從決策到成交之間的延遲。因此每一份測試器結果都偏樂觀,偏離幅度隨交易頻率增大,而且恰恰在測試中看起來最好的策略上落差最大。

把偏差設為零以避免滑價

那並不能消除滑價,它消除的是成交。EA 最終只交易自己一部分訊號,而漏掉哪些訊號是由市場速度而不是由策略決定的。

只看點差比較券商

宣傳上很窄的點差若配上糟糕的成交,可能比一個更寬但成交乾淨的點差還貴。可比的數字是每個來回的總成本——點差加佣金再加實測滑價。

深入說明

這裡的每一個商品都附帶一個成交容差,而這個貨架本身對它的含義並不一致。偏差決定的是哪些成交會被拒絕,而不是被接受的成交有多糟——而在這裡,同一個數字指的是兩種大小。

每個商品都附帶的容差

在此發布的 14 個 EA 中數值
帶有成交容差參數的商品14
描述該參數的參數條目40
標註為 0.3 個點的容差3
標註為 3 個點的容差11
寫明它不影響回測的頁面8
寫明紀錄是在該數值下測得的頁面2
帶有實測滑價數字的運行0

第三列與第四列就是陷阱。Cairn 與 Thunderhead 印著一個光禿禿的 3,按點計;另外九個也印著光禿禿的 3,卻按 pip 計。同一個數字,相差十倍。只有 Iridescence、Lattice Weave 與 Tidewell Slack 把單位一併印出來——這三個是你不可能讀錯的。

第五列與第六列用兩種口吻描述同一項設定,而第七列說明該信哪一種:我們的回測沒有一份是把成交與要求作對照測量的。這就使它成為一條實盤交易的指令,而不是一項回測假設——正是我們的方法論在每份紀錄周圍劃下的邊界。

它咬得最狠的地方,正是它收得最緊的地方:在 0.3 個點上,偏離更遠的成交會被拒絕,於是 Cairn 的 4,725 筆交易變成的是比紀錄所示更少,而不是更差。

常見問題

MT5 的 EA 出現多少滑價算正常?
在有競爭力的帳戶與尋常行情下,一百筆以上交易的平均值低於約 0.5 個點算好,0.5 到 1.5 個點對目標以數十點計的策略仍然可行。平均值持續高於 1.5 個點就值得深究,尤其是策略交易頻繁時。
為什麼我的實盤結果比回測差?
通常的解釋是滑價與點差。策略測試器按它自己決定的價格成交,也不建模訂單送出到成交之間的延遲,所以實盤成交系統性地略差一些。這個效應隨交易筆數放大,因此交易頻繁的策略最快偏離自己的回測。
用 VPS 能減少滑價嗎?
它能減少由你的終端與券商伺服器之間的距離和延遲造成的那一部分,這一部分對目標較小的策略最為要緊。但對由市場波動、或由下單瞬間流動性稀薄造成的那一部分,它無能為力。
EA 應該用多大的偏差?
夠在值得做的訊號上成交即可,不必更多。目標大的策略接受 10 到 30 點也無所謂;剝頭皮策略通常只設幾個點,好讓糟糕的成交被拒絕而不是被接受,代價是承受更多拒單。