分享

量化投资

 taozl 2022-09-23 发布于安徽

第十四章:计算脚本的驱动因素

  信号脚本计算的驱动因素有如下几种方式,通常的方式是第一种方式,即tick驱动的计算:开启bar内模式下,信号脚本是基于每笔tick进行计算,包括开盘tick、bar内tick、收盘tick;而未开启bar内模式,信号脚本是基于收盘tick或者开盘tick进行计算。

  除了tick驱动的计算,信号脚本还可以基于鼠标点击、关键字recalclastbarafter、经纪商部位变化、策略部位变化进行计算,但是需要都需要进行额外的代码处理或者特别的设置,这里需要注意的是,除了tick驱动的计算外,其它计算方式不能用于回测中。

1.  当新的bar/tick出现时

  我们知道一根bar由一笔开盘tick、若干笔bar内tick、一笔收盘tick组成,而开盘tick、bar内tick都是从交易所接收的,只有收盘tick是MC底层产生的;在开启bar内模式下,信号脚本会基于每笔tick执行一次计算。

  在未开启bar内模式下,信号脚本基于每根bar只会计算一次,或者基于开盘tick进行计算,或者基于收盘tick进行计算;是基于开盘tick还是收盘tick是基于信号脚本的代码中是否含有Open next bar(默认)、Date next bar、Time next bar、DateTime next bar、Time_s next bar这5个语句之一,也就是引用下一根bar的数据;当信号脚本中含有引用下一根bar数据的语句时(至少含有5个语句之一),信号脚本会基于下一根bar的开盘tick执行计算;当信号脚本中不含有引用下一根bar数据的语句时,信号脚本会基于当根bar的收盘tick执行计算。(“Set系列关键字”这篇帖子中也提到引用下一根bar数据的语句)。

  Bar内模式与非bar内模式的区别之一就是是否基于bar内tick执行信号计算,这个从表面意思上也可以意会。

2. 鼠标在图表上点击

  当在信号脚本中加入语句“[processmouseevents=true]”时,我们可以用鼠标在图表上进行点击,点击之后,信号脚本就会基于这个点击的操作进行计算,每点击一次信号就执行一次计算,每次计算都是基于最新的bar最新的行情执行计算;可以用鼠标左键点击图表执行计算,也可以使用鼠标右键点击图表执行计算。

3. Recalclastbarafter

  信号代码中若出现“recalclastbarafter(20);”这个语句,那么当信号脚本超过20秒没有执行计算时,那么信号脚本就会执行一次计算;“recalclastbarafter(N);”,关键字recalclastbarafter后面的参数N是以秒为单位的,N需要自行设置,可以是整数也可以是小数,这个语句的作用就是当信号脚本超过N秒没有执行计算,该语句就会促使信号脚本执行一次计算;举例,当交易所收盘后,没有tick行情驱动信号执行计算并且没有其它因素驱动信号执行计算,那么信号脚本会每隔N秒执行一次计算。

4. 经纪商部位变化和策略部分变化

  关于经纪商部位和策略部位这两个概念,可以在帖子“图表部位、策略部位、经纪商部位”中学习一下;当经纪商部位变化或者策略部分变化时,若需要让信号脚本执行相应的计算,我们需要在“策略属性”-“自动交易”-“重新计算”中进行设置一下,如下图所示:

  图中圈出来的地方,有两个选项:当勾选“市场部位变动”时,那么当委托单在交易所实际成交了,也就是经纪商部位变动了,那么信号就会基于经纪商部位的变动执行一次计算;当勾选“委托单成交”时,那么当策略部位变动了,那么信号就会基于策略部位的变动执行一次计算。

5. 关键字getappinfo

  关键字getappinfo的用法,在这里并不打算系统阐述,该关键字后面可以有各种参数,我们只里只介绍参数aicalcreason的用法;“getappinfo(aicalcreason);”返回信号脚本执行计算的原因,上面我们已经介绍了信号脚本执行计算的各种驱动因素,也就是各种原因,每种原因都会对应“getappinfo(aicalcreason);”的一个返回值:

l  当信号脚本基于tick驱动执行计算时,“value1=getappinfo(aicalcreason);”语句中value1等于0,也就是getappinfo(aicalcreason)返回的值是0

l  当信号脚本基于鼠标在图表上左击而执行计算时,“value1=getappinfo(aicalcreason);”语句中value1等于1,也就是getappinfo(aicalcreason)返回的值是1

l  当信号脚本基于鼠标在图表上右击而执行计算时,“value1=getappinfo(aicalcreason);”语句中value1等于2,也就是getappinfo(aicalcreason)返回的值是2

l  当信号脚本基于关键字recalclastbarafter而执行计算时,“value1=getappinfo(aicalcreason);”语句中value1等于3,也就是getappinfo(aicalcreason)返回的值是3

l  当信号脚本基于经纪商部位变动而执行计算时,“value1=getappinfo(aicalcreason);”语句中value1等于4,也就是getappinfo(aicalcreason)返回的值是4

l  当信号脚本基于策略部位变动而执行计算时,“value1=getappinfo(aicalcreason);”语句中value1等于5,也就是getappinfo(aicalcreason)返回的值是5

通过getappinfo(aicalcreason)的使用,我们可以在信号脚本中对当前信号计算的驱动因素进行识别和判断,并且信号在后续的计算中执行相应的逻辑,例如,当getappinfo(aicalcreason)返回值为4时,在信号中就可以判断当前的委托单在交易所实际成交了。

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多