交易策略和状态机转(一)

最近太忙,很久没有写文章了,早就想说说策略和状态机。

 很多朋友有很好的交易策略,但是在用程序化加以实现的时候,往往发现程序控制不能按照事先的思路执行,会遇到多开了仓,多平了仓,甚至一个合约不合理的多仓和空仓同时持有。其实,出现这些现象的根本原因是程序化交易不像主观交易,在出现突发情况的时候,可以适时的做出反应和处理。比如,我在满足一个策略条件的时候做开仓的操作,但是在此开仓价位上,或者当时的市场环境下,并不能一定成交,这时程序就要做撤单的操作;而撤单之后,是否做追加开仓,以达到最初计划的开仓仓位,也需要程序控制。因此,程序化对交易的控制,并不是在策略条件触发信号时,简单的进行报单操作,而是在报单之后,对于订单的一切可能发生的状态加以控制,这里,就要用到状态机。

 状态机就是状态转移图,通过引入状态机,把订单的所有状态加以区分,用程序把其在所有状态下的逻辑加以控制,就不会乱掉。

 在交易的过程中,我们对于订单施加的是动作:开仓报单,撤掉开仓报单,平仓报单,撤掉平仓报单;我们收到的是订单的状态反馈是施加动作的结果:未全部成交,已全部成交,以撤单(已部分成交或未成交)。因此,我们可以将对订单施加动作后,订单等待回馈的这个状态标识为状态。比如动作“开仓”标识一个状态-->“开仓ing”或者“正在开仓”。

下面举一个比较经典的单合约的简单例子,供读者参考:

 这样,在单合约的交易过程中,订单处于的任何状态都可以严格区分;程序也可以根据其不同的状态进行相应的处理。比如:在平仓超时撤单后,是以原价继续平,还是追加一定的滑价继续平,还是以对手的挂单价继续平,就可以根据你的策略进行控制。

当然,你也可以按照你的意图控制状态的流转,比如:上例图中,“撤开ing”收到回馈是撤单成功且有开仓成交后,状态不流转到“可平”而是选择一种方式继续按照之前的目标仓位继续以剩余仓位开仓,然后流转到“开仓ing”。

你可能感兴趣的:(交易策略和状态机转(一))