我正在构建一个重播日志的工具.手动解析日志很烦人,所以我想知道是否有办法简单地从日志中加载消息.
另外,我并不反对仅使用第三方重播工具(如果存在).
我有一个 FIX 日志文件。我在行上迭代,将每个字符串放入
Message m = new Message(str, false)
Run Code Online (Sandbox Code Playgroud)
因为出于某种原因,文件验证失败(即使是第一行)。现在,我看到它是 35=X 类型,268=4(即 NoMDEntries=4,所以我应该在消息中有 4 个组)
但是,在调试显示中我没有看到任何组。m.base._groups 的计数为 0。
有问题的字符串是:
1128=9 | 9=363 | 35=X | 49=CME | 34=3151 | 52=20121216223556363 | 75=20121217 | 268=4 | 279=0 | 22=8 | 48=43585 | 83=902 | 107=6EH3 | 269=4 | 270=13186 | 273=223556000 | 286=5 | 279=0 | 22=8 | 48=43585 | 83=903 | 107=6EH3 | 269=E | 270=13186 | 271=9 | 273=223556000 | 279=0 | 22=8 | 48=43585 | 83=904 | 107=6EH3 …Run Code Online (Sandbox Code Playgroud) 我正在使用Python API运行QuickFix,并使用FIX4.2连接到TT FIX适配器
我正在登录并发送针对两种工具的市场数据请求。这样就可以正常工作,并且可以从仪器中获得预期的数据。我可以从消息中获取各种信息。
但是,我在获取符号(标志55)字段时遇到麻烦。
import quickfix as fix
def fromApp(self, message, sessionID):
ID = fix.Symbol()
message.getField(ID)
print ID
Run Code Online (Sandbox Code Playgroud)
这适用于我收到的第一条消息[初始市场数据快照(标志35 = W)]。一旦开始进行增量刷新(标志35 = X),就无法再获取“符号”字段。每条到达的消息都会导致“未找到字段”错误。
这使我感到困惑,因为在日志中,无论消息类型是W还是X,符号字段始终存在。
认为符号在刷新消息的标题中,我尝试get.Field(ID)在35 = W和get.Header().getField(ID)35 = X时使用,但是这不起作用。
有人可以帮我弄清楚这里发生了什么吗?我希望能够明确告诉我的计算机正在查看什么仪器。
谢谢
我正在尝试处理FIX Reject(MsgType 35=3),但我不清楚如何检索FIX Reject消息引用的消息.
FIX拒绝MsgSeqNum在RefSeqNum字段(标记45)中引用被拒绝的消息.但是,我不知道如何通过序列号获取被拒绝的消息.我认为它应该是可能的,因为FIX引擎可以重新发送序列号范围内的消息(响应重发请求),所以如果引擎可以这样做,那么我应该这样做.
问题:如何在RefSeqNum字段中获取拒绝消息引用的消息?
[抱歉我的英语] 我在连接我的用 python 开发的客户端 quckfix 时遇到问题。配置文件没有像我想要的那样响应。
如果我将路径(不正确的路径,强制错误)更改为文件 *.pem 并重新启动应用程序。该应用程序没有任何内容,只是保持正常运行。
就好像没有读取配置一样
在本教程中提到:quickfix 的 Python 实现不支持 SSL,这是真的吗?
这是用于在 Windows 中使用来自http://www.quickfixengine.org/的库 quickfix 的 python iomplementation
[DEFAULT]
PersistMessages=Y
ConnectionType=initiator
UseDataDictionary=Y
StartTime=00:00:00
EndTime=23:59:00
FileStorePath=incoming
FileLogPath=outgoing
[SESSION]
SSLEnable=Y
SSLProtocol=TLSv1
ClientCertificateFil=C:\python\pyarb\cert\cert.pem
ClientCertificateKeyFile=C:\python\pyarb\cert\key.pem
StartTime=14:00:00
SenderCompID=AGENT
TargetCompID=FIX
EndTime=00:00:00
ConnectionType=initiator
ApplVerID=9
BeginString=FIXT.1.1
DefaultApplVerID=9
TransportDataDictionary=quickfix_dicts\FIX50SP1.xml
AppDataDictionary=quickfix_dicts\FIX50SP1.xml
DataDictionary=quickfix_dicts\FIX50SP1.xml
SocketConnectPort=xxxx
SocketConnectHost=xxx.xxx.xxx.xxx
HeartBtInt=30
ReconnectInterval=30
ResetOnLogon=Y
ResetOnLogout=Y
ResetOnDisconnect=N
ResetSeqNumFlag=N
Run Code Online (Sandbox Code Playgroud) 订单请求在 FIX 服务器上发送,并且标签的顺序已更改。
如果我想要序列的输出,因为它是由我安排的(而不是被服务器修改)。
public void send50(Order order) {
quickfix.fix50sp1.NewOrderSingle newOrderSingle = new quickfix.fix50sp1.NewOrderSingle(new ClOrdID(order.getID()),
sideToFIXSide(order.getSide()), new TransactTime(), typeToFIXType(order.getType()));
newOrderSingle.set(new OrderQty(order.getQuantity()));
newOrderSingle.set(new Symbol(order.getSymbol()));
newOrderSingle.set(new Price(order.getSharePrice()));
newOrderSingle.set(new Account("13501100"));
newOrderSingle.setField(new NoPartyIDs(1));
newOrderSingle.setField(new PartyIDSource('C'));
newOrderSingle.setField(new PartyRole(12));
newOrderSingle.setField(new PartyID("13501100"));**
Run Code Online (Sandbox Code Playgroud)
这是用户给服务器的顺序,服务器将其安排为:
8=FIXT.1.1|9=173|35=D|34=5|49=135|52=20200131-05:35:12.956|56=PSE|1=13501100|11=1580448912440|38=10=10 1|44=10.78|54=1|55=AGI|59=0|60=20200131-13:35:12.956|447=C|448=13501100|452=12|453=1|10=213|
那么,如果我希望输出与发送的顺序相同,该怎么办?
FIX协议中有两种类型的消息用于定价:MarketData和Quotes.
它们之间有什么区别?有什么用途?
谢谢
我正在尝试研究高频交易系统.什么是HFT用来连接交换机的机制和什么是程序(它是必须通过代理还是直接访问,如果它直接访问我需要的那种连接信息)
提前感谢您的回答.
我在 Windows 中使用 Quickfix 和 python 绑定。我过去曾能够提出市场数据请求。我最近更换了不同的 API 提供商(Cunningham,又名 CTS),并且遇到了很多问题。然而,至少其中之一似乎是 Quickfix 内部的。这让我很困惑。
\n\n当我发送市场数据请求时,我会收到回复。这是典型的 35=W 消息,市场快照。
\n\nQuickfix 正在拒绝此消息,因为标签 269 出现多次!
\n\n当然,标签269是MDEntryType,它应该出现多次。另请注意,定义了标签 268 NoMDEntries,它表示该组中有 21 个条目。
\n\n我认为这是 QuickFix 的内部原因,因为 QuickFix 正在生成错误消息并将其发送回 CTS。此外,此错误会在消息传递给函数之前中止消息fromApp。(我知道,因为我的解析器在调用时将自己应用于消息,fromApp甚至没有收到此消息)。
有任何想法吗?消息如下。
\n\n(编辑 - 我已经关闭了配置文件中的数据字典 - 它与此有什么关系吗?)
\n\n<20140915-22:39:11.953,FIX.4.2:XXXXX->CTS,传入>\n (8=FIX.4.2 \xe2\x98\xba 9=836 \xe2\x98\xba 35=W \xe2\x98 \xba 34=4 \xe2\x98\xba 49=CTS \xe2\x98\xba 56=XXXXX \xe2\x98\xba 52=20140915-22:39:11.963 \xe2\x98\xba 48=XDLCM\nE_F ZN (Z14) \xe2\x98\xba 387=2559 \xe2\x98\xba 965=2 \xe2\x98\xba 268=21 \xe2\x98\xba 269=0 \xe2\x98\xba 270=124156250 \xe2 \x98\xba …
我目前正在使用QuickFIX/n来构建一个接受器服务,我已经构建了一个启动器来测试接受器.我怀疑我得到的错误是由于接收器中的错误,因为同一错误发生在其他人发送给服务的消息上.
在发起程序中,我构建并发送AllocationInstruction,如下所示:
var fix44Message = new QuickFix.FIX44.AllocationInstruction(
new AllocID(request.Info.AllocationID), EnumHelpers.ParseAllocationTransactionType(request.Info.AllocationTransactionType), EnumHelpers.ParseAllocationType(request.Info.AllocationType),
new AllocNoOrdersType(AllocNoOrdersType.EXPLICIT_LIST_PROVIDED), EnumHelpers.ParseSide(request.Info.Side), new Symbol(request.Info.Symbol), new Quantity(request.Info.Quantity),
new AvgPx(request.Info.AveragePrice), new TradeDate(request.Info.TradeDate.ToString("yyyyMMdd")))
{
SecurityID = new SecurityID(request.Info.SecurityID),
SecurityIDSource = new SecurityIDSource(request.Info.SecurityIDSource),
SecurityExchange = new SecurityExchange(request.Info.SecurityExchange),
Issuer = new Issuer(request.Info.Issuer),
Currency = new Currency(request.Info.Currency),
TransactTime = new TransactTime(request.Info.TransactTime),
SettlDate = new SettlDate(request.Info.SettlementDate.ToString("yyyyMMdd")),
GrossTradeAmt = new GrossTradeAmt(request.Info.GrossTradeAmount),
NetMoney = new NetMoney(request.Info.NetMoney)
};
var group = new QuickFix.FIX44.AllocationInstruction.NoOrdersGroup
{
ClOrdID = new ClOrdID(order.ClOrdID),
OrderID = new OrderID(order.OrderID),
OrderQty = new OrderQty(order.Quantity)
};
fix44Message.AddGroup(group); …Run Code Online (Sandbox Code Playgroud)