quickfix/j-消费市场数据的最佳方式

eimct9ow  于 2021-06-04  发布在  Kafka
关注(0)|答案(0)|浏览(397)

我正在使用quickfix库连接到我的经纪人的修复服务器并发送订单。我的应用程序(quickfix initiator)通过使用rabbitmq队列接收来自不同算法的orders消息,并使用fix协议将其路由到我的代理,如下图所示:

我必须执行一个定制的订单执行,在决定要发送的订单是限额还是止损限额之前,必须检查出价并询问特定的证券。在通过fix访问市场数据之前,我曾经向彭博api的内部api构建发出请求

instrumentData = bbgApi.getInstrumentData(this.params.getSymbol());

String side = this.params.getSide();

if (side.equals(Side.BUY)) {
    Double ask = instrumentData.getAsk();
    // ...
    Session.sendToTarget(this.getOrder(), sessionID);

 }
 else if (side.equals(Side.SELL)) {
    Double bid = instrumentData.getBid();
    //...
    Session.sendToTarget(this.getOrder(), sessionID);

 }

我只需要检查出价和要求的具体时刻,我发送的命令。
现在我可以通过fix访问市场数据,我想使用出价并请求使用它,因为价格每时每刻都更接近证券的真实价格。但是因为修复程序的工作方式,我不知道怎么打这样的电话

instrumentData = fixApi.getInstrumentData(this.params.getSymbol());

因为当我发送修复消息时,它不会返回一个“承诺”,即我可以在继续执行代码之前等待完成。我已经习惯了javascript和restapi的工作方式,所以我有点卡住了。我想知道什么是最好的方式,我可以消费和生产的市场数据是通过修复收到。
我的想法
创建将订阅证券数据的市场数据修复应用程序(发起程序)。每个security的数据都将放入rabbitmq队列。对于从fix order应用程序接收到的每个订单,order execution对象将使用特定安全队列中的数据,并对接收到的第一条市场数据消息作出React,然后发送订单。
同时创建一个市场数据修复应用程序(启动器),它将订阅证券数据。每个安全性的数据都会放到mysql的一个表中。然后我将创建一个api,比如我上面提到的bbgapi,它将查询mysql并获取所需安全性的最新数据。
创建由发起方和接受方组成的市场数据应用程序。发起者将连接到我的经纪人的市场数据应用程序,接受者将用于接受来自内部应用程序的新连接。我的订单执行对象需要通过接受者获得市场数据,并等待包含所需数据的消息。
在我看来,解决方案3似乎很理想,但需要多个到我的接受者的连接,这会减慢(和延迟)订单的执行。如果我只有一个连接到FixMarketData应用程序的对象发送请求,并且该请求返回一个承诺,即完成后返回所需的数据,那将是非常理想的。
我很欣赏你关于哪种方式更好地使用市场数据的意见。如果你有不同的意见或建议,请告诉我。非常感谢你的帮助。
编辑:
rabbitmq不是一个好的选择,因为我可能希望同一条消息有多个使用者。也许Kafka是理想的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题