【策略】第十七期:CTP接口-GridStategy策略逻辑开发实践
对于一个Grid-Strategy在CTP接口中的实现,有对我们团队关注的朋友问到开发的过程是怎么样的, 我们从一个具象的例子开始
首先,假如:
参数区间最高: 14
参数区间最低: 2
参数网格数量: 4
变量间距 = 14 + 2 / 4 = 4
所以网格的四个线分别就是:
2 --------------------------0
2+4 = 6 --------------------------1
2+4*2=10--------------------------2
2+4*3=14--------------------------3
我们和真实的行情倒置一下:
2+4*3=14--------------------------3
2+4*2=10--------------------------2
2+4 = 6 --------------------------1
2 -------------------------------0
OrderStatus: { BuyOrderStatus , SelOrderStatus };
【主体数据结构】:
Map<double , OrderStatus> ,每条线对应这条线上的限价买入委托单状态,限价平仓的委托单状态(取消,挂单,全部成交)状态;
【逻辑流程】:
1.先判断最新的行情进来,处在0-4个挡位中的哪一个,例如,最新的一笔进来,处在1-2挡位之间,则在1处挂限价买入单 - 委托出去之后,1处的限价买入委托会被OnTradeOrder回调置为已委托状态,平仓限价委托依旧为取消状态;(先判断1处限价买入单的原始状态,为取消状态);
2.行情继续走动,当到了1,1处的限价买入完全成交后,在对向的2处,将2处的限价平仓状态置为委托挂单状态,买入状态不变,依旧为取消状态;
3.行情继续走动,如果处在0-1之间,则在0处挂限价买入单 - 委托出去之后,0处的限价买入委托会被OnTradeOrder回调置为已委托状态,平仓限价委托依旧为取消状态;
4.行情继续走动,当到了0,0处的限价买入完全成交后,在对向的1处,将1处的限价平仓状态置为委托挂单状态,买入状态不变,依旧为完全成交状态(在2时已经完全被成交);
5.行情继续走动,当从0-1中间状态走到1,使得1处的平仓限价单完全成交,则把1处的限价平仓状态重新设置为取消;
......
【模型抽象】:
1.判断出最新的行情在当前网格的位置,如果处于N/ N-1中间,则N-1挡位限价买入状态从取消置为挂单,限价平仓状态依旧置为取消,N-1挡位买入状态成交之后,将N-1限价买入状态从挂单置为完全成交,将N挡位的限价平仓状态从取消置为挂单,限价买入状态依旧为取消状态;
2.N挡位的限价平仓单成交后,将N挡位的限价平仓状态重置为取消状态,N-1的限价开仓状态从完全成交状态重置为取消状态,然后重复状态1;
【注意】 :
( 1 ) MC 或其他市面上的软件因为有开仓条件控制,所以在 CTP 中要自行处理,就是已经存在的挂单状态的挡位,即使在最新的行情进来后再次检测到 N-1 挡位需要置为挂单状态进行委托,也不再重复挂单,因为一个挡位仅只有一笔 Limit 挂单委托;
( 2 ) 对接 CTP 自行开发的套利系统,还有一个很重要的需要关注的内容,就是软件重启后的信号同步,仓位同步问题,就是在软件隔夜或需要维护重启后,如何能让我们的 Program 知道在之前软件退出后系统的状态,比如各个挡位的开平限价状态是怎么样的,如何能让系统在重启后,可以继续之前的 Grid 逻辑继续交易,这是很关键的需要注意的问题,所以需要在 Program 在连续竞价期间,在内存中即时保 存挡位的结构信息,同时同步持久化,做到后期故障恢复能及时的同步Core之前的策略逻辑执行的位置和状态,做到人工/自动化/策略运营无缝切换,这样才能使多品种多周期跨多市场多策略的自动化套利无人监管成为科能。
常清谷量化科技是一家专注于量化交易系统开发和资产管理业务的以科技驱动的量化交易公司,为客户创造价值 是我们永恒的使命!