19 3月 2009

進場交易後的絕對點數停損或停利

不論在使用HTS或TS的時候,很多人都不知道如何停損停利

其實,只要知道進場價位就可以去計算出停損點數

entryprice(0)函數是一個很重要的關鍵

沒有單在手上的時候,entryprice(0)是0
手上有單的時候,entryrpice(0)是入手價位

如此一來,假設停利點數20點
多單停利可以寫成 exitlong next bar at entryprice(0)+20 limit
空單停利可以寫成 exitshort next bar at entryprice(0)-20 limit

但是常見的錯誤寫法如下(TS語法)
進場後,20點停利(錯誤寫法)
if condition then
    buy this bar on close;
if marketposition > 0 then
    exitlong next bar at entryprice(0)+20 limit;


為什麼說上面的寫法是錯誤的呢?其實把上面的語法放在TS中
回測的時候會發現下圖

上圖,其實在進場後的下一根就應該要停利了,但是卻跳了一根K棒才顯示訊號
就對程式而言,程式很多要觸發的條件都是因為成立個某個事件(Event)在某
個Event觸發後才會成立,就程式交易的語法不難發現,很多涵數都是在K線結
束後才會做一次統計運算。就拿上圖來說,當進場後並沒有觸發到Event所以才
導致下一根不會出現訊號,進場後的下一根才產生 marketposition > 0 的條件

因此如果要修正的話
那表示在進場的同時就要同時給定出場訊號,我們將程式碼改下如下
進場後,20點停利
if condition then begin
    buy this bar on close;
    exitlong next bar at close+20 limit
end;
if marketposition > 0 then
    exitlong next bar at entryprice(0)+20 limit;




經過回測發現,果然隔一根就有停利訊號。

接下來測試停損
進場後,20點停損(錯誤寫法)
if condition then
    buy this bar on close;
if marketposition > 0 then
    exitlong next bar at entryprice(0)-20 stop;




進場後,20點停損
if condition then begin
    buy this bar on close;
    buy next bar at close-20 stop;
end;
if marketposition > 0 then
    exitlong next bar at entryprice(0)-20 stop;



如果進場的時候並非以this bar at close
一樣會有這樣的情形,我們一樣可以用下面方法修正
進場後,20點停利(錯誤寫法)
if condition then
    buy next bar at value1 stop;
if marketposition > 0 then
    exitlong next bar at entryprice(0)+20 limit;




進場後,20點停利
if condition then begin
    buy next bar at value1 stop;
    exitlong next bar at value1+20 limit
end;
if marketposition > 0 then
    exitlong next bar at entryprice(0)+20 limit;




進場後,20點停損(錯誤寫法)
if condition then
    buy next bar at value1 stop;
if marketposition > 0 then
    exitlong next bar at entryprice(0)-20 stop;




進場後,20點停損
if condition then begin
    buy next bar at value1 stop;
    buy next bar at close-20 stop;
end;
if marketposition > 0 then
    exitlong next bar at entryprice(0)-20 stop;

8 則留言:

  1. 達人 對於你Blog這篇教學文章,我只有兩個字形容"用心"!!
    真的沒話說,你的部落格還有大象及DK, 是我遇過對於在程式交易教學上花很多心思在範例的示範及分享!! 好心助人會有好報的. 祝您交易大順.

    回覆刪除
  2. 小達人的用心及好心是有目共睹的,另人感動!也希望小達人多多教導大伙們程式交易容易有的盲點,減少明明想法是對的,但做出來是錯的窘境。再次感謝!

    回覆刪除
  3. 整理得真好, Good! 推~
    倒數第三個程式碼 buy this bar at value1 stop;
    應該改成 next bar

    回覆刪除
  4. 被發現了筆誤的地方

    已經修正

    真不愧是 Dr. Mylays

    回覆刪除
  5. 達人大您好!

    想請教一個問題:

    TS 如果要讓在進場後 獲利50點就停利出場. 我知道可以用 entryprice來寫

    不知道TS是否有類似

    SetDollarTrailing
    setstoploss

    等指令 可以在觸價就出場?(在此先不討論是否準確或next bar的問題)

    回覆刪除
  6. 請問小達人大大,何以在停損時使用的出場指令都用buy 而不是 exitlong, 請賜教


    if condition then begin
      buy this bar on close;
      buy next bar at close-20 stop;
      ↑
    end;
    if marketposition > 0 then
      exitlong next bar at entryprice(0)-20 stop;



    if condition then begin
      buy next bar at value1 stop;
      buy next bar at close-20 stop;
      ↑
    end;
    if marketposition > 0 then
      exitlong next bar at entryprice(0)-20 stop;

    回覆刪除