部分平倉與移動停損併用:容易出錯的環節與檢查
目錄 (5)
目錄
結論:出問題的往往不是邏輯,而是「狀態的傳遞」
部分平倉與移動停損,單獨來看都不是困難的處理。問題出在把兩者同時套用在同一個持倉上。就我們的開發經驗,問題幾乎都集中在下列 3 處:
- 剩餘手數管理:EA 記不住「是否已經部分平倉過」
- 手數步長:平倉手數不符合經紀商的最小手數或步長
- SL 重設順序:部分平倉、移至建倉價、移動停損三者互相覆蓋
這些問題在回測中很難暴露,多半要到實盤運作時才會發現。
推薦經紀商比較 →
🎁 免費下載EA📧 免費電子郵件課程(共 8 封)+ 訂閱者專屬 MT5 指標 13 款合集
※ 嚴格保護隱私。可隨時取消訂閱。
為什麼併用就容易出問題
剩餘手數不能只靠 EA 的「記憶」
在 MT5 中,部分平倉後持倉的 ticket 不會改變,只有 POSITION_VOLUME 會減少。如果只用一個 bool 變數記錄「已部分平倉」,EA 重新啟動、VPS 重新連線或切換時間週期時,這個值就會消失。接著在第一個 tick,EA 又把剩下的持倉再平掉一半,這就是典型的事故。
對策是,我們會用 HistorySelectByPosition() 追溯該持倉的成交紀錄,比較最初的建倉手數與目前的剩餘手數,藉此判斷部分平倉進行到哪一階段。記憶體中的旗標只當作輔助。
手數要「無條件捨去」,而不是「四捨五入」
0.03 手減半是 0.015。在步長為 0.01 的帳戶中,若四捨五入就會平掉 0.02 手,比預期多放掉一些部位。平倉手數必須依 SYMBOL_VOLUME_STEP 無條件捨去,還要確認平倉後的剩餘手數是否仍在 SYMBOL_VOLUME_MIN 以上。0.01 手本來就無法分割,若不事先在規格中決定要「不做部分平倉」還是「全部平倉」,EA 就會不斷回傳錯誤。
SL 的寫入要集中在最後一處
PositionModify() 是同時指定 SL 與 TP 的函式。如果移動停損的處理對 TP 傳入 0,TP 就會被清掉。另外,部分平倉後把 SL 移到建倉價的處理,與移動停損拉高 SL 的處理,若在同一個 tick 各自執行,後寫入的一方會獲勝。結果就是已經提到建倉價的 SL 又被拉低。
我們採用的順序如下:
- 送出部分平倉 → 重新選取持倉並確認剩餘手數
- 同時算出建倉價 SL 與移動停損 SL 兩個候選值
- 只往「比目前 SL 更有利的方向」移動(買單取較高者,賣單取較低者)
- 確認停損水位(Stop Level)與凍結水位(Freeze Level)後,TP 重新帶入目前的值,只修改 1 次
實作與確認檢查清單
| 確認項目 | 出問題時的症狀 | 確認方法 |
|---|---|---|
| 是否依成交紀錄判斷部分平倉階段 | 重啟後重複部分平倉 | 運作中重新掛載 EA,觀察剩餘手數的變化 |
| 平倉手數是否依步長無條件捨去 | 平倉量比預期多,或出現錯誤 | 以最小手數建倉並查看日誌 |
| 最小手數時是否已決定如何處理分割 | 每個 tick 都平倉失敗 | 用 0.01 手測試 |
| SL 是否不會往不利方向退回 | 移到建倉價之後仍以虧損出場 | 在日誌中依時間序列追蹤 SL 的變化 |
| 修改 SL 時是否清掉了 TP | 停利沒有作用 | 查看修改後持倉的 TP 欄位 |
| 部分平倉失敗時是否不移動 SL | 剩餘手數與 SL 的前提不一致 | 在臨近休市等時段下單,刻意製造失敗 |
| 是否在 Netting 帳戶上運作 | 與其他 EA 的持倉被合併計算 | 確認帳戶類型 |
站在使用者的立場,最快的檢查方式是在模擬帳戶以最小手數運作,並在中途重新掛載 EA,看行為是否改變。基本設定方式整理在 EA 設定方法。
限制與注意事項
策略測試器的成交是即時的,訂單只成交一部分的情況也幾乎不會發生。因此,部分平倉相關的問題,幾乎無法從回測數字中看出來。實際帳戶中的成交方式(Filling Mode)差異,以及重新報價時的行為,老實說只能逐家經紀商確認。
另外,加入部分平倉並不代表績效就會變好。對於勝率低、靠少數大額獲利支撐整體的趨勢跟隨型策略(例如 DONCHIAN ENGINE 在回測中的勝率為 34.5%),在獲利擴大的階段減少持倉量,期望值可能因此下降。損益的波動會變小,但為此換掉了什麼,每個 EA 都得分別驗證才知道。我們自己也沒有把所有組合都驗證過。
若要自行為 DONCHIAN ENGINE 這類策略事後加上部分平倉,請注意原本的驗證結果將不再直接適用。
總結
- 部分平倉與移動停損併用時,容易出問題的是「狀態的傳遞」,而非邏輯本身
- 部分平倉的階段應依成交紀錄與剩餘手數判斷,而不是記憶體中的旗標
- 手數依步長無條件捨去,並確認剩餘手數不會低於最小手數
- SL 的修改集中在一處,只往有利方向移動,且不要清掉 TP
- 回測中很難看出問題,請在模擬帳戶做重新掛載測試
- 部分平倉能讓損益波動變小,但也可能降低期望值
其他實作上的注意事項,也整理在 EA・MT5 知識庫。
相關文章
📧 免費電子郵件課程(共 8 封)+ 訂閱者專屬 MT5 指標 13 款合集
※ 嚴格保護隱私。可隨時取消訂閱。