量化投资_EasyLanguage/PowerLanguage教学课程__【第二篇专题】__【第九章This Bar和Next Bar区别(转)】

第八章:This Bar 和 Next Bar区别(转)

原文:https://forum.multicharts.cn/forum/cat/1/thread/11

  关于this bar和next bar的区别会涉及到barstatus关键字的用法,所以:

  第一节介绍barstatus关键字

  第二节介绍MC是如何判断当根bar结束

  第三、四节会分未开启bar、开启bar、回测及开启自动交易四种情况分别进行讨论,在此我们以”buy this bar at close;”和”buy next bar at market;”这两个委托语句来阐述this bar和next bar用法的区别,其它情况逻辑完全一致,所以不再阐述。

第一节:barstatus关键字

  每根bar都是由一定数量的tick组成的(一个tick表示一笔成交,每笔tick只有一个价格),分为开盘tickbartick和收盘tick

  开盘tick就是形成bar的第一笔tick

  收盘tick就是形成bar的最后一笔tick

  bartick就是在bar的形成过程中产生的tick

  而关键字barstatus用于返回当根bar中的tick的状态

  barstatus返回为0时表示当前tick是开盘tick

  barstatus返回为1时表示当前tickbartick

  barstatus返回为2时表示当前tick是收盘tick;除此之外

  barstatus还会返回-1,这种情况会在调用子图时出现,关于barstatus返回-1更深入的介绍将在后续帖子中阐述。

第二节:判断当根bar结束

  MC对于当根bar收盘的识别其实是以下一根bar的第一笔tick被接收为标志,也就是说,下一根bar第一笔tick有两个作用:它即表示当根bar的结束,也表示下一根bar的开始

  这一点可以在开启bar内模式下(可选用不活跃合约测试),使用语句”print(“ currentbar=”,currentbar,” barstatus=”,barstatus);”

  进行测试,当接收到下一根bar第一笔tick时,会计算两次

  第一次计算输出当根bar的编号及收盘tick的状态(既barStatus=2,表示收盘)。

  第二次计算输出下一根bar的编号及开盘tick的状态(即barStatus=0,表示开盘)。

  若一直未收到下一根bar的第一笔tick怎么办,是否当根bar就永远不识别为结束?并不是这样,MC会以5分钟为限,若5分钟内接收不到下一根bar的第一笔tick,那么MC也会认识当根bar结束,并且会信号脚本会计算一次;这就是为什么使用”buy this bar at close;”委托语句在交易时段最后一根bar上满足条件时并且发送委托单,为什么结果5分钟后收到委托拒绝的提示非交易时间”,那是因为5分钟后,MC识别当根bar已经结束,此时信号脚本会计算一次并且发送委托单,由于是非交易时间,所以会被拒绝。

  由于当根bar的结束是以下一根bar的开盘tick为判断,所以收盘tick并不是真实的从交易所接收的tick,收盘tick没有成交量,收盘tick的价格取bar内最后一笔tick的价格(即最后一笔bar内tick的价格),开盘tick和bar内tick都是从交易所接收的真实的tick(即有真实的价格,也有真实的成交量);关于这点,可以在开启bar模式,精细回测或者自动交易时测试通过print语句将相关信息输出进行测试,”print("currentbar=",currentbar," close=",close," barstatus=",barstatus," ticks=",ticks);“。

第二节:未开启bar内模式

  未开启bar内模式情况下,信号脚本(交易策略是由若干个信号组成的,也可以由一个信号脚本组成)会在当根bar结束的时候计算一次程序,当根bar结束的标志是以接收到下一根bar的第一笔tick;由于只会计算一次,所以使用语句”print(“ currentbar=”,currentbar,” barstatus=”,barstatus);”测试时,会输出当根bar的编号及收盘tick的状态(barStatus=2)。

1、  回测

  对于委托语句buy this bar at close;”,信号脚本会在当根bar收盘时计算一次程序,若条件满足时会以当根bar的收盘价成交,所以在图表上回测时会看到进场位置标记在当根bar下方,而不是下一根bar的下方。

  对于委托语句buy next bar at market;”,信号脚本会在当根bar收盘时计算一次程序,若条件满足时会以下一根bar的开盘价(即开盘tick的价格)成交,所以在图表上回测时会看到进场位置标记在下一根bar的下方,而不是当根bar的下方。

  对于两者在未开启bar并且回测时的区别,由于都是在当根bar收盘时计算(即收盘tick),然后由于成交的价格一个取的是当根bar的收盘tick的价格、另一个取的是下一根bar的开盘tick的价格导致在图表上显示的位置不一致。

2、  开启自动交易

  开启自动交易时,无论是AA模式还是SA模式,两者实际的发单效果是完全一样的,没有逻辑上的差异;信号脚本都在在收盘tick时计算一次程序,当条件满足时即发送市价单,而最终市价单会以什么价格成交,这个是由市场决定的,并不会因为this bar和next bar的区别而影响。

  AA模式时,图表上进场出场部位的显示情况,其实和回测时的部位显示情况一致(对于这一点,只是初步测试,并没有完全测试),所以”buy this bar at close;”的进场位置会在当根bar上,图表上显示的成交价格是当根bar的收盘价,而”buy next bar at market;”的进场位置会在下一根bar上,图表上显示的成交价格是下一根bar的开盘价

  SA模式时,图表上进场出场部位的显示情况是以实际成交情况会依据,所以”buy this bar at close;”和”buy next bar at market;”的进场位置会在下一根bar的下方,图表上显示的成交价格也是实际的成交价格。

第四节:开启Bar内模式

  开启bar内模式,信号脚本会基于每笔tick计算一次(基于开盘tickbartick、收盘tick进行计算)。若当根bar实际由120tick组成,那么通过”print(“currentbar=”,currentbar,” barstatus=”,barstatus);”测试时,会发现当根bar计算了121最后一次是基于当根bar的收盘tick进行的计算。所以对于某些会涉及统计成交笔数、成交量等信息进行委托下单时,需要通过barstatus=2将收盘tick的信息过滤掉。

1、  精细回测(注意开启bar内模式时回测时,需要选择精细回测

  对于委托语句buy this bar at close;”,即使在开启bar内的情况,也会在信号脚本基于收盘tick计算时,条件满足才会发送委托单;所以”buy this bar at close;”并不会在bar内发送委托单。精细回测时,”buy this bar at close;”会在当根bar收盘(基于收盘tick的计算)时并且条件满足时,以当根bar的收盘价成交,也就是在图表上当根bar下方显示进场标记,在图表上显示的进场价格是当根bar的收盘价。

  对于委托语句buy next bar at market;”,会分两种情况。

  第一种是信号脚本基于开盘tick和bar内tick计算时,委托语句”buy next bar at market;”会以当笔tick的价格成交,进场位置会在图表上的当根bar下方显示,成交价格是当根bar的当笔tick的价格,例如,若信号脚本在开盘tick(即barstatus=0时)时计算时,进场价格取开盘tick的价格;

  第二种是信号脚本基于收盘tick计算时,委托语句”buy next bar at market;”会以下一根bar的开盘tick的价格成交,进场位置会在图表上的下一根bar的下方显示,成交价格是下一根bar的开盘tick的价格。

2、  开启自动交易

  对于委托语句”buy this bar at close;”,信号脚本的计算基于收盘tick计算时,会发送市价委托单,由于是否开启bar内模式对this bar的发送委托单没有影响,所以会和未开启bar模式下的自动交易一致(包括图表显示),请参考上面相关内容。

  对于委托语句buy next bar at market;”,信号脚本在基于每笔tick计算(开盘tick、bar内tick和收盘tick)时都会发送市价委托单;若当根bar实际上由33笔tick组成,那么委托语句”buy next bar at market;”会发送34笔市价单,因为信号脚本在基于收盘tick计算时也会发送委托单。

  对于两者发送的委托单最终的成交价格受市场影响,并不因为this bar和next bar的区别而影响。SA模式下,两者在图表上显示的位置及价格依据实际成交情况;AA模式下,两者在图表上显示的位置及价格和上面的精细回测一致(只是初步测试,并没有完全测试),并不依据实际成交情况。

【附图】

=================================================

之前的文章感谢大家的转载,希望转载时请注明出处,本人转自其它网站的图表一并感谢,谢谢~!

https://www.cnblogs.com/noah0532/

原文地址:https://www.cnblogs.com/noah0532/p/13717550.html