移動停損是常見的出場策略,做法是隨著獲利增加跟著調整停損位置,可以幫我們鎖住獲利時同時兼顧風險。但它是一個好的出場策略嗎?本篇文章,利用GSnail設計一些簡單的進出場條件,以小台為交易商品,進行近2年回測,來驗證這件事
測試的進出場條件與相關參數
測試期間從2020年開始到2021年年底(2021-12-22),整個市場行情雖然歷經新冠疫情有短暫下跌,但整體是多頭格局,所以進場條件設計三個不同面向但都是作多的條件,分別為續創新高、均線黃金交叉、底部拉回,進場條件不是重點 ,在多次回測過程中,會改變不同的出場條件來驗證績效,但進場條件會做為固定條件不會變動
出場條件分別以50點(小台損益2500),100點(小台損益5000)為參數分別設計了停利2500、停利5000、停損2500、停損5000、移動停損2500、移動停損5000、移動停利2500(大部分的說法會把移動停損和移動停利視為相同,不過在本文中的移動停利會在獲利狀態下才啟用和一般的移動停利不同)、移動停利2000改,等8個出場條件做不同組合測試
回測商品是小台近月,單邊手續費設定成20,主要測試出場條件,所以設成留倉,同時為降低隔日跳空頻率,採全盤交易(含夜盤,1天總共1140根分K),以分K收盤價進出,結算日當天9:30分出場後當日不再進場,每日交易出現一次賠錢後,當日不再進場(避免過度交易擴大當日損益)
移動停損績效表現不好
測試出場的組合分別為固定停損停利(2500,5000兩組),2:1和1:2比率停損停利,移動停損(2500,5000兩組),最後3組則是針對移動停損進行改進的固定停損+移動停利(稍後解釋)
以下為各組別出場條件測試跑(2020~2021)2年的結果
No | 出場條件 | 進場次數 | 獲利次數 | 勝率 % | 最大虧損 | 累計總損益 |
---|---|---|---|---|---|---|
1 | 停利2500+停損2500 | 906 | 505 | 55.7 | -17,814 | 252,369 |
2 | 停利5000+停損5000 | 595 | 332 | 55.8 | -34,921 | 314,452 |
3 | 停利2500+停損5000 | 968 | 675 | 69.7 | -35,871 | 233,326 |
4 | 停利5000+停損2500 | 606 | 248 | 40.9 | -34,921 | 245,056 |
5 | 移動停損2500 | 624 | 233 | 37.3 | -15,964 | 118,938 |
6 | 移動停損5000 | 410 | 173 | 42.2 | -23,071 | 379,383 |
7 | 停損2500+移動停利2500(3000啟用) | 629 | 295 | 46.9 | -29,371 | 200,450 |
8 | 停損5000+移動停利2500(3000啟用) | 610 | 393 | 64.4 | -29,371 | 391,866 |
9 | 停損5000+移動停利2000改(3000啟用) | 591 | 381 | 64.5 | -29,371 | 426,314 |
可以看到第5組的移動停損,回測2年的結果總損益才118,938 是全部回測組別中表現最差的甚至比固定金額(2500)停損少掉一倍以上,為什麼?
觀察下面這張圖,理想中的移動停損是進場後,隨著獲利創新高,然後不斷跟著調高停損位置(圖中藍色線段)鎖住獲利,直到走勢拉回打到移動停損位置後自動出場
但不幸的是,在移動停損往上移動停損位置時,也有可能導致提前賠錢出場,觀察下面這張圖,進場後走勢往上,所以藍色的移動停損線也隨之往上調整,接著走勢隨之拉回打到藍色線段,這時就會移動停損出場,但這個位置是賠錢的,而且拉回的位置並沒有打到一開始的固定停損位置(綠色線段)
很明顯的,假設設定移動停損拉回2500出場,實際上並不會像固定停損一樣損益賠超過2500後才出場,而是損益賠錢在0~2500之間都有可能出場,因此賠錢出場的機率會增加,這會導致移動停損的勝率輸給固定停損(比較第1組與第5組,固定停損勝率55.7% 移動停損只有37.3%)
使用移動停損可以吃到噴出的行情?
從上面實驗與說明可以得到使用移動停損的勝率反而比固定停利停損小,但固定停利獲利有限,如果進場後行情噴出固定停利反而吃不到,移動停損才有機會吃到,把移動停損的門檻調高,由拉回2500(50點)調高到5000(100點) 這樣就比較不容易被洗出去,賺大賠小。我們直接看上面第6組回測結果,移動停損5000,損益358,385,的確,調高移動停損的參數會讓獲利遠超過前面幾組固定停利停損。但這是有前提條件的,前提是你要看對行情,2020~2021這兩年雖然受到新冠疫情影響,行情稍有震盪,但總體而言是大多頭格局,指數從1萬2跑到1萬8上漲6000點,程式交易策略只要做多而且抱越緊就賺越多,上面實驗策略3個進場條件都是作多,移動停損把參數從2500調高到5000代表策略進場後,出場的條件較為嚴格,必需從最高獲利拉回5000以上才會出場,相對會讓策略持倉時間延長吃到噴出,符合這2年的行情做法。但實際上未來行情會怎麼走是不知道的(雖然大部分時間是走多頭)。接下來,同樣做9組出場的回測實驗,但除了原先3個做多進場條件外,再加3個相反的做空條件,分別為續創新低、均線死亡交叉、頂部下殺,模擬在這兩年多空都做時,使用不同出場條件的情況。
以下為各組別出場條件(進場條件3個多+3個空)測試跑(2020~2021)2年的結果
No | 出場條件 | 進場次數 | 獲利次數 | 勝率 % | 最大虧損 | 累計總損益 |
---|---|---|---|---|---|---|
1 | 停利2500;停損2500 | 857 | 437 | 51. | -7,113 | 38,409 |
2 | 停利5000;停損5000 | 574 | 291 | 50.7 | -21,774 | 40,085 |
3 | 停利2500;停損5000 | 952 | 626 | 65.8 | -21,774 | -2,118 |
4 | 停利5000;停損2500 | 597 | 216 | 36.2 | -15,964 | 61,861 |
5 | 移動停損2500 | 638 | 219 | 34.3 | -15,964 | 29,646 |
6 | 移動停損5000 | 467 | 167 | 35.8 | -21,774 | -97,667 |
7 | 停損2500;移動停利2500(3000啟用) | 654 | 280 | 42.8 | -15,964 | 40,119 |
8 | 停損5000;移動停利2500(3000啟用) | 633 | 371 | 58.6 | -21,774 | 2,971 |
9 | 停損5000;移動停利2000改(3000啟用) | 617 | 361 | 58.5 | -21,774 | 23,100 |
可以看到第6組回測結果,這2年如果多空都做的話,調高移動停損門檻反而會賠錢。
改良移動停損,固定停損+移動停利
停損代表的是個人每次交易的風險承受度(註1),例如設定策略交易停損2500表示每次交易可以接受2500左右的損失,但移動停損隨著未平倉獲利增加會不斷調高停損位置(相對減少用來控制出場的停損金額直到變成獲利為止),風險承受應該是固定的,不應該隨著獲利增加縮減停損金額(這樣可能會導致在未達風險承受度前,提前賠錢出場),要如何解決這個問題,很簡單,在獲利還沒超過移動停損拉回門檻前使用固定停損,等獲利超過門檻值後再啟用移動停損
在GSnail中要如何設計這樣的出場條件呢,在原先的移動停損條件中多加一個啟用的條件就好,然後在同時勾選停損條件,就可以達到固定停利和移動停利同時使用的效果
可以回頭看一下第1張回測結果表格,第7組 停損2500+移動停利2500(3000啟用) 累計損益200,450 比最差的移動停損2500好一倍,第8組 停損5000+移動停利2500(3000啟用) 調高固定停損到5000後,雖然一樣是回落2500出場,但累計損益還是比移動停損5000這一組高,重點是這種做法即使是在看錯行情下(模擬這2年多空都作的情況)仍維持小賺不賠(第2張表的7,8組)
在回測結果中的第9組使用的是改良後的移動停利,同樣是在最大獲利>3000後才會啟用移動停利的判斷,但移動停利的判斷條件就不是固定門檻值,而是2000+最大獲利的10%(條件寫法 最大獲利 - 損益 > 2000+最大獲利/10),想法是當我獲利以後(最大獲利>3000)我的回落出場條件可以隨著最大獲利增加稍微增加門檻,而不是固定值
最後看一下GSnail單日回測的畫面,GSnail可以輕鬆做出自動紀律出場的系統,直接在圖表上畫出固定停損,移動停損和移動停利(獲利後才啟動)的線圖
下載範例檔[紀律交易1.gsc]
註1 設定停損條件可以控制風險,但不是絕對的,因為收盤到下次開盤期間,有可能發生一些事件,導致下次開盤出現跳空,如果跳空的幅度遠超過你所設定的停損門檻,該次交易損失就會遠超過您設定的停損門檻,這是作波段交易(留倉)必須知道的風險