7

我有字符串 FIX 消息作为输入,我想将其转换为 FIX 消息。我正在使用 QuickFix 1.13.3(几天前我从 quickfix 网站下载的)

我对 QuickFix 很陌生。google 返回的大多数示例代码/帮助都是针对 Java 的,并且当应用程序将 FIXMessage 有效负载作为字符串时,也没有建议直接的方法。

我在网上看到的大多数示例都是人们使用 QuickFix 进行端到端的情况,即通过套接字进行通信以获取消息并破解它。

在我的情况下,我有自己的通信层,它只向我传递一个字符串有效负载,代表一个完整的 FIX 消息。我只需要解析字符串并获取所有标签/值的列表。

虽然我自己编写了一个小实用程序来使用标准 string.split()...解析 FIX 消息。但有人建议我使用 QuickFix,因为它支持一切。

但是,即使对于 QuickFix 上的一个非常基本的任务,我也很难开始,所以任何重新解析字符串有效负载的帮助都将不胜感激。

下面是我要找的

//转换器或饼干

public QuickFix44.Message GetMessage(string payload);

//呼叫者

string newOrderSinglePayload = "8=FIX.4.49=13635=D..............";

QuickFix44:Message message = GetMessage(newOrderSinglePayload);

if (message is QuickFix44.NewOrderSingle)

{ 
   //I am happy
}

如果 QuickFix 对于这项简单的工作来说太多了,那么我愿意使用任何其他工具(免费和开源)

4

1 回答 1

13

QuickFIX 绝对是为端到端而设计的。它的一些类可以用于其他目的,但是对于这些不太常见的用例没有太多的文档。

您可以将 FIX 字符串传递给Message构造函数。

// Uses default DataDictionary (e.g. message definitions from FIX spec)
Message::Message( const std::string& string, bool validate )

// Uses a DataDictionary that you supply.
// If your msg has custom fields, you need this one.
// (You'll create a DD from a custom msg definition XML file that
// you'll also need to create)
Message::Message( const std::string& string,
                  const DataDictionary& dataDictionary,
                  bool validate )

要将 Message 转换为更具体的类型,您可以将其提供给更具体类型的构造函数,例如ExecutionReport(Message).

您是否考虑过原生 C# 端口QuickFIX/n ?

这将适用于 QuickFIX/n:

IMessageFactory _defaultMsgFactory = new DefaultMessageFactory();

var dd = new QuickFix.DataDictionary.DataDictionary();
dd.Load("../../../spec/fix/FIX44.xml");

var msg = new QuickFix.FIX44.ExecutionReport();
msg.FromString(msg_string, false, dd, dd, _defaultMsgFactory);

如果您的 XML 有大量自定义,您可能希望首先重新生成源代码并重新构建库。

于 2013-05-10T14:35:50.187 回答