[TS懶人包] [保險服務]

2009年4月7日 星期二

程式交易 - 運用虧損限制進出場次數

在做當沖交易的時候…可以有幾種限制進出場次數的方式…首先很簡單的就是用次數作限制…可以限制程式一天只交易一次、二次等等…只要運用一個變數…每日歸零…並且在進場後每次加上 1 即可達成…在進場時先檢查這個變數有沒有超過自己預設的每日交易次數。


另外也可以限制成只要有一筆是獲利當天就停止交易…同樣也是利用變數來做控制…在出場的時候檢查出場點(通常是 Close 價)和進場點(可利用 Entryprice(0)) 來檢查該筆是獲利或虧損…如果是獲利可把變數設定成某個值…同樣的在進場前檢查這個變數值即可。

當然還有很多種限制進出場次數的方式…這邊要提到的是利用一個最大的虧損忍受值來做單。也就是假設一天最大的忍受程度是虧損一萬塊來說…盤中進進出出、賺賺賠賠的情況下…只要達到虧損大於一萬就不再進場做單。

這邊必需要用到的是 NetProfit 這個函式。

NetProfit 是程式在回測時每筆的賺賠結果…利用下列程式碼:

print(date, time, marketposition, netprofit);

可以得到如下的結果:

1090112.00 1245.00 -1.00 71400.00
1090112.00 1250.00 -1.00 71400.00
1090112.00 1255.00 -1.00 71400.00
1090112.00 1300.00 -1.00 71400.00
1090112.00 1305.00 0.00 67200.00
1090112.00 1310.00 0.00 67200.00
1090112.00 1315.00 0.00 67200.00

可以看到在程式平倉後…NetProfit 就跟著減少了…表示這一筆單是虧損的。

既然有這個函式可以運用…那如何達到虧損一萬塊就不再進場:


vars:netp(0);
if date[0] <> date[1] then begin
netp = netprofit;
end;


在這邊… netp 這個變數是在換日時…先抓取目前的 NetProfit…接著就可以利用 netp 的數值和目前的 NetProfit 做比較了…進場前的限制大概可以寫成:


if NetProfit >= netp - 10000 then begin
…進場條件…
end;


10000 就是最大的虧損容忍值了…當然可以隨著自己的口袋做調整…

10 則留言:

  1. 這邊很早就有了~XD
    http://skyelephant.blogspot.com/2009/01/blog-post_16.html

    這要考慮回測時設定的成本。

    EX:停損20點,4000NT,若是回測手續費設0,當天連虧3次後,超過10000NT。就不會進場。不過入若是同策略,回測手續費設8000,那虧一次就超過(4000+8000大於10000)。

    回覆刪除
  2. 我們想的竟然是差不多的東西..XD

    回覆刪除
  3. 請問DK大
    若要在分線寫,"今日開盤高於昨日高點",要怎麼寫?(HTS)

    回覆刪除
  4. vars:openOfD0(0), closeOfD1(0)
    array:OoD0[84](-1), CoD1[84](-1)

    openOfD0 = openOfD(0, OoD0)
    closeOfD1 = closeOfD(1, CoD1)

    if openOfD0 > closeOfD1 then
    xxxxxx
    end if

    回覆刪除
  5. 請問大大
    如果我要寫一各停損的不知道怎麼寫呢
    例如我要寫一各MA交叉進場之後
    以這根K線為基準
    往前推10根K線的最低點當作停損點
    要怎麼寫呢
    謝謝大大

    回覆刪除
  6. 大概是這樣…
    if ma cross then begin
    value1 = lowest(low[1], 10);
    end;

    回覆刪除
  7. 請教DK大, 如果於當沖交易且每天只交易一次的交易模式中, 當出現連續虧損二次以上, 在下次的交易便停止交易, 直到出現獲利才進場. 這樣的程式該如何寫?

    回覆刪除
  8. 很感謝D.K.之前的指導,剛剛我發現MC內有個函數稍微改一下就可以用在單日獲利一筆不再進場,不知道TS能不能用,在此貼出來分享給大家

    函數名稱:TEST

    inputs: TargetDate_YYYMMDD( numericsimple ) ;

    variables: var0( 0 ) ;

    var0 = 0 ;

    for Value1 = 0 to 10
    begin
    condition1 = EntryDate( Value1 ) = TargetDate_YYYMMDD and marketposition=0 and PositionProfit( Value1 ) >= 0 ;
    if condition1 then
    var0 = var0 + 1 ;
    end ;

    TEST = var0 ;

    回覆刪除

請留下您的大名…匿名者恕不回應…

Related Posts Plugin for WordPress, Blogger...