另外也可以限制成只要有一筆是獲利當天就停止交易…同樣也是利用變數來做控制…在出場的時候檢查出場點(通常是 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 就是最大的虧損容忍值了…當然可以隨著自己的口袋做調整…
水喔~
回覆刪除這邊很早就有了~XD
回覆刪除http://skyelephant.blogspot.com/2009/01/blog-post_16.html
這要考慮回測時設定的成本。
EX:停損20點,4000NT,若是回測手續費設0,當天連虧3次後,超過10000NT。就不會進場。不過入若是同策略,回測手續費設8000,那虧一次就超過(4000+8000大於10000)。
我們想的竟然是差不多的東西..XD
回覆刪除請問DK大
回覆刪除若要在分線寫,"今日開盤高於昨日高點",要怎麼寫?(HTS)
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
請問大大
回覆刪除如果我要寫一各停損的不知道怎麼寫呢
例如我要寫一各MA交叉進場之後
以這根K線為基準
往前推10根K線的最低點當作停損點
要怎麼寫呢
謝謝大大
大概是這樣…
回覆刪除if ma cross then begin
value1 = lowest(low[1], 10);
end;
謝謝大大
回覆刪除請教DK大, 如果於當沖交易且每天只交易一次的交易模式中, 當出現連續虧損二次以上, 在下次的交易便停止交易, 直到出現獲利才進場. 這樣的程式該如何寫?
回覆刪除很感謝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 ;
老師你好~請問我想多空交替進場(一次多一次空交替進場)要怎麼寫呢?我用hts~感謝
回覆刪除