4

Im trying to replicate a MarketDataRequest in Python that I have in Java but cant find any code example. Has anyone any experience with Python and Quickfix

The Java code looks like this:

MarketDataRequest mdr = new MarketDataRequest();

if (subscribed)
{
    mdr.set(new SubscriptionRequestType(SubscriptionRequestType.DISABLE_PREVIOUS_SNAPSHOT_PLUS_UPDATE_REQUEST));
    Session.sendToTarget(mdr, sessionId);
}

mdr.set(new MDReqID("1"));
mdr.set(new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES));
mdr.set(new MarketDepth(0));
mdr.set(new MDUpdateType(MDUpdateType.INCREMENTAL_REFRESH));

mdr.set(new NoMDEntryTypes(2));

MarketDataRequest.NoMDEntryTypes entries = new MarketDataRequest.NoMDEntryTypes();
entries.set(new MDEntryType(MDEntryType.BID));
mdr.addGroup(entries);
entries.set(new MDEntryType(MDEntryType.OFFER));
mdr.addGroup(entries);

mdr.set(new NoRelatedSym(pairs.size()));

MarketDataRequest.NoRelatedSym symbols = new MarketDataRequest.NoRelatedSym();

for (String pair : pairs)
{
    symbols.set(new Instrument(new Symbol(pair)));
    mdr.addGroup(symbols);
}

Session.sendToTarget(mdr, sessionId);

So far in Python I have this:

mdr = fix.Message()
mdr.getHeader().setField(fix.BeginString(fix.BeginString_FIX44))
mdr.getHeader().setField(fix.MsgType(fix.MsgType_MarketDataRequest))

mdr.setField(fix.MDReqID('1'))
mdr.setField(fix.SubscriptionRequestType(fix.SubscriptionRequestType_SNAPSHOT_PLUS_UPDATES))
mdr.setField(fix.MarketDepth(0))
mdr.setField(fix.NoMDEntryTypes(2))
mdr.setField(fix.MDUpdateType(fix.MDUpdateType_INCREMENTAL_REFRESH))
Christian
  • 3,708
  • 3
  • 39
  • 60

1 Answers1

4

woo! Solved my own problem

mdr = fix.Message()
mdr.getHeader().setField(fix.BeginString(fix.BeginString_FIX44))
mdr.getHeader().setField(fix.MsgType(fix.MsgType_MarketDataRequest))

mdr.setField(fix.MDReqID('1'))
mdr.setField(fix.SubscriptionRequestType(fix.SubscriptionRequestType_SNAPSHOT_PLUS_UPDATES))
mdr.setField(fix.MarketDepth(0))
mdr.setField(fix.NoMDEntryTypes(2))
mdr.setField(fix.MDUpdateType(fix.MDUpdateType_INCREMENTAL_REFRESH))

group = fixnn.MarketDataRequest().NoMDEntryTypes()
group.setField(fix.MDEntryType(fix.MDEntryType_BID))
mdr.addGroup(group)
group.setField(fix.MDEntryType(fix.MDEntryType_OFFER))
mdr.addGroup(group)

mdr.setField(fix.NoRelatedSym(len(new_pairs)))

symbol = fixnn.MarketDataRequest().NoRelatedSym()
for pair in new_pairs:
    symbol.setField(fix.Symbol(pair))
    mdr.addGroup(symbol)

fix.Session.sendToTarget(mdr, sessionID)
Christian
  • 3,708
  • 3
  • 39
  • 60
  • Hey @Christian, I am trying to use this code but I am getting this error `Incorrect number in group count for tag` – cpz Dec 28 '16 at 15:10
  • @cpz - did you solve the problem? Does this help http://stackoverflow.com/questions/15058116/incorrect-numingroup-count-for-repeating-group-quickfix – Christian Jan 03 '17 at 22:04
  • thanks @christian. I had some another issue which is now solved. I had to use AppDataDictionary instead of DataDictionary. – cpz Jan 04 '17 at 02:29
  • Hi @Christian, I am got this error: "global name 'fixnn' is not defined". new_pairs is undefined as well. – ViniCoder Mar 08 '17 at 14:43
  • 1
    @ViniCoder I reckon it would be something like this for example: `import quickfix44 as fixnn new_pairs = ['EUR/USD', 'GBP/USD']` – Antonbass Mar 22 '17 at 19:52