一開始的程式如下:
vars: count(0);
if date <> date[1] then
count = 0;
if count = 0 and time > 900.00 and time < 1300.00 then begin
if (marketposition = 0 or close < entryprice(0)) and average(close, 10) cross over average(close, 20) then begin
buy ("b1") next bar at market;
end;
if (marketposition = 0 or close > entryprice(0)) and average(close, 10) cross under average(close, 20) then begin
sell ("s1") next bar at market;
end;
end;
if marketposition < 0 and average(close, 10) cross over average(close, 20) then begin
exitshort ("exs1") next bar at market;
count = 1;
end;
if marketposition > 0 and average(close, 10) cross under average(close, 20) then begin
exitlong ("exb1") next bar at market;
count = 1;
end;
if time = 1330.00 and marketposition <> 0 then begin
exitlong next bar at market;
exitshort next bar at market;
end;
setstoploss(8000);
簡單的運用了一個 count 來作為進出場的限制條件…當停損條件達到…就把 count 設為 1,所以停損條件成立後就不會再進場了…直到次日才會再進場。
程式的執行狀況如下:
如果看到這天很正常的在停損條件成立後沒有在進場了。
不過接下來就有問題了:
這是在 setstoploss(8000) 成立的出場,所以就沒辦法利用 count 來作限制了。
另外也為了解決直接反手的狀況…直接反手的情況要算出上一筆的賺賠得用 entryprice(0) - entryprice(1) 這又造成了不少的問題…得把程式寫的很複雜…所以這邊就提出一個比較簡單且能適用各種狀況的方式。
vars: count(0);
vars: mc(0), gp(0);
mc = marketposition * currentcontracts;
gp = netprofit;
if date <> date[1] then
count = 0;
if count = 0 and time > 900.00 and time < 1300.00 then begin
if (marketposition = 0 or close < entryprice(0)) and average(close, 10) cross over average(close, 20) then begin
buy ("b1") next bar at market;
end;
if (marketposition = 0 or close > entryprice(0)) and average(close, 10) cross under average(close, 20) then begin
sell ("s1") next bar at market;
end;
end;
if marketposition < 0 and average(close, 10) cross over average(close, 20) then begin
exitshort ("exs1") next bar at market;
count = 1;
end;
if marketposition > 0 and average(close, 10) cross under average(close, 20) then begin
exitlong ("exb1") next bar at market;
count = 1;
end;
if time = 1330.00 and marketposition <> 0 then begin
exitlong next bar at market;
exitshort next bar at market;
end;
if mc <> mc[1] and gp < gp[1] then
count = 1;
setstoploss(8000);
基本上程式碼沒多大的變動…可以看到我新增了二個變數…一個為 mc 一個為 gp
這兩個變數分別儲存了倉位的改變和 netprofit 的改變…透過這樣的方式來檢查上一次的進出場是否為獲利…如果為虧損的話…就直接把進場的 count 限制掉…就可以達到限制進場次數了。
感謝阿
回覆刪除逆向程式最需要的限制虧損次數拉
因為順項程式如果順利可能就不再進場
逆向程式因為賺少些所以進出次數就會多
另外ˇ
CDP 如何把AH,AL 標示在K線圖上? paint BAR 如何弄? 謝謝
我在HTS也是這樣寫
回覆刪除if time = 85000 then
no_order = 1
end if
if no_order = 1 then
if XXXXX......
..............
buy
..............
sell
..............
end if
if ........
exitlong .......
exitshort ......
no_order = 0
end if
endif
出場後就不在進場,一天只做一趟,結果盤中會再進場,但是盤中回補K棒資料之後,第二次進場的訊號就消失了,只有剩下第一次進出場的資料,一直查不到問題出在哪?
請教DK大
回覆刪除在HTS的 entryname和exitname在TS要改成什麼?
dylon: 不建議在最外面把一個 if 包起來...所以試試把最外層的 if no_order = 1 拿掉..
回覆刪除並在每個 if XXXX 加上 and no_order = 1
試試
另外就是 entryname 和 exitname ..TS 沒有..所以就如上一個回應一樣..用一個變數存了..
danelongg: 利用劃均線的方式就行了..應該不需要用到 paint bar 耶
回覆刪除謝謝DK大的建議,我在試試看...
回覆刪除請問大大
回覆刪除如果要想進場之後程式賺了100點
若如果回吐到只剩賺50點就立即出場
是這樣寫嗎
if marketposition = 1 and h > (entryprice(0) +100) then begin
buygo = entryprice(0) + 50 ;
end;
if marketposition = 1 then exitlong ("buygo") at buygo stop;
謝謝大大
皮皮小金剛:這樣可以..
回覆刪除作者已經移除這則留言。
回覆刪除DK大您好:
回覆刪除想請教一下如果我的策略是有反手的話,那要怎麼讓程式在損失達到一定金額後反手條件不進場呢?
反手程式碼如下
If marketposition = -1 and NetProfit >= netp - Netloss then begin
If Close>Average(close,20) then begin
exitshort("Short-Stop") next bar at market;
Buy("S-to-B") next bar at market;
end;
End;
DK大:
回覆刪除你好!想請問你一下!若我想要比較昨天的漲(跌)幅跟今天一開盤的點數作比較然後作出買(賣)動作,以下程式碼是否正確呢
假設昨天開盤到收盤為跌一百點,但今天一開盤就漲150點,則於一開盤就作買進動作!
value1=closed(1)-closed(60);
value2=closed(0)-closed(1);
absvalue3=value(value1)
absvalue4=value(value2)
if value4 > value2 then
buy next bar at market;
Alvin: 光看這樣看不太懂,你可以試著把出場和反手的條件分開寫。
回覆刪除咖啡:你試著按一下檢查程式碼應該就知道錯很多了。
回覆刪除DK大提到
回覆刪除另外就是 entryname 和 exitname ..TS 沒有..所以就如上一個回應一樣..用一個變數存了
請問那在TS上能不能給個範例
用變數把入場的名稱存下來
謝謝