過去我談過的停損用程式碼,不論是固定點數或是進場價的百分比都是基於每一次的進場部位都保持一樣的口數,比如: 1 口,全年到頭都是 1 口。
因為接觸的進場部位大小的設定這樣的題目的關係,想到了,如果每次進場不管這次進場的口數是幾口,我就是單次交易只願意準備虧損個...比如 500 點好了。在程式碼的寫法可以如下作法。
Param: MaxLoss(500) Var: StopPoint(0) . . . StopPoint= MaxLoss/ABS(CurrentContracts) if MarketPosition>0 then ExitLong next bar at EntryPrice(0) - StopPoint stop end if if MarketPosition<0 then ExitShort next bar at EntryPrice(0) + StopPoint stop end if
這樣作法的效果是,當你進場口數為 2 口的時候,停損價的設定會是 250 點,而如果進場口數為 5 口的時候,停損價設定則會是 100 點,假設我們願意在單次交易承受總共 500 點的損失的話。而這個作法的好處是,不管我們用什麼條件作為判斷這次進場的部位大小有多大,進場後的損失金額可以限定住,不會因為這次交易的口數比較大而需要特別去承受更高的風險。
在以上的程式碼中我用了一個參數與一個變數,跟過去只使用一個參數來做停損功用的寫法不同,因為我們依然可能想測試看看到底自己的交易策略每次交易承受多大的損失的狀況評估?跑最佳化必然要用參數,但參數不允許在程式中去被改變,所以必須使用變數來計算實際上要被觸發的停損價。
寫這一篇是為了給進場的部位大小設定做前引。那不是通常我們習慣說的加減碼,並不是像先進場個 1 口,看看是否賺錢,再增加 1 口之類的作法,而是在進場的時候就先決定這次的進場要下多少口-每次的進場可能口數都會不一樣。
後續延伸,一定要看:http://www.yctseng.net/2010/08/blog-post_09.html