如何實現平倉Bar上即使滿足開倉條件也不再開倉?
作者:開拓者 TB 來源:cxh99.com 發布時間:2013年08月27日
- 咨詢內容:
本帖最后由 ll407489244 于 2013-8-1 07:23 編輯
假如我的程序在K1這根Bar上達到了平倉條件,已經平倉了,但是平倉后滿足開倉條件,我不希望平倉后的Bar再去開倉,如何實現?
開倉的時候,我會通過 if (0==MarketPosition) 來限制沒有倉位的時候才開倉,在K1上如果平倉了也滿足這個條件,但是我想再加個條件,就是K1上不能再開倉了,
我所知道的是:
有個函數叫做,BarsSinceExit,根據解釋來看,只有當MarketPosition = 0時,即沒有持倉的狀況下,該函數才有意義,否則返回0。在平倉Bar上為0。
如果我的條件改為:
if (0==MarketPosition && 0!=BarsSinceExit)
沒有倉位且不在平倉Bar上開倉,看起來是對的,但問題是,公式剛加載進來的時候,從左到右運行,最開始的時候,確實沒有倉位,但也從未有過開平倉操作,此時,BarsSinceExit的返回值是什么?我通過這個 0!=BarsSinceExit 的判斷,實踐中,我發現一直沒有開倉信號。。。
請問,我該怎么實現這個功能,還有其他的函數或者方法實現嗎。
只有模擬測試的時候才有這個問題,因為,我是先寫開倉條件、執行開倉、平倉條件、執行平倉,歷史測試時,平倉后不在K1上運行了就肯定不會再去判斷是否滿足開倉條件了。
我在歷史測試的時候,會去掉 0!=BarsSinceExit 的判斷,但是我得為模擬測試寫另一套代碼,我的這種做法是對的吧?
- TB技術人員:
為什么你要反過來寫呢,很奇怪。TB執行邏輯判斷不是從左到右來運行的嗎?正確的寫法不是應該是if (MarketPosition==0)這樣的?反過來寫難道執行的速度會更快嗎?對結果有沒有影響?我想管理員有必要科普一下哦。回到主題,如果你想平倉信號出現后,就算開倉滿足,也不開倉了,可以有很多方法,比如:if(開倉 && 平倉==false) 開倉;if(平倉) 平倉;,又或者是if(平倉){ 平倉;}else if(開倉){開倉;}。
- TB客服:
寫c++代碼寫習慣了,這樣子寫,不容易出錯,沒有其他影響。
MarketPosition==0容易寫成MarketPosition=0,在if的條件表達式里寫成后者了,每次必定是false。
而0==MarketPosition寫成0=MarketPosition,就會報錯。
您的第一種寫法,我基本上也就是這么寫的,我在 if (0==MarketPosition && 0!=BarsSinceExit) 這個if里面嵌套了if判斷是否達到開倉條件,問題就是 0!=BarsSinceExit ,沒有滿足我的需求,無法屏蔽當前Bar上平倉的情況。
第二種寫法不滿足我的需求,因為我想在某一跟Bar上開倉后還可以平倉,寫成要么開倉要么平倉的話,會造成模擬測試時在同一根Bar上開倉后無法平倉。