关于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 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容