2011年4月7日 星期四

移動折返停利(函數)


程式交易小學堂─期貨投機事業的王道
這一篇講的是常見的部位獲利之後的獲利折返(回吐)出場的機制。在這裡沒有提供 MultiCharts 的版本,因為在 MC 裡已經有內建的函數可以處理這個常見的手法。在 HTS 的內建函數中雖然也有一個 SetTrailingStop,但坦白講,我個人覺得不好用,因為那只是用來判斷成立與否,我提供的這個函數則是直接計算出移動出場的觸發點數,但是多、空單分開,因為我總是認為多空不該對等。


多單的移動折返函數程式碼 LongTrailingStop(啟動門檻,折返程度):
Param:Gate(Numeric),TurnBack(Numeric);
Vars:TS(0),PP(0);

PP=MaxPositionProfit(0)/PointValue/abs(CurrentContracts)

TS=iff(TurnBack<=1,(1-TurnBack)*PP,PP-TurnBack)

LongTrailingStop=iff(MarketPosition>0 and PP>=Gate, EntryPrice(0)+TS, 0)



空單的移動折返函數程式碼 ShortTrailingStop(啟動門檻,折返程度):
Param:Gate(Numeric),TurnBack(Numeric);
Vars:TS(0),PP(0);

PP=MaxPositionProfit(0)/PointValue/abs(CurrentContracts)

TS=iff(TurnBack<=1,(1-TurnBack)*PP,PP-TurnBack)

ShortTrailingStop=iff(MarketPosition<0 and PP>=Gate, EntryPrice(0)-TS, 99999)


解釋一下這兩個函數的使用方法,以多單的移動折返停利出場為例,LongTrailingStop(300,0.3)內填兩個參數,第一個是當獲利超過幾點以上才啟動移動出場的機制,這是計算回單口的狀態,也就是說不管你手上有幾口在,從最後一個進場的價位往上算獲利超過 300點才啟動,如果帳面的價位差距連獲利 300點都沒有就連出場的價位都不計算了。第二個參數是計算折返多少,填入 0.3表示折返 30% 也就是帳面最大獲利扣掉 30%的價位就是要出場的位置。假設多單進場價在 8000點,當報價來到 8300的時候 LongTrailingStop(300,0.3)會得到 8210的出場價位:

8000 + (8300-8000)-(300*0.3)
= 8000 + (300-90)
= 8210

如果在這個函數的第二個參數填入的是1以上的數值,就會當做是使用折返多少點來計算移動出場的價位,比如 LongTrailingStop(300,77)會得到出場價位是:

8000 + (8300-8000)-77
= 8000 + (300-77)
= 8223


至於運用到買賣訊號裡就如以下這樣(要先建立好上述兩個函數):
if MarketPosition>0 then//手上有多單
    ExitLong next bar LongTrailingStop(300,0.3) stop
    //在部位獲利超過300點之後,回吐 獲利的30% 時多單出場
  end if

  if MarketPosition<0 then//手上有空單
    ExitShort nexr bar ShortTrailingStop(400,123) stop
    //在部位獲利超過400點之後,獲利回吐 123點 時空單出場
  end if

我想這樣使用函數來做移動折返停利出場應該是比較方便了,不過,進場及發生到達獲利門檻的當根K棒都是無法馬上停利出場的

熱門文章