如何在c#中将字符串FIXMessage解析为FIXMessage对象

时间:2013-05-10 11:25:41

标签: quickfix

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

我是QuickFix的新手。谷歌返回的大多数示例代码/帮助都是针对Java的,当应用程序将FIXMessage有效负载作为字符串时,也没有建议直接的方式。

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

在我的情况下,我有自己的通信层,它只是传递给我一个字符串有效负载代表一个完整的fledge 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对于这项简单的工作来说太多了,那么我可以使用任何其他工具(免费和开源)

1 个答案:

答案 0 :(得分:9)

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 )

要将该消息转换为更具体的类型,您可以将其提供给更具体的类型构造函数,例如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有大量自定义,您可能需要首先重新生成源并重建库。