监听行情触发条件单


最近在做公司交易系统时,接到需求要做条件订单,组合订单。同时条件的触发要基于监听实时行情,如果满足条件就触发下单送交易所。此类订单对于系统设计和性能都有一定的复杂性,故记录一些思考。条件单类型有触及限价单,触及市价单,多条件单。而需求二级还要支持组合策略订单。OCO,OTO,OTOCO,止盈止损单等,其中组合订单中主单或是子单也可以是条件订单。其中比较麻烦的就是多条件订单。所谓多条件,即用户在下单时可以设置多个触发条件,条件的判断因子可以是 >,>=,=,<=,<。条件的字段因子可以是实时行情价,当时的成交量,行情振幅。条件与条件之间的关系可以是AND和OR的组合逻辑关系。

对于表设计我用了两个表,一个是条件表 order_condition 和 order_condition_formula。其中order_condition 用于保存订单条件,order_condition_formula用于保存条件的关系,此处我用EL逻辑表达式来保存关系

整体服务之间交互如下图

行情波动很快,因此当订单数据量很大时,这里可能会有性能问题(虽然行情监听计算服务都是基于内存处理),目前实现暂时是轮询所有订单,但这显然是不合理的,在订单量少的时候没有什么影响,但订单量如果达到几万单,甚至几十万单时,每次行情触发都要去轮询所有订单条件,然后计算匹配。这显然会做很多无用功。所以需要构造一种数据结构,来快速判断行情是否满足触发条件。


Author: 顺坚
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source 顺坚 !
评论
 Previous
消息队列灰度 消息队列灰度
最近公司项目比较多,多项目多市场并行开发,需要服务支持灰度发布,以便进行生产验证,避免出现问题。在项目中消息中间件和分布式Task是必不可少的,接口调用的灰度转发可以通过网关实现,因此主要需要对这两个中间件做灰度转发控制 所谓灰度服务,是
2023-10-21
Next 
一步一步发明比特币 一步一步发明比特币
比特币是一种虚拟货币,被称为二十一世纪最大的谜团?主要原因是它涉及牵涉到了传统的金融市场,本来我们在那个国家,就用那个国家的货币进行支付,比如我在中国就用人民币,在美国就用美元等等。但是如果在中国你用美元买东西,就非常的麻烦,需要去银行把美
2023-03-09
  TOC