各位社区大佬好,本人在研究策略的过程中遇到一个技术难题,想请教一下:
在大小周期结合的跨周期策略中,有没有办法判断当前小周期的bar相对于大周期bar的位置。例如,大周期选择日K,小周期选择1h,则一个大周期bar应该会对应 6 个小周期bar,在策略执行阶段(包括回测、实盘)怎么有效判断当前时间下,当前小周期bar对应大周期bar的第几根?是第1根、还是第2根、还是最后一根(第6根)?
除了固定的根据当前时间判断之外,有没有更灵活的动态判断方法?(因为大周期、小周期的时间周期选择也会随着回测做动态调整,比如可能将大周期换成1h,小周期换成10min,或者大周期日K,小周期换成5min等等。如果在代码里写死用时间做判断,每次回测时都需要在代码层面做不小改动)
DateTimeToBarIndex?
这个很通用吧
跟你确认下,是否使用的是TBQ3?如果使用的是TBQ,建议使用TBQ3。由于跨周期调用的未来函数问题,TBQ使用时,大周期要回溯1才能避免信号闪烁,你上述的想法,实现起来会大打折扣。
谢谢提醒,最开始用TBQ确实发现了跨周期回测带有未来函数问题,后来切换了TBQ3
当前小周期bar对应大周期的第几根?
大周期不就一根吗?
k线图是逐根执行的,这个在讲onbar事件域的时候应该说过了,回测不存在当前时间这个概念。
实盘的话,当前时间不就是最新的bar吗?也是一样的,可以做个计数器。
例如,放在onbaropen事件域,如果驱动的图层时间一致,可以重置计数器,然后开始做k线数量计数。建议用series类型较好
首先感谢您的回复!其实我想表达这个意思:大小周期处理过程中,先按大周期判断入场,如果满足了入场条件,再按小周期找最佳入场点,如果小周期内没有找到最佳入场点,则兜底按大周期的Bar入场。所以想在当前大周期Bar结束之前找到与这根Bar对应的最后一根小周期Bar。 或者如果我在data0执行开平仓与data1内执行开平仓 是否属于同一个图层?MarketPosition等图层持仓的判断能不能横跨不同周期数据?
这个思路处理起来其实比较困难。
因为很难判断小周期哪一根是最后一根bar。
打个比方,大周期5分钟,小周期1分钟,理论上小周期有五根。那如果最后一根,临时没交易,所以没k线,那怎么发信号呢?这个有可能是小概率事件,看你能不能容忍了
理解了,这样看确实很难动态识别小周期bar跟大周期bar的对应关系。 另外想追问一下,大、小周期的 MarketPosition 持仓状态值 能否共享?如果我在小周期内没有找到最佳入场点,是否可以在大周期的OnBarClose执行入场? 不过这里就存在一个大小周期持仓状态共享的问题,如果之前小周期已经开过仓了,那么大周期的OnBarClose中需要能够获取到之前小周期开仓的 MarketPosition 才能避免重复开仓
不同图层的marketposition是不共享的
执行data0.buy是不会影响data1.marketposition
你这个无非就是两个条件,第一个是大周期满足,并且小周期满足
第二个是大周期满足,小周期走完最后一个bar
第一个条件很简单就不说了
第二个条件那就是大周期满足,小周期在最后一根bar上运行onbarclose,这就还是回到之前的问题了,无法确认最后一根bar是否存在。
老师,这个问题我先暂时用小周期内固定判断当前时间戳的方式试着解决一下了。另外遇到个新问题可以再麻烦请教一下吗?
我想在策略中加入对当前交易账户的风险度的判断,如果超过一定风险度百分比(持仓保证金/动态权益),即使产生信号也不执行开仓动作了。
然后我在文档中找到了 Account-账户资金 结构体当中 risk 这个字段可能是我需要的,但是没找到有哪个全局函数可以获得当前交易账户的 Account 信息