: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

This bar和next bar的区别[MC编程]

This bar和next bar的区别[MC编程]

(原创:Alex)

    关于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只有一个价格),分为开盘tick、bar内tick和收盘tick,开盘tick就是形成bar的第一笔tick,收盘tick就是形成bar的最后一笔tick,bar内tick就是在bar的形成过程中产生的tick。而关键字barstatus用于返回当根bar中的tick的状态,barstatus返回为0时表示当前tick是开盘tick;barstatus返回为1时表示当前tick是bar内tick;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的状态(即2),第二次计算输出下一根bar的编号及开盘tick的状态(即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的状态(即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计算一次(基于开盘tick、bar内tick、收盘tick进行计算)。若当根bar实际由120笔tick组成,那么通过”print(“currentbar=”,currentbar,” barstatus=”,barstatus);”测试时,会发现当根bar计算了121次,最后一次是基于当根bar的收盘tick进行的计算。所以对于某些会涉及统计成交笔数、成交量等信息进行委托下单时,需要通过barstatus=2将收盘tick的信息过滤掉。

1、  精细回测

对于委托语句”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模式下,两者在图表上显示的位置及价格和上面的精细回测一致(只是初步测试,并没有完全测试),并不依据实际成交情况。


论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表