【问题标题】:Quickfix/n QuickFix.FieldConvertError: Could not convert field: Could not convert string to int (N)Quickfix/n QuickFix.FieldConvertError: 无法转换字段: 无法将字符串转换为 int (N)
【发布时间】:2020-05-29 02:15:41
【问题描述】:

我收到以下错误,不知道为什么(没有其他错误):

    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# 编写的,但这并不重要,因为传入的消息甚至没有命中我的代码。

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

【问题讨论】:

  • 您正在尝试(在某处)调用转换“QuickFix.Fields.Converters.IntConverter.Convert(String i)”您是否正在尝试转换这部分行消息,因为这不是诠释? “20200513-19:34:28.76856”仔细检查您进行此转换的位置。您也可以随时尝试使用 C# 异常设置进行调试以获取错误。然后检查给定的值。
  • @Pimenta 谢谢你的建议。不过,在我的应用程序中并没有发生这种转换。它发生在 QuickFix 中,遗憾的是我无法调试。此外,标签 52 是 type="UTCTIMESTAMP"。为了以防万一,我在DD里把类型改成了STRING,但是还是走转换错误。
  • 问题,您是如何将这些消息输入您的应用程序的 - 您是否有一个您可以控制的模拟器,或者您是否连接到一个真实的交易对手?您发布的示例消息还缺少预告片,您有完整有效的示例消息吗?
  • @dsolimano 我连接到一个真实的交易对手。而且我还有一个模拟器,可以像上面那样发送自定义消息以进行故障排除。但是,看起来问题在他们这边!他们在发送消息时将标签排序错误。

标签: c# quickfix fix-protocol quickfixn


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-05-10
    • 2019-02-25
    • 2020-10-20
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多