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