關于Once問題在[IntrabarOrderGeneration = True 或 Flase]運行機制問題? [MC]
-
MC用戶求助:
下面有代碼,[IntrabarOrderGeneration = True] 和[IntrabarOrderGeneration = Flase] 2種情況
問Once在2種情況運行時的差異?
[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;
?
?
-
MC回復討論一:
您的問題涉及到兩個知識點:once關鍵字的使用;變量的更新和計算。這兩個知識點對應的帖子名稱如下(您可以在論壇進行搜索即可:
once關鍵字限制其后的語句只執行一次,OpenD、HighD、LowD和CloseD系列函數(第三章第2節)。
下面以您的代碼(變量dates)舉例來說明一下:
在開啟bar內模式下,每一根bar有很多筆tick(包括開盤tick、bar內tick和收盤tick),而每一筆tick都會計算一次,但是只會在收盤tick的計算時,變量dates的值才會更新,才會更新到當根bar上(在以后的bar上可以通過dates[N]進行回溯訪問);而once是當條件滿足時執行后面的語句一次,而如果在開盤tick或者bar內tick下條件滿足,那么其實dates這個變量只是計算一次,并不會更新到當根bar上,從而導致后續條件再次滿足時once后面的語句也不會執行并且dates變量始終不能更新。
而未開啟bar內模式下,就很好理解了,因為代碼只會在收盤tick進行計算,而收盤tick進行計算時,dates變量肯定是更新到當根bar上的,也就是變量的計算和更新是一致的。
注意:以上討論暫時不考慮策略屬性中的重新計算選項帶來的影響。
?
?
-
MC回復討論二:
在分鐘周期及其它時間周期下,每根bar的收盤tick需要等到下一根bar的開盤tick來確認,請看一下帖子”This bar和next bar的區別“
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 511411198 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容