這邊的例子是進場後設 20 點為停損點…當獲利大於 50 點時…將停損移動到買進價上 20 點。
vars:exitCount(0), mc(0);
if date <> date[1] then
exitCount = 0;
mc = marketposition * currentcontracts;
if marketposition > 0 then
exitlong next bar at entryprice(0) - 20 stop;
if marketposition < 0 then
exitshort next bar at entryprice(0) + 20 stop;
if marketposition > 0 and high > entryprice(0) + 50 then
exitCount = 1;
if marketposition < 0 and low < entryprice(0) - 50 then
exitCount = 1;
if marketposition > 0 and exitCount = 1 then
exitlong next bar at entryprice(0) + 20 stop;
if marketposition < 0 and exitCount = 1 then
exitshort next bar at entryprice(0) - 20 stop;
if mc <> mc[1] then
exitCount = 0;
這個程式裡面用到了兩個變數…一個是 exitCount 另一個是 mc,exitCount 的作用是拿來記錄目前是否有獲利大於 50 點…當有獲利大於 50 點的時候就把這個變數更改為 1,另一個 mc 變數則是拿來記錄目前的倉位。
基本上我自己在寫程式的時候有很多變數是很常會運用到的…首先就是 mc ,這個變數可以記錄倉位的變化,直接使用 marketposition 只可以知道目前的倉位…但是沒辦法知道上一根的倉位是怎麼樣。所以就利用一個變數來記錄。
接下來就是很簡單的出場語法了…有單的時候就是在進場價虧損 20 點的時候觸價出場。如果有單的時候而且 exitCount = 1 就在進場價獲利 20 點的時候出場。
提供給大家作參考…也很抱歉在校稿的時候乎略了這一部份。
D.K.大大您好:
回覆刪除我又來打擾你了,上次k棒量的問題還是沒有完全解決.可否給我您的email;我把相關圖片寄過去給你看一下.
我的email: s60.z523@msa.hinet.net
(因為怕說明的不清楚.)
多有打擾請見諒!!
謝謝~
簡略說明問題如下:
在Chart的k棒下面增加一個量的柱狀圖
但顯示的量跟劵商不符
按滑鼠右鍵
發現參數裡面有O,H,L,C,U,D,volume
而U=volume,但實際的量應該是 U+D
口數的量volume也該是等於 U+D
該如何解決呢?
(看了三天的omega help還是找不到辦法)
Paul: Email 的話在留言版下方就有了。我自己的資料裡面..D 的數值都是 0 就是了。
回覆刪除新手有個問題類似移動停損點,被困住好幾天,想請教D.K.,您這個例子只有寫出場,但我的策略如果用這個方法會衝突到我的進場策略;作多為例,我的狀況點位A>B>C,A為日線固定不變點位,B與C為60分線點位,會隨著下一K棒而變;close>=B則進場,若close<=C則stop出場,若往上突破A+20點以上條件達到,且如果再回跌觸到A就stop出場。現在我遇到的問題是回跌觸到A出場之後,本應不再進場,但卻出現next bar又馬上在開盤價進場,猜測是因為滿足A出場點條件同時又滿足了B點位的進場條件。不好意思麻煩D.K.,有買您的著作,雖想參加集訓營但目前實力及口袋都還不夠深,希望您可以幫個忙可否解決這個困難的問題,感謝~感謝~
回覆刪除J.I.: 這個問題我想你需要在進場的條件裡面去限制了..如果你的寫法是 next bar at market 的話..那應該是寫成
回覆刪除if close[1] < B and close > B then
buy next bar at market;
這樣就不會因為出場時同時滿足 close > B 又再進場..
如果是用 stop 進場的話..可能要用變數去記錄目前的狀況..
if markeptosition > 0 then
count = 1;
if count = 0 then
buy next bar at B stop;
大概會類似這樣。
感謝D.K.!!
回覆刪除剛剛我自己解出來了
不過您的方式很值得參考~
D.K大大您好
回覆刪除ts是否可以在程式中寫
只能在每日9:00以前和13:00以後就算有訊號都不出現也不進場
就是每日都是平倉不留倉
以利ts資料回測
感謝大大
另外若遇到結算時又該如何處理
感謝
進場的時候加上時間的限制就行囉..
回覆刪除if time > 900 and time < 1300 then
buy next bar at market;
end if
之類的..
每天收盤前記得出場,結算的話就是把出場的時間提早就行了。
DK大,
回覆刪除如果盤中遇到快市(例如當根K線的open及close差距超過0.6%)就不交易, 是否這樣寫就可以. if 100*(o-c)c>0.6 then...
Ken
DK大您好,我有買TS程式交易全攻略一書,書中p.296就是上面提到的移動停損,想跟您請教一下就是假設我今天收盤價才進場作多,停損假設設進場價往下20點,這樣的話明天到停損並不會出場耶,因為明天才會是marketposition>0並且出場nextbar at 停損價;換句話說停損價出場無法設在this bar(驗證時不過),不曉得有什麼寫法可以解決這個問題呢?不然的話明天就算到停損價也不會出場,最快後天才會出場,謝謝囉
回覆刪除可以把出場和進場寫在一起。
回覆刪除大概會像這樣:
if xxx then begin
buy this bar at close;
exitlong next bar at close - 20 stop;
end;