资源加载中... loading...

策略和状态机

Author: 发明者量化-小小梦, Created: 2017-09-07 19:02:31, Updated:

策略和状态机

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

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

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

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

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

    img

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

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

  • 这里讲一讲双合约套利的状态机。套利涉及两个合约,也就是双腿开平的问题。相对于单合约的话,状态机就麻烦很多。

    不过就像前文所说,我们对订单施加动作,将委托回报或成交回报归纳为若干对订单施加动作后的回馈,在等待动作回馈时设置订单状态。按照这样的思路,我们把所有的动作罗列出来,然后将俩个合约的动作加以组合,然后再加上ing,就把所有状态罗列出来了。

    对合约施加的动作:开,平,撤,等。“等”是由于一腿持仓之后,按照套利的原则,另一腿必须追平。因此率先建立好的一腿,必须等待第二腿也建立好相反的持仓,构成套利组合。

    那么,双合约的订单状态就包含于下面的表格中:

    img

    这样,根据对订单施加动作后的回馈,就可以构成你所需要的状态机。下图是考虑开仓构建套利组合时的状态机,供读者参考:

    img

    平掉套利组合的逻辑和状态流转基本和开仓构建一致,这里就不再赘述。

转载自 ronalgao的博客


More