MT4 EA報錯130怎麼排查?從止損距離到動態限制的四步法
用原創淺藍色流程圖逐步排查MT4 EA的ERR_INVALID_STOPS:日誌、報價精度、MODE_STOPLEVEL和動態限制,避免以放寬止損掩蓋風險。
作者:托馬斯|EA與MT4實務|2026年10月20日
EA已經掛到圖表、自動交易也已開啟,卻在提交訂單時出現「130」,通常會讓人誤以為程式完全壞了。MQL4參考文件將130列為ERR_INVALID_STOPS:請求中的止損止盈、掛單價格或其規範化方式未被交易伺服器接受。它是定位線索,不是允許盲目放寬止損的理由。本文用四步排查法說明該看哪些記錄。
第一步:先確定是哪一次請求失敗
打開MT4終端或程式的相關日誌,記錄出錯的伺服器時間、品種、訂單方向、操作是OrderSend還是OrderModify,以及返回的錯誤碼。若日誌只有「下單失敗」四個字,先讓EA在不輸出密碼等敏感資料的前提下記錄請求價格、止損、止盈和返回值。先區分開倉失敗、修改止損失敗、掛單失敗;三者檢查的價格關係不同。
不要在即時帳戶裡透過不斷重複發送同一失敗請求來「碰碰運氣」。重複嘗試可能形成額外負載,也可能在行情變化後突然成功而產生意外倉位。先在模擬環境重現,並保留參數版本和當時的平台報價。
第二步:核對Bid、Ask、Point和Digits
MQL4的MarketInfo可以讀取當前品種Bid、Ask、Point和Digits。Point代表該報價的最小顯示單位之一,Digits表示小數位數;「10點」等於多少美元要根據該品種實際Point計算,不能把不同券商的黃金代碼和精度混為一談。價格傳入前還要按相應位數規範化。
舉例僅作數學示意:若某模擬品種Point為0.01、最小距離為50個point,計算出的距離是0.50報價單位;換成Point為0.001的品種則為0.05。數字不代表任何真實平台今天的合約規則。查看日誌時同時保存買賣價,避免用賣價檢查本應參考買價的一側,或者反過來。
第三步:檢查MODE_STOPLEVEL與訂單類型
官方OrderSend文件說明,止損與止盈不能離市價過近;掛單的預定開倉價也不能離當前市場過近。可用MarketInfo(Symbol(),MODE_STOPLEVEL)查詢公開的最小距離,單位為point。再根據訂單是買入、賣出或哪一種掛單,分別核對價格方向、距離和規範化,而不是把一個固定偏移量套在所有訂單上。

上圖是原創流程示意,沒有真實報價或帳戶資料。最小距離只是伺服器接受訂單的技術邊界,不等於策略上合理的止損距離。若為了繞過130而把止損移遠,原先計畫的單筆風險就會變大;應先重新計算倉位,必要時放棄該筆交易。
第四步:返回0也不能斷言沒有限制
MQL4官方對MODE_STOPLEVEL的說明特別提醒:返回0可能意味著沒有固定最小距離,也可能是伺服器採用終端無法直接表示的動態限制。後一種情況仍可能返回130。因此「查到0就把止損緊貼價格」並不成立。行情劇烈變化時,報價更新、點差變化和伺服端規則也可能使先前計算過的距離失效。
若程式算式與當時日誌相符,仍遇到130,保留失敗時間、品種、訂單參數和平台版本,查經紀商的品種規格與訂單限制,並向平台技術支援核實。不要憑別家平台的Point和StopLevel推斷本帳戶規則,更不要透過刪除止損來掩蓋真正的失敗原因。
修復後的驗證順序
先在模擬帳戶運行最小可重現案例:用同一品種記錄四個報價參數與StopLevel,發送單次測試請求,檢查伺服器返回與訂單狀態。再測試價格快速變化或不同交易時段的行為。確認程式有失敗後的停止或冷卻機制,且不會在重試時重複開倉。最後核對風險預算、點差和可接受損失是否仍符合原計畫。
錯誤130的排查重點是「請求為何被拒絕」,不是「怎樣強行讓它成交」。EA運行結果還受策略邏輯、網路和平台執行影響;任何修復都不保證盈利或避免損失。槓桿交易可能造成重大損失。