Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java QuickFIX/J-使用市场数据的最佳方式_Java_Apache Kafka_Rabbitmq_Fix Protocol_Quickfixj - Fatal编程技术网

Java QuickFIX/J-使用市场数据的最佳方式

Java QuickFIX/J-使用市场数据的最佳方式,java,apache-kafka,rabbitmq,fix-protocol,quickfixj,Java,Apache Kafka,Rabbitmq,Fix Protocol,Quickfixj,我正在使用QuickFIX库连接到我的经纪人的修复服务器并发送订单。我的应用程序(QuickFIX启动器)通过使用RabbitMQ队列接收来自不同算法的orders消息,并使用FIX协议将其路由到我的代理,如下图所示: 我必须执行自定义订单执行,在决定发送的订单是限额还是止损限额之前,必须检查出价并询问特定证券。在通过FIX访问市场数据之前,我曾向 我只需要检查出价,并询问我发送订单的具体时间 现在我可以通过FIX访问市场数据,我想使用出价并要求使用它,因为价格在每一时刻都更接近证券的实际价格

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

我必须执行自定义订单执行,在决定发送的订单是限额还是止损限额之前,必须检查出价并询问特定证券。在通过FIX访问市场数据之前,我曾向

我只需要检查出价,并询问我发送订单的具体时间

现在我可以通过FIX访问市场数据,我想使用出价并要求使用它,因为价格在每一时刻都更接近证券的实际价格。但由于修复程序的工作方式,我不知道如何才能打这样的电话

instrumentData = fixApi.getInstrumentData(this.params.getSymbol());
因为当我发送修复消息时,它不会返回一个“承诺”,即我可以在继续执行代码之前等待完成。我已经习惯了JavaScript和RESTAPI的工作方式,所以我有点被卡住了。我想知道我能通过FIX消费和生成市场数据的最佳方式是什么

我的想法

  • 创建将订阅证券数据的市场数据修复应用程序(启动器)。每个安全性的数据都将放入RabbitMQ队列。对于从我的FIX order应用程序接收到的每个订单,订单执行对象将使用特定安全队列中的数据,并对接收到的第一条市场数据消息作出反应,然后发送订单
  • 还创建一个将订阅证券数据的市场数据修复应用程序(启动器)。每个安全性的数据将被放入MySQL表中。然后我将创建一个类似于我上面提到的bbgApi的API,它将查询MySQL并获取所需安全性的最新数据
  • 创建由发起方和接受方组成的市场数据应用程序。发起者将连接到我的经纪人的市场数据应用程序,接受者将用于接受来自内部应用程序的新连接。我的订单执行对象需要通过接受者获得市场数据,并等待包含所需数据的消息 在我看来,解决方案3似乎很理想,但需要多个到我的接受者的连接,这会减慢(并延迟)订单的执行。如果我只有一个对象连接到FIX market data应用程序,该应用程序将发送请求,并且该请求将返回一个承诺,该承诺在完成后返回所需的数据,这将是理想的

    我很欣赏你关于哪种方式更好地使用市场数据的意见。如果你有不同的意见或建议,请让我知道。非常感谢你的帮助

    编辑:


    RabbitMQ不是一个好的选择,因为我可能希望同一条消息有多个使用者。也许卡夫卡是理想的选择。

    RabbitMQ是一个不错的选择,但市场数据是有价值的,一旦您使用它,最好将其存储在数据库中以备将来使用,如历史比较等。在我看来,最好使用列式数据库,而不是行式数据库(mySql)。并使用两阶段提交到队列和数据库。这只是一种观点。关于你的“承诺”(或Java中称之为未来):如果你真的想走这条路(即阻止执行,直到市场数据请求得到响应),那么你可以简单地基于你必须随每个请求发送的唯一ID。收到具有该唯一ID的回复后,如果您在相当长的时间内没有收到回复,您可以将结果或可能的错误返回给您的呼叫方。注意:您还可以在RabbitMQ中对多个使用者进行消息扇出。@ChristophJohn谢谢。我一定会看看未来
    instrumentData = fixApi.getInstrumentData(this.params.getSymbol());