QuickFIX - 接收和发送来自不同算法的订单(来源)

QuickFIX - Receive and send orders from different algorithms (sources)

我使用 QuickFIX/J 库构建了一个 FIX 启动器应用程序来向我的经纪人发送订单。如果您不知道什么是 FIX 应用程序,请考虑我的程序是一个通过 TCP 连接向服务器发送消息的应用程序。

为了获取和发送由多种算法创建的订单,我有一个目录观察器 (WatchService),它使用 AWS Cli 监视与 S3 存储桶同步的本地目录上的修改。

这种方法效果很好,除了我必须等待大约 6-8 秒才能将文件放入我的本地目录,这样我才能解析它以修复订单并发送到经纪人的 FIX 应用程序。 我真的很想减少订单创建和订单发送给经纪人之间的延迟。

我认为有哪些可能的解决方案:

1) 不使用 AWS CLI 直接从 S3 存储桶读取

2) 为每个不同的算法打开不同的 FIX 会话

3) 不是从存储桶中读取,而是使数据库 (MySQL) 达到新订单的峰值。算法将生成 table 行而不是文件

4) 在我的 FIX 应用程序和算法之间有一个 API,所以算法可以直接连接到我的应用程序。

解决方案 (1) 没有改善订单接收时间,因为列出 S3 对象、获取摘要和过滤所需文件所花费的时间大致相同。

解决方案(2)我没有尝试过,但我认为这不是最好的。例如,如果我有 100 种不同的策略,我将不得不打开 100 个不同的连接,而且我不确定我的代理应用程序是否可以处理。但我可能错了。

解决方法(3)我也没试过

方案(4)是我认为比较理想的方案,但不知道如何实现。我试图创建一个 REST API,但我不知道它在概念上是否正确。假设我的 FIX 应用程序当前连接到经纪人的服务器,我的想法是 (i) 创建一个新的 webapp 来创建 REST API (ii) 通过 API 接收订单信息,(iii)找到当前活动的会话和 (iv) 使用当前会话向代理服务器发送订单。不幸的是,我无法通过 ID 在另一个 class 上使用以下内容找到当前会话,即 运行 FIX 应用程序:

SessionID sessionID = new SessionID("FIX.4.4", "CLIENT1", "FixServer");
    Session session = Session.lookupSession(sessionID);

我想听听您的意见:

对不起,如果我有点困惑。如果您需要进一步说明,请告诉我。

谢谢

Q : What do you think that is the best solution to send FIX orders created by multiple sources?

绝对是 4) - 即整合您的多个决策来源并从一个点连接代理方 FIX 协议网关。

原因:
- 隔离 design/implementation/operations
中的问题 - FIX 协议通道 authentication/latency-motivated 的单点托管
- 最小化 FIX 协议网关验收测试的成本(如果没有这个,一级市场参与者不会让你 运行 开展业务,因此 FIX 协议 E2E-相互合作合规性测试的费用很重要 - 两者都是成本明智的和时间 )

Q : what are the steps that I can follow?

关注您自己的用例,它定义了所有需要准备好进行测试的 MVP 功能。

不要试图将您的需求概括为任何 "new-Next-Gen-API",您的交易完全是关于延迟 + 交易,所以更专注于 MVP 定义,不要 design/implement MVP 之外的任何东西点对点基础上的最小延迟(开销)。使用稳定的专业框架,如 nanomsg or ZeroMQ,可以避免花费一些时间重新发明任何已经发明的低延迟交易轮子 messaging/signaling 工具。使用 REST 是第三个千年低延迟驱动的高性能分布式交易计算生态系统中的一种反模式。