0

i'm trying to get bid and ask a primeXM broker. but i don't know what i'm doing wrong. could anyone show me an example of an answer to Massquote?

As soon as I get a MassQuote response, I'm sending a MassQuoteAsk, but the error "Required tag missing" occurs.

The logs:

ToApp 8=FIX.4.4 |9=86 |35=V |34=2 |49=XXXX|52=20200826-15:10:02.528 |56=XXXX |262=0 |263=1 |264=0 |146=1 |55=USD/JPY |10=205 |
FromApp 8=FIX.4.4 |9=135 |35=i |34=2 |49=XC80 |52=20200826-15:10:02.769 |56=Q097 |117=1 |296=1 |302=0 |295=1 |299=0 |106=10 |134=3000000 |135=1000000 |188=106.11 |190=106.112 |10=048 |
OnMessage MassQuote 8=FIX.4.4 |9=135 |35=i |34=2 |49=XC80 |52=20200826-15:10:02.769 |56=Q097 |117=1 |296=1 |302=0 |295=1 |299=0 |106=10 |134=3000000 |135=1000000 |188=106.11 |190=106.112 |10=048 |
ToApp 8=FIX.4.4 |9=57 |35=b |34=3 |49=XXXX|52=20200826-15:10:02.814 |56=XXXX |117=1 |10=002 |
ToAdmin 8=FIX.4.4 |9=100 |35=3 |34=4 |49=XXXX|52=20200826-15:10:02.931 |56=XXXX |45=3 |58=Required tag missing |371=117 |372=i |373=1 |10=238 |


Request of MarketData:

    private void QueryMarketDataRequest() {
      MDReqID mdReqId = new MDReqID(GetFreeID);
      SubscriptionRequestType subscriptionRequestType =
        new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES);
      MarketDepth marketDepth = new MarketDepth(0);

      MarketDataRequest.NoRelatedSymGroup symbolGroup = new MarketDataRequest.NoRelatedSymGroup();
      symbolGroup.Set(new Symbol("USD/JPY"));

      MarketDataRequest message = new MarketDataRequest(mdReqId, subscriptionRequestType, marketDepth);
      message.AddGroup(symbolGroup);

      SendMessage(message);
    }

MassQuote message response:

    public void OnMessage(MassQuote message, SessionID sessionId) {
      _logger.LogDebug($"OnMessage MassQuote {message}");

      MassQuoteAcknowledgement m = new MassQuoteAcknowledgement();
      m.QuoteID = message.QuoteID;
      SendMessage(m);
    }

2 Answers2

1

It sounds like you need to get ahold of PrimeXM's connection specification and update your DataDictionary XML file to match it.

For instance, if their spec indicates that they are not going to send 117 in their MassQuote message, then you need remove 117 from the MassQuote definition in your dictionary.

Grant Birchmeier
  • 17,809
  • 11
  • 63
  • 98
  • I am trying to edit the dic to support PrimeXM. Thanks. – Johnathan David Aug 26 '20 at 19:23
  • I modified it like this `` and it worked! – Johnathan David Aug 26 '20 at 19:36
  • 1
    There will surely be more places. If PrimeXM has a specification, you should use it to make sure your DD conforms. Doing it correctly now will save you some headaches later. – Grant Birchmeier Aug 27 '20 at 03:57
  • i saw in the PrimeXM document, and the QuoteId was not mandatory. now i just need the price rate, and it's working perfectly. i believe that when i need to order i'll have more problems with the dictionary. but i understood the right way to solve the dictionary problems with you. THanks :P – Johnathan David Aug 27 '20 at 18:42
0

my .cfg was UseDataDictionary=Y, but sometimes it seems that PrimeXM answers MassQuote (MsgType=i) without QuoteID (117), but in my FIX44.xml 117 is set as required. and this was causing the error.

so I changed .cfg UseDataDictionary=N and it stopped giving the error.

I don't know why PrimeXM sends MassQuote without QuoteID, but I think I solved my problem.

Thanks.

dbug: QuickFix.IApplication[0]
      FromApp 8=FIX.4.4╔9=95╔35=i╔34=63╔49=XC80╔52=20200826-16:58:12.444╔56=Q097╔106=10╔190=106.008╔295=1╔296=1╔299=0╔302=0╔10=229╔
dbug: QuickFix.IApplication[0]
      OnMessage MassQuote 8=FIX.4.4╔9=95╔35=i╔34=63╔49=XC80╔52=20200826-16:58:12.444╔56=Q097╔106=10╔190=106.008╔295=1╔296=1╔299=0╔302=0╔10=229╔
warn: QuickFix.IApplication[0]
      field not found for tag: 117
  • 1
    `UseDataDictionary=N` wll let you run in all sorts of problems once you are trying to parse repeating groups, so it "fixed" your current problem but will most probably cause follow-up problems later on. – Christoph John Aug 26 '20 at 17:51
  • 1
    As I'm starting with FIX recently, I didn't know the importance of UseDataDictionary=Y. but now I'll always try to solve the problem by keeping UseDataDictionary=Y – Johnathan David Aug 26 '20 at 19:22
  • 2
    It's a common mistake among newcomers. Glad we corrected you early :) – Grant Birchmeier Aug 27 '20 at 03:58