開拓者while循環(huán)時,還能接收行情嗎
作者:開拓者 TB 來源:cxh99.com 發(fā)布時間:2012年10月29日
- 咨詢內容: 平倉反手的交易,在平倉發(fā)出委托至成交之間,需要一個延時等待成交的循環(huán)語句,以保證有足夠的資金開新倉,問題是,在循環(huán)期間,是否還能接收新的行情信息。我的理解是:在循環(huán)期間,相當于處理一個tick的程序還沒有運行完,按TB的運行機制,似乎不會處理新的tick信息。
Params
Vars
Numeric startime;
Begin
If (Close < Open)
{
sell(1,Close);
}
if(買條件)
{
startime = CurrentTime;
while(A_buyposition != 0)
{
if(Low == Q_LowerLimit)
Continue;//跌停板,難成交,繼續(xù)等待 問題:如果跌停板已打開,是否能收到新的行情信息呢?收不到并且發(fā)出的平倉委托本身有問題,這里就變成死循環(huán)了。
if(CurrentTime - startime > 0.000005)
break; //不是跌停板,而且超過5秒,還沒成交,不等了。
}
Buy(1,close);
}
End
- TB技術人員: 我覺得也不會,而且tb應該是單線程執(zhí)行的,沒測試過,不過你可以用系統(tǒng)調試一下看看,里面加一個FileAppend然后監(jiān)控一下是那個線程在做這個fileappend(通過系統(tǒng)監(jiān)控),什么時候在輸出什么log就可以知道了啊。
- TB客服: startime = CurrentTime 這一句永遠都在 if(CurrentTime - startime > 0.000005)這個之前執(zhí)行,邏輯明顯有問題。。。
- 網友回復: 回2樓:我沒開模擬,聽說模擬服務器不好,直接開的實盤,測試起來不是很方便。
回3樓:在執(zhí)行while循環(huán)時,如果沒有中斷,應該不會去執(zhí)行while之前的語句的,也就是說,如果while條件一直存在(死循環(huán)),那么,CurrentTime(電腦時間)會一直在走,而startime卻停留在初始賦值的數值。
- 網友回復: 本帖最后由 niubaisui 于 2012-1-12 19:23 編輯
我現在最擔心的是,在執(zhí)行while循環(huán)時,帳戶持倉發(fā)生了變化(A_buyposition 由大于0變成了1),卻沒能收到,就真成了死循環(huán)了。
另外,我需要這樣子延時,而不是采用tick延時,是因為每個tick都會把程序執(zhí)行一遍,導致其它變量改變不好寫。
|