我正在尝试阅读我的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'
,或者我是否必须为此特殊情况重写我的黑客?
答案 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())