COCO研究院

 找回密碼
 註冊
搜索
查看: 7355|回復: 11

再進場問題!?

[複製鏈接]
發表於 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卻不會再進場

有人知道這是為什麼嗎

是哪裡寫錯或是什麼問題,或有比較好的寫法可以提供小弟參考一下
發表於 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差別只是收盤價大於或小於某一計算出的臨界值)

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

有人知道嗎
發表於 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;
發表於 11-9-7 15:01 | 顯示全部樓層
謝謝titl的提醒

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

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

下一根K ...
亂世煙 發表於 11-9-7 01:58 PM


有Print出來的資料,可以看嗎?
聽你這樣描述怪怪的,因為看程式碼,DT要變成3時,第一個條件是沒有部位,第二個條件是已經多單或是空單進場後再出場。
照這樣及你的描述,應該是當根進場後,馬上就出場,下一根就變成條件3進場,所以才會變3吧?否則就是有地方出錯了!
這是小弟的猜測!
發表於 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 移到前面去.. 就可以解了..
試試吧..
發表於 11-9-7 15:30 | 顯示全部樓層
本帖最後由 lingin1204 於 11-9-7 04:01 PM 編輯

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



發表於 11-9-7 20:43 | 顯示全部樓層
回復 7# lingin1204

依 mewmi 大的推測,
或許您可以在所有 if 之前先把 condition1 & condition3 的布林值印出是否二者都是 true,
然後再在 condition3 之前印出 marketposition & DT 的值看看.
發表於 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間的相關與程序處理好..
發表於 11-9-7 22:24 | 顯示全部樓層
回復 9# mewmi

另一種寫法是否也可考慮把這些 conditions 連在一起變成巢狀 if else if else ...,
因為都是建新倉彼此應該不會同時成立?
發表於 11-9-7 22:40 | 顯示全部樓層
回復  mewmi

因為都是建新倉彼此應該不會同時成立?
tedwang 發表於 11-9-7 10:24 PM


彼此會不會同時成立.. 那要看看設計策略的人自己想怎麼做..
condition若是就不會同時成立.. 那跟要不要用if else if沒關係..
用了.. 好處就是寫不精準可能也沒問題.. 壞處就是.. 其實有問題卻沒發現..
 樓主| 發表於 11-9-8 09:57 | 顯示全部樓層
先謝謝各位的回應

問題被mewmi大點出來了!

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

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

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

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

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

馬上就完全符合再進場條件了

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

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

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

謝謝各位熱情的回應!!有coco真好^^"
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-24 15:13

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |