下面有代碼,[IntrabarOrderGeneration = True] 和[IntrabarOrderGeneration = Flase] 2種情況
問(wèn)Once在2種情況運(yùn)行時(shí)的差異?
[IntrabarOrderGeneration = True]
//[IntrabarOrderGeneration = Flase]
Variable:TabMe(" ? ? ? ? ? ?"), Dates("How To Use"),Times(""),DatesNow("How To Use"),TimesNow(""),zijin("");
Once Dates = ?DateToString( El_DateToDateTime(TradeDate) ) ;
Once Times = ?TimeToString( EL_TimeToDateTime_s(Q_Time_s) ) ;
DatesNow = ?DateToString( El_DateToDateTime(TradeDate) ) ;
TimesNow = ?TimeToString( EL_TimeToDateTime_s(Q_Time_s) ) ;
//zijin = NumToStr(GetRTAccountEquity("1998_2-122227(CNY)") ,0);
If LastBarOnChart_s ? Then Begin
Value10 = Text_New(Date,Time,High,
TabMe + "StartDateTime : " + Dates + " ?" + Times + Newline +
TabMe + "DateTime : " + DatesNow + " ?" + TimesNow + Newline
);
Value10 =Text_SetStyle(Value10,0,2);
Text_Delete(Value10);
End;
?
?
您的問(wèn)題涉及到兩個(gè)知識(shí)點(diǎn):once關(guān)鍵字的使用;變量的更新和計(jì)算。這兩個(gè)知識(shí)點(diǎn)對(duì)應(yīng)的帖子名稱如下(您可以在論壇進(jìn)行搜索即可:
once關(guān)鍵字限制其后的語(yǔ)句只執(zhí)行一次,OpenD、HighD、LowD和CloseD系列函數(shù)(第三章第2節(jié))。
下面以您的代碼(變量dates)舉例來(lái)說(shuō)明一下:
在開(kāi)啟bar內(nèi)模式下,每一根bar有很多筆tick(包括開(kāi)盤(pán)tick、bar內(nèi)tick和收盤(pán)tick),而每一筆tick都會(huì)計(jì)算一次,但是只會(huì)在收盤(pán)tick的計(jì)算時(shí),變量dates的值才會(huì)更新,才會(huì)更新到當(dāng)根bar上(在以后的bar上可以通過(guò)dates[N]進(jìn)行回溯訪問(wèn));而once是當(dāng)條件滿足時(shí)執(zhí)行后面的語(yǔ)句一次,而如果在開(kāi)盤(pán)tick或者bar內(nèi)tick下條件滿足,那么其實(shí)dates這個(gè)變量只是計(jì)算一次,并不會(huì)更新到當(dāng)根bar上,從而導(dǎo)致后續(xù)條件再次滿足時(shí)once后面的語(yǔ)句也不會(huì)執(zhí)行并且dates變量始終不能更新。
而未開(kāi)啟bar內(nèi)模式下,就很好理解了,因?yàn)榇a只會(huì)在收盤(pán)tick進(jìn)行計(jì)算,而收盤(pán)tick進(jìn)行計(jì)算時(shí),dates變量肯定是更新到當(dāng)根bar上的,也就是變量的計(jì)算和更新是一致的。
注意:以上討論暫時(shí)不考慮策略屬性中的重新計(jì)算選項(xiàng)帶來(lái)的影響。
?
?
在分鐘周期及其它時(shí)間周期下,每根bar的收盤(pán)tick需要等到下一根bar的開(kāi)盤(pán)tick來(lái)確認(rèn),請(qǐng)看一下帖子”This bar和next bar的區(qū)別“