2020年4月7日 星期二

硬性 & 軟性掛單 (2) 軟性寫法 (Soft SL, TP and Pending)

軟性的交易程式寫法,是把一個單真正的 SL/TP 放在一個更遠位置,等待價格超過 SL/TP 的位置時,才把單平倉。最常見的是兩倍法



所以當價格超過真正的 TP 時,你會偵測到然後把單關掉,這邊請留意,如果是買單(long)你是要等 Bid 超過才平倉,而非 Ask,而且當你平倉的時候,你可能:

1. 平在 Trigger TP 的上面,多賺一點
2. 平在 Trigger TP 的下面,少賺一點


軟性寫法的最大優勢,是對於 SL/TP 過度擬合的交易策略,會很容易表現不穩定而爆掉。因為你並不會嚴格的 SL/TP 在你要的位置,而是在 SL/TP 的下一個 Tick 的位置。


Pending 也是一樣,在軟性寫法中,回測就不會遇到跳多、跳空還會當作有開的情況,因為一個 tick 直接超過 SL/TP,你的 order 要開會 invalid SL 或 invalid TP。


兩倍法的好處,是你不用存 狀態變數(state variables)因為你可以直接從現有的單的 SL/TP 直接除以 2 得到 Trigger Price,但是一直反覆去和 Server 拿 SL TP 價格也是會變慢,所以通常軟性寫法會盡量存狀態變數。

也就是你可以不放 SL/TP ,而是在 Order 傳出去的時候,直接把他原先應該放的 SL/TP 存起來,你可以寫在檔案備份,如果 EA 重新啟動就去讀取檔案還原狀態變數。

Soft Pending 一定要搭配 Soft SL/TP 嗎?

不一定,如果你是要避免價格跳多、跳空,Soft Pending 搭配 Hard SL/TP 會比較好,因為範圍較小,價格跳多/跳空之後,較容易沒開到(代表回測、模擬交易的結果會更嚴格,因為你的加減碼可能沒開到)。

我通常都是 Hard Pending 搭配 Soft SL/TP ,較少使用 Soft Pending。

請特別留意,如果你使用 Soft Pending,你的 Order 並沒有正式 Pending 出去,所以你無法從市場上取得 Order 的資訊來計算,程式邏輯可能會有極大差異!



高階補充:兩倍法在不儲存狀態變數的情況下,程式中 ×2 與 ÷2 可透過位運算(bitwise operation)完成,速度有時候比乘法略快。

為了減低計算量,也有人不是算 SL 到 Entry 的範圍、TP 到 Entry 的範圍再乘以 2,而是對例如 long entry 直接把 SL 除以 2,把 TP 乘以 2。

2 則留言:

  1. 『軟性寫法的最大優勢,是對於 SL/TP 過度擬合的交易策略,會很容易表現不穩定而爆掉。因為你並不會嚴格的 SL/TP 在你要的位置,而是在 SL/TP 的下一個 Tick 的位置。』

    關於這段話,如果用Hard Pending而回測時如果選擇 Every tick based on real ticks,是不是一樣會SL/TP再下一個Tick的位置 ?

    我發現有些程式用 Every Tick 回測跟用Every tick based on real ticks 回測得到的結果會差異很大。在上線前會一定要用real ticks做衡量嗎? 還是Every Tick 的結果也有參考性?

    回覆刪除
    回覆
    1. sorry 這幾天忙, 今天才看到:

      1. 如果用 Hard Pending 而回測時如果選擇 Every tick based on real ticks,是不是一樣會SL/TP再下一個Tick的位置 ?

      在 MT 回測中原則上是, 但是如果隔夜跳多/跳空, 在 MT 回測設計中還是會 SL/TP 在 Hard Pending 而非 Real Ticks 上唷~~



      2. 上線前會一定要用real ticks做衡量嗎? 還是Every Tick 的結果也有參考性?

      基本上 80% 一定會, 甚至在上 demo 前就會,
      但是也可能只是嘗試性質, 上 demo 前還沒跑 real tick, 上 demo 一段時間才跑 real tick

      如果你跑 real tick 真的要太久, 那可以上 demo 5-10 組, 然後有好的你再用 real tick 稍微擾動參數看穩不穩定
      還是要跑 real tick 的原因有 3 個:

      1. Model 部分如果過擬合, 現實因素, 例如變動的 spreads, slippage, lag 等等...

      2. 基本上學過資金管理, 就不太容易 Model 過擬合, 但是 Real Ticks 通常包含 Real Spread
      每一家券商的 spread offering 的習慣不一樣, 所以這時候還是得再看看券商的適配情況

      3. 在 MetaTrader 的系統限制下, MT4 的 spread 是 const, MT5 的公用 data 的 spread 有時候很詭異
      在 MT5 中 tick 和 real tick 在跑的時候會可能有秒差, 例如 real tick 都能跑在整點 00:00:00
      但是 every tick 可能會跑在 00:00:02, 00:13:01, 這累積起來的誤差也可能很大

      刪除