再進場問題!?
小弟希望條件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:}
是哪裡寫錯或是什麼問題,或有比較好的寫法可以提供小弟參考一下 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)有無成立! 謝謝titl的提醒
我再重新用print檢查DT的變化
發現只要多單一進場,只有進場當下的K棒DT會等於1
下一根K棒後,DT就都等於3了,空單卻不會有種情形
可是當下根本不符合 marketposition = 0 和 condition3
(condition3和4差別只是收盤價大於或小於某一計算出的臨界值)
那到底為什麼會有這種情形呢
有人知道嗎{:4_161:} 我自己亂想的 ,你試試 ....
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的提醒
我再重新用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吧?否則就是有地方出錯了!
這是小弟的猜測! 回復 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 04:01 PM 編輯
會不會出場後有改道DT的值呢?
回復 7# lingin1204
依 mewmi 大的推測,
或許您可以在所有 if 之前先把 condition1 & condition3 的布林值印出是否二者都是 true,
然後再在 condition3 之前印出 marketposition & DT 的值看看. 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:} 回復 9# mewmi
另一種寫法是否也可考慮把這些 conditions 連在一起變成巢狀 if else if else ...,
因為都是建新倉彼此應該不會同時成立? 回復mewmi
因為都是建新倉彼此應該不會同時成立?
tedwang 發表於 11-9-7 10:24 PM http://coco-in.net/images/common/back.gif
彼此會不會同時成立.. 那要看看設計策略的人自己想怎麼做..
condition若是就不會同時成立.. 那跟要不要用if else if沒關係..
用了.. 好處就是寫不精準可能也沒問題.. 壞處就是.. 其實有問題卻沒發現.. {:4_120:} 先謝謝各位的回應
問題被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]