一个突破交易策略,当突破上轨时开多,下破下轨时开空。
实盘遇到一个问题:
场景:当前bar振幅较大,在1根bar中先下跌下破下轨,而后又上涨突破上轨。
在下破下轨时:系统触发开空操作,已实际成交。
而后突破上轨时:系统触发开多操作,已实际成交。
结果:同一根bar出现了两笔交易,并且都成交了。但是在信号图中只有后一笔交易。
问题:如何才能使第一笔交易成交后,第二笔交易不再触发?
有个思路是通过Global全局变量控制,在第一笔交易成交后马上改变全局变量值,这样第二笔交易就不会再触发了,但这样似乎又会触发信号闪烁机制。
求助:该如何解决这个问题?感谢!
你这个是因为第一个信号闪烁了的问题
首先,第一个原则是开仓bar不可以平仓,因为从历史bar的角度看,你无法从当前bar上判断是开仓条件先发生还是平仓条件先发生。解决办法就是降低周期级别以降低bar数据的波动范围,避免开平信号同事出现。
其次,实际两笔交易,但是信号只有一个,说明你策略业务逻辑里信号闪烁了,第一个信号消失了。解决办法要具体问题具体讨论,把信号固定住,不能因为后面tick的执行导致信号没了
1、我这里说的两笔交易都是开仓,没有平仓。
2、不是信号消失了,我用的是High和Low与上下轨进行比较,这些都是固定的。按照我的理解,应该是每次tick执行的时候,MarkPosition这个变量都会重置为0,这就导致了每次都会去执行比较开仓操作。第一次Low < 下轨,开仓,在后面继续运行时,High > 上轨,又开仓。不知道这么理解对不对?
这个问题是在实时交易出现的,不是历史回测
现在的问题是如何控制在一根bar只开仓一次?Global变量控制可行吗?
实际两笔交易,信号只有一个的问题我想我已经弄清楚了,因为代码是这样写的:
if(High > 上轨) //后触发,已成交
...
else if(Low < 下轨)//先触发,已成交
...
当High > 上轨时,就不会再执行Low < 下轨,因此图表只有1个信号,已最后的触发为准。所以核心问题在于,怎么控制同一个bar先交易了一笔后,后一笔就不再交易?
反向开仓前不是都要平仓的么....
如果你是用buy sell处理,那就一定要考虑历史bar上的运行结果和实盘运行结果是否一致,否则就是信号闪烁了
所以你的问题就是逻辑出错了
实际上,任何一个k线,最高价突破上轨,最低价突破下轨,如果不用更小的周期去观察,你是不可能知道到底是先突破上轨还是先突破下轨的。
所以你这个问题,我上面已经说过了,形同于开仓平仓信号在一根bar上一样,无法判断先后,所以不能这么写,解决思路一开始也说了,用更小的周期去判断先后,或者修改你的业务逻辑,不要在一根bar上同时出现既买也卖的情况
大哥,我说了是实时行情,不是回测啊!我不需要知道哪个先发生,现在的问题就是先发生的触发了交易,后发生的也触发了交易,我的问题就是怎样避免这个情况发生,先触发以后就不允许当前bar再交易,是否可以做到?
如果你不能做到实时行情和历史行情信号一致的情况下,那就是信号闪烁。这个很难理解吗?图表信号系统不可能抛开历史执行结果只看实时执行结果的。
另外一个帖子里已经详细说明过了,如果还是看不懂或者还执着于通过变量类型做控制变量来解决办法的,那我也没办法了。