如何将字符串更改为QuickFix消息?

时间:2015-08-03 18:32:28

标签: python quickfix fix-protocol

我正在尝试阅读我的FIX日志,并用我在python中编写的破解程序解析它们。但是,这不起作用,因为在我的黑客中我有resultSet.stream() .forEach(p -> p.getChildList().sort(Comparator.comparing(Child::getAttrib15))); 这样的调用,它们是QuickFix方法。毫不奇怪,他们返回错误:

message.getHeader()

日志都是字符串,但是破解程序嵌入在QuickFix中,因此使用QF方法。有没有办法获取字符串并将其转换为QF消息,以便我可以在其上调用AttributeError: 'str' object has no attribute 'getHeader',或者我是否必须为此特殊情况重写我的黑客?

3 个答案:

答案 0 :(得分:1)

我在C#中执行此操作的方法是读取标记35以查看我需要创建的消息类型。然后,我创建该消息类型,并使用setString方法填充它。像这样:

if (line.Contains("35=8"))
{
    message = new QuickFix44.ExecutionReport();
}
else if(line.Contains("35=AS"))
{
    message = new QuickFix44.AllocationReport();
}
 . . . . and so on

message.setString(line, true, dictionary);
application.fromApp(message, sessionId); //The cracker takes care of it from here

其中dictionary是我的数据字典。 Python绑定中是否有类似的方法?

答案 1 :(得分:1)

以下代码应该可以工作。

import quickfix as qfix
import quickfix44 as q44
message = q44.ExecutionReport()
message.setString(input_string, True, qfix.DataDictionary('CustomDictionary.xml'))

'message'对象将被更新,您应该可以将其用作quickfix Message对象

答案 2 :(得分:1)

以下内容也可以使用,不需要先验消息类型。

import quickfix as fix

string = "8=FIX.4.49=24735=s34=549=sender52=20060319-09:08:20.88156=target22=840=244=948=ABC55=ABC60=20060319-09:08:19548=184214549=2550=0552=254=1453=2448=8447=D452=4448=AAA35777447=D452=338=954=2453=2448=8447=D452=4448=aaa447=D452=338=910=056"

data_dictionary = fix.DataDictionary("FIX44.xml")
message = fix.Message(string, data_dictionary, True)

print(message.toXML())