亂世煙 發表於 11-9-7 13:16

再進場問題!?

小弟希望條件1成立時買進,條件2成立時賣出

如果買單中間有停損或停利出場後,則會在條件3成立時再進場做多,空單則是條件4

我寫成以下:
if condition1 and DT = 0 then begin   
DT = 1;
buy("buy") next bar at market;
end
else if condition2 and DT = 0 then begin
DT=2;
sellshort("sell") next bar at market;
end;

if marketposition = 0 and DT = 1 and condition3 then begin
buy next bar at market;
DT=3;
end;

if marketposition = 0 and DT = 2 and condition4 then begin
sellshort next bar at market;
DT=3;
end;

停損停利函數未列出

小弟的問題是如果空單出場後,符合條件4會再進場放空

然而若是多單出場後,符合條件3卻不會再進場

有人知道這是為什麼嗎{:4_161:}

是哪裡寫錯或是什麼問題,或有比較好的寫法可以提供小弟參考一下

titl 發表於 11-9-7 13:30

if marketposition = 0 and DT = 1 and condition3 then begin
buy next bar at market;
DT=3;
end;

if marketposition = 0 and DT = 2 and condition4 then begin
sellshort next bar at market;
DT=3;
end;

這兩段看起來是一樣的,如果條件4可執行,就應該沒有寫錯!
那就要確定conduction3是否有問題,或是執行時條件(marketposition = 0 and DT = 1 and condition3)有無成立!

亂世煙 發表於 11-9-7 13:58

謝謝titl的提醒

我再重新用print檢查DT的變化

發現只要多單一進場,只有進場當下的K棒DT會等於1

下一根K棒後,DT就都等於3了,空單卻不會有種情形

可是當下根本不符合 marketposition = 0 和 condition3
(condition3和4差別只是收盤價大於或小於某一計算出的臨界值)

那到底為什麼會有這種情形呢

有人知道嗎{:4_161:}

milumilu 發表於 11-9-7 14:34

我自己亂想的 ,你試試 ....

if condition1 and DT = 0 then begin   
DT = 1;
buy("buy") next bar at market;
end
else if condition2 and DT = 0 then begin
DT=2;
sellshort("sell") next bar at market;
end;
else

if marketposition = 0 and DT = 1 and condition3 then begin
buy next bar at market;
DT=3;
end;

if marketposition = 0 and DT = 2 and condition4 then begin
sellshort next bar at market;
DT=4;
end;

end;

titl 發表於 11-9-7 15:01

謝謝titl的提醒

我再重新用print檢查DT的變化

發現只要多單一進場,只有進場當下的K棒DT會等於1

下一根K ...
亂世煙 發表於 11-9-7 01:58 PM http://www.coco-in.net/images/common/back.gif

有Print出來的資料,可以看嗎?
聽你這樣描述怪怪的,因為看程式碼,DT要變成3時,第一個條件是沒有部位,第二個條件是已經多單或是空單進場後再出場。
照這樣及你的描述,應該是當根進場後,馬上就出場,下一根就變成條件3進場,所以才會變3吧?否則就是有地方出錯了!
這是小弟的猜測!

mewmi 發表於 11-9-7 15:26

回復 3# 亂世煙

看起來很正常..
在當根K棒.. condition1 和 condition3都成立時...

condition1 and DT = 0 這個會成立.. 所以 DT = 1...
因為buy next bar.. 所以此時依然 marketposition = 0...
這樣.. if marketposition = 0 and DT = 1 and condition3 就會成立了...
只是恰好你跑的商品有符合這樣的情況.. 也可以說你的策略可能沒有把condition1 與 condition3 作為無交集..

有個簡單的辦法可以避過這個問題.. 就是把後面在進場的code 移到前面去.. 就可以解了..
試試吧.. {:4_196:}

lingin1204 發表於 11-9-7 15:30

本帖最後由 lingin1204 於 11-9-7 04:01 PM 編輯

會不會出場後有改道DT的值呢?

tedwang 發表於 11-9-7 20:43

回復 7# lingin1204

依 mewmi 大的推測,
或許您可以在所有 if 之前先把 condition1 & condition3 的布林值印出是否二者都是 true,
然後再在 condition3 之前印出 marketposition & DT 的值看看.

mewmi 發表於 11-9-7 21:58

if marketposition = 0 and DT = 1 and condition3 then begin
buy next bar at market;
DT=3;
end;

if marketposition = 0 and DT = 2 and condition4 then begin
sellshort next bar at market;
DT=3;
end;

if condition1 and DT = 0 then begin   
DT = 1;
buy("buy") next bar at market;
end
else if condition2 and DT = 0 then begin
DT=2;
sellshort("sell") next bar at market;
end;

換成這樣應該就可以了.. 不過這不是個好方法..
最好還是要把condition間的相關與程序處理好.. {:4_196:}

tedwang 發表於 11-9-7 22:24

回復 9# mewmi

另一種寫法是否也可考慮把這些 conditions 連在一起變成巢狀 if else if else ...,
因為都是建新倉彼此應該不會同時成立?

mewmi 發表於 11-9-7 22:40

回復mewmi

因為都是建新倉彼此應該不會同時成立?
tedwang 發表於 11-9-7 10:24 PM http://coco-in.net/images/common/back.gif

彼此會不會同時成立.. 那要看看設計策略的人自己想怎麼做..
condition若是就不會同時成立.. 那跟要不要用if else if沒關係..
用了.. 好處就是寫不精準可能也沒問題.. 壞處就是.. 其實有問題卻沒發現.. {:4_120:}

亂世煙 發表於 11-9-8 09:57

先謝謝各位的回應

問題被mewmi大點出來了!

condition1成立時,DT馬上就會等於1,marketposition則會在next bar才會等於1

最大的問題是condition3和4計算的臨界值...

因為是當沖策略,所以我原本是寫成一開盤會把臨界值歸0

但偏偏我計算臨界值的方式是手上有單才會算,也就是也要符合marketposition大於或小於0

所以以多單的情況來說,condition1成立=>DT會等於1,marketposition還是等於0,臨界值不會計算,所以也等於0...

馬上就完全符合再進場條件了{:4_186:}

反之因臨界值等於0,所以空單就不會出現這情況了

最後我把多單的臨界值在一開盤改成99999就解決了

整個問題就是小弟思慮不周

謝謝各位熱情的回應!!有coco真好^^"
頁: [1]
查看完整版本: 再進場問題!?