我们似乎无法使用 QuickFix 处理某些群组消息。
我正在尝试使用 QuickFix (C++) 建立与 ICE 交换的连接。我创建了一个自定义数据字典来处理 ICE 的非标准消息。要处理的第一条消息是 SecurityDefinition。该消息包含大约 13000 个条目,分为 100 个块。我在下面附上了消息(为了清楚起见,添加了 CR/LF 的前两个条目)。
我的问题是在数据字典中,我将一个组定义为条目的一部分,其中包含它们在组中指定的所有字段。然而,该消息在到达破解者之前就因具有无效标签(标签 = 305)而被拒绝。
消息 2 被拒绝:未为此消息类型定义标签:305
这个字典条目看起来正确吗?有没有关于如何处理群组消息的文档?
字典条目:
<message name='SecurityDefinition' msgcat='app' msgtype='d'>
<field name='SecurityResponseID' required='Y' />
<field name='SecurityResponseType' required='Y' />
<field name='SecurityReqID' required='Y' />
<field name='TotNoRelatedSym' required='N' />
<field name='NoRpts' required='N' />
<field name='ListSeqNo' required='N' />
<group name='NoUnderlyings' required='N'>
<field name='UnderlyingSymbol' required='N' />
<field name='UnderlyingSecurityID' required='N' />
<field name='UnderlyingSecurityIDSource' required='N' />
<field name='UnderlyingCFICode' required='N' />
<field name='UnderlyingSecurityDesc' required='N' />
<field name='UnderlyingMaturityDate' required='N' />
<field name='UnderlyingContractMultiplier' required='N' />
<field name='IncrementPrice' required='N' />
<field name='IncrementQty' required='N' />
<field name='LotSize' required='N' />
<field name='NumofCycles' required='N' />
<field name='LotSizeMultiplier' required='N' />
<field name='Clearable' required='N' />
<field name='StripId' required='N' />
<field name='StripType' required='N' />
<field name='StripName' required='N' />
<field name='HubId' required='N' />
<field name='HubName' required='N' />
<field name='HubAlias' required='N' />
<field name='UnderlyingUnitOfMeasure' required='N' />
<field name='PriceDenomination' required='N' />
<field name='PriceUnit' required='N' />
<field name='Granularity' required='N' />
<field name='NumOfDecimalPrice' required='N' />
<field name='NumOfDecimalQty' required='N' />
<field name='ProductId' required='N' />
<field name='ProductName' required='N' />
<field name='ProductDescription' required='N' />
<field name='TickValue' required='N' />
<field name='ImpliedType' required='N' />
<field name='PrimaryLegSymbol' required='N' />
<field name='SecondaryLegSymbol' required='N' />
<field name='IncrementStrike' required='N' />
<field name='MinStrike' required='N' />
<field name='MaxStrike' required='N' />
</group>
</message>
实际消息:
8=修复.4.49=5004335=d49=ICE34=252=20121017-00:39:41.38556=600357=23322=3924323=4320=1393=1310382=13267=1711=100
311=1705282309=TEB SMG0013-TFL SMG0013305=8463=FXXXXX307=NG 基差期货 Spr - TETCO-ELA/TGP-500L - Feb13542=20130131436=1.09013=0.00059014=2500.09017=2 5009022=289024=19025=Y916=20130201917=201302289201=11969200 =129202=Feb139300=60589301=Texas Eastern Transmission Corp. - 东路易斯安那区/田纳西州天然气管道公司 - L 区,500 Leg Pool9302=TETCO-ELA/TGP-500L998=MMBtus9100=USD9101=USD / MMBtu9085=每日9083=49084= 09061=4909062=NG基差期货Spr9063=天然气基差期货价差9032=1.259004=17051939005=1353778
311=1714677309=PGE SQF0014.H0014-SCB SQF0014.H0014305=8463=FXXXXX307=NG 基差期货 Spr - PG&E-东荟城/南澳-东荟城 - 第一季度 14542=20131231436=1.09013=0.0005 9014=2500.09017=25009022=909024=19025=Y916= 20140101917=201403319201=12339200=159202=Q1 149300=59979301=PG&E-东荟城/南荟-东荟城9302=PG&E-东荟城/南荟-东荟城998=MMBtus9100=USD9101=USD / MMBtu9085=每日9083=49084=09061=4909062=NG基差期货SPR9063=天然气基差期货价差9032=1.259004=13430529005=1344660
我们通过创建一个名为 SecDefICE 的自定义组件(包含所有自定义字段)并在自定义数据字典中重新定义 SecurityDefinition 消息来解决这个问题。
我们现在可以读取组信息了。唯一的缺点是我们必须使用通用组并按数字获取字段,而不是以类型安全的方式进行。当我有时间时,我将创建一个新的命名空间(FIXICE 等),其中包含正确的头文件(消息、字段、自定义破解程序等)
下面列出的是我们字典中的定义。
新组件
<component name='SecDefICE' required='N'>
<field name='UnderlyingSymbol' required='N' />
<field name='UnderlyingSecurityID' required='N' />
<field name='UnderlyingSecurityIDSource' required='N' />
<field name='UnderlyingCFICode' required='N' />
<field name='UnderlyingSecurityDesc' required='N' />
<field name='UnderlyingMaturityDate' required='N' />
<field name='UnderlyingContractMultiplier' required='N' />
<field name='IncrementPrice' required='N' />
<field name='IncrementQty' required='N' />
<field name='LotSize' required='N' />
<field name='NumofCycles' required='N' />
<field name='LotSizeMultiplier' required='N' />
<field name='Clearable' required='N' />
<field name='StartDate' required='N' />
<field name='EndDate' required='N' />
<field name='StripId' required='N' />
<field name='StripType' required='N' />
<field name='StripName' required='N' />
<field name='HubId' required='N' />
<field name='HubName' required='N' />
<field name='HubAlias' required='N' />
<field name='UnderlyingUnitOfMeasure' required='N' />
<field name='PriceDenomination' required='N' />
<field name='PriceUnit' required='N' />
<field name='Granularity' required='N' />
<field name='NumOfDecimalPrice' required='N' />
<field name='NumOfDecimalQty' required='N' />
<field name='ProductId' required='N' />
<field name='ProductName' required='N' />
<field name='ProductDescription' required='N' />
<field name='TickValue' required='N' />
<field name='ImpliedType' required='N' />
<field name='PrimaryLegSymbol' required='N' />
<field name='SecondaryLegSymbol' required='N' />
<field name='IncrementStrike' required='N' />
<field name='MinStrike' required='N' />
<field name='MaxStrike' required='N' />
</component>
新消息定义
<message name='SecurityDefinition' msgcat='app' msgtype='d'>
<field name='SecurityResponseID' required='Y' />
<field name='SecurityResponseType' required='Y' />
<field name='SecurityReqID' required='Y' />
<field name='TotNoRelatedSym' required='N' />
<field name='NoRpts' required='N' />
<field name='ListSeqNo' required ='N' />
<group name='NoUnderlyings' required='N'>
<component name='SecDefICE' required='N' />
</group>
<field name='Text' required='N' />
<!-- these are the original fields in 4.4 spec -->
<!-- group name='NoUnderlyings' required='N' -->
<!-- component name='UnderlyingInst' required='N' -->
<!-- /group -->
<!-- component name='Instrument' required='N' -->
<!-- component name='InstrumentExtension' required='N' -->
<!-- field name='Currency' required='N' -->
<!-- field name='TradingSessionID' required='N' -->
<!-- field name='TradingSessionSubID' required='N' -->
<!-- field name='EncodedTextLen' required='N' -->
<!-- field name='EncodedText' required='N' -->
<!-- group name='NoLegs' required='N' -->
<!-- component name='InstrumentLeg' required='N' -->
<!-- /group -->
<!-- field name='ExpirationCycle' required='N' -->
<!-- field name='RoundLot' required='N' -->
<!-- field name='MinTradeVol' required='N' -->
</message>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)