您现在的位置:程序化交易>> 期货公式>> (MC)multicharts>> MC知识>>正文内容

关于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  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容