2020年3月30日 星期一

硬性 & 軟性掛單 (1) 硬性寫法(Hard SL, TP and Pending)

初學者在學習寫交易程式的時候,我會建議盡量先採取 硬性(Hard)的寫法,硬性的寫法是指,我們盡量把掛單函數填滿、填好、填早,讓券商伺服器或回測軟體,能自動觸發相對應的交易行為。

舉例來說,你如果已經預期你進場之後要在特定價位加碼,那你可以在進場時直接 pending 加碼的 order 在特定位置:

也就是說,你的交易訊號一觸發,你的相對應的交易管理邏輯,可以的話就盡量通通先 pending、先放好初始的 SL/TP ,剩下就是交由券商伺服器方(Server Side)去幫忙做:

1. pending order 的到價檢查
2. Stop Loss / Take Profit 的到價檢查

交易系統的硬性寫法,是讓你把交易邏輯盡量在訊號產生的時候,就盡量先計算完,盡量先把所有的鍋甩到券商臉上,盡量減少自己交易程式中需要儲存的狀態變數(state variables)。

讓我們看更複雜的例子,如果我進場 1 lots 然後預計:

1. 上漲 5% 我要加碼 2 倍 (= 2 lots)
2. 上漲 10% 我要整組交易減碼 50% 
3. 上漲 15% 我要 Take Profit(=減碼 100%)

在硬性寫法中,我會先把單全部開好,也就是說連 PartialClose 我都要避免,盡量只使用 OrderSend, OrderDelete, OrderClose 三類函數:
 
但是硬性的寫法有 2 個在回測(Backtest)時的缺點:

1. 掛單太多,回測變慢:整體交易的單都先開完,通常會因為後續加減碼的設計,造成一開始掛單的單就掛太多,如果還使用 Multi-Entry (多重進場),可能會讓交易策略一直持有很多的 Order,有時候會讓回測速度變很慢。

2. 跳多/跳空的錯誤:在過於粗糙的條件下(例如 1 分鐘資料,或是特定時間尺度的 OHLC 的資料)可能發生跳多/跳空,結果硬性 Order 還是會從開倉到平倉,但實際上這組交易可能不會發生或是價位差異大,進而造成回測結果有偏差,必要情況甚至會影響很大。



既然如此,我還是推薦新手盡量採用硬性寫法的原因,就是希望你能先熟練你自己的交易邏輯,然後嘗試看看 demo trading 去撞撞看跳多/跳空的問題,你自己為更有學習成長的感覺,去感受一下交給券商,券商還是會幫你製造一些麻煩的感覺,再進一步去改善程式。

如果對你來說實現一個加減碼策略的程式不會有什麼問題,你開始真的想要大量的回測與找到好的交易模型,那這時候你必須在程式中考慮所謂的軟性寫法- Soft SL/TP 和 Pending 。

軟性寫法和硬性寫法的交易程式的寫法,會有極大的不同!
軟性寫法和硬性寫法的交易程式的寫法,會有極大的不同!
軟性寫法和硬性寫法的交易程式的寫法,會有極大的不同!

但為了你的交易基礎的厚實,我推薦你還是先嘗試寫硬性的,除非你真的對寫交易程式沒有什麼問題,我才推薦你開始全面性的採用軟性的寫法(軟性的寫法能達到部分硬性的結果)

所以實際上,在真的做交易和回測,程式碼你可能會有兩份:

1. 一份是軟性寫法的程式,用於回測、優化
2. 一份是硬性寫法的程式,用於真實交易

由於硬性寫法造成 (1) 跳多跳空的問題,還有 (2) 交易太多的問題,所以在實際上線的時候,還需要有監控的交易程式看有沒有問題,但一切的目的就是盡量減少策略的【狀態變數】。

對於初學者來說,從回測到上線都採用硬性寫法,會在回測優化時遇到一些問題,這些在 demo trading 會抓出來。

對於中高階的朋友,我推薦可以採全部軟性的寫法,但是狀態變數會比較多,你可能要斟酌。

對於真正專業的朋友,可能回測和真實上線會是兩份不一樣的程式碼,回測有專門回測用的(快速、誤差容忍度高)和專門交易用的程式碼。

沒有留言:

張貼留言