0

我收到以下错误,无法弄清楚原因(没有其他错误):

    QuickFix.FieldConvertError: Could not convert field: Could not convert string to int (N): The first character must be a digit or a minus sign
    at QuickFix.Fields.Converters.IntConverter.Convert(String i)
    at QuickFix.FieldMap.GetInt(Int32 tag)
    at QuickFix.DataDictionary.DataDictionary.CheckGroupCount(IField field, FieldMap map, String msgType)
    at QuickFix.DataDictionary.DataDictionary.Iterate(FieldMap map, String msgType)
    at QuickFix.DataDictionary.DataDictionary.Validate(Message message, DataDictionary sessionDataDict, DataDictionary appDataDict, String beginString, String msgType)
    at QuickFix.Session.Next(MessageBuilder msgBuilder)
    at QuickFix.Session.NextMessage(String msgStr)
    at QuickFix.SocketInitiatorThread.ProcessStream()
    at QuickFix.SocketInitiatorThread.Read()

我正在将此消息发送到我的应用程序(它要长得多,但我删除了很多消息以尝试找到有问题的标签并将消息减少到下面的剩余标签,但看起来问题不在于消息本身):

     8=FIX.4.49=342135=CG49=SENDER34=352=20200513-19:34:28.76856=528357=TARGET1510=11505=11511=01513=50

这是我的数据字典的一部分:

 <message name="ParticipantList" msgtype="CG" msgcat="app">
  <field name="PartyDetailsListReportID" required="Y"/>
  <field name="PartyDetailsListRequestID" required="Y"/>
  <field name="PartyDetailsRequestResult" required="Y"/>
  <field name="Text" required="N"/>
  <field name="NoPartyList" required="N"/>
  <group name="LastFragment" required="N">
    <field name="PartyID" required="N"/>
    <field name="PartyIDSource" required="N"/>
    <field name="PartyRole" required="N"/>
    <field name="PartyName" required="N"/>
    <field name="AccountStatus" required="N"/>
    <field name="MobileAccess" required="N"/>
    <field name="SMAGroupingName" required="N"/>
    <field name="SMAGroupMargin" required="N"/>
    <field name="SMAGroupCurrency" required="N"/>
    <group name="NoClrDetails" required="N">
      <field name="ClrHouseCode" required="N"/>
      <field name="RIMnemonic" required="N"/>
      <field name="LIFFERIMnemonic" required="N"/>
      <field name="IFADRIMnemonic" required="N"/>
      <field name="AccountCode" required="N"/>
      <field name="CTICode" required="N"/>
      <field name="RiskLimitAmount" required="N"/>
      <field name="Currency" required="N"/>
    </group>
    <group name="NoPartySubIDs" required="N">
      <field name="PartySubID" required="N"/>
      <field name="PartySubIDType" required="N"/>
    </group>
    <group name="NoAccountLimits" required="N">
       <field name="SecurityID" required="N"/>
       <field name="PhysicalCode" required="N"/>
       <field name="UnderlyingSecurityExchange" required="N"/>
       <field name="FloatBuyLotsBid" required="N"/>
       <field name="FloatSellLotsOffer" required="N"/>
       <field name="MaxTradeBuyLotsLong" required="N"/>
       <field name="MaxTradeSellLotsShort" required="N"/>
       <field name="AbsBuyLimitAbsLong" required="N"/>
       <field name="AbsSellLimitAbsShort" required="N"/>
       <field name="TradeNetLotsBalance" required="N"/>
       <field name="SpreadBuyLimit" required="N"/>
       <field name="SpreadSellLimit" required="N"/>
       <field name="ProductAccountCode" required="N"/>
       <field name="BlockLimit" required="N"/>
       <field name="StrategyBlockLimit" required="N"/>
     </group>
  </group>
</message>

我已经尝试将标签的类型从“int”切换到“string”,但仍然出现该错误。我很困惑。

我正在使用 QuickFix v1.9.0.0。我的应用程序是用 C# 编写的,但这并不重要,因为传入的消息甚至没有击中我的代码。

非常感谢任何建议/建议。

4

1 回答 1

1

感谢您的建议!看起来问题出在他们这边,并且也与他们提供的规格有关。我的数据字典从一开始就是正确的。我在上面的问题中发布的是交易所建议的内容。然而,正确的数据字典是 LastFragment 在 NoPartyList 组之前的位置。交易所也必须按该顺序发送带有标签的消息,否则会出现错误。

于 2020-05-28T18:15:41.700 回答