IB API Quote requests inconsistantly filled

Discussion in 'App Development' started by igopogo, Jul 20, 2014.

  1. igopogo

    igopogo

    Hello,

    I am sending quote requests to TWS from C++. The requests seem to get there according to the log, but I only get replies half the time. I'm sending two requests at a time, sometimes I get zero back, sometimes one, sometimes two. Any ideas? I'm hoping this is a common/easy problem, but my search has been fruitless.

    Here's the log. In this case I made requests with ID's 10 and 11, but only 10 came back (sometimes only 11 might come back, sometimes neither, sometimes both). I didn't include any code, since the request seems to make it to TWS, but let me know if any more info would help.

    Code:
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:INFO] Start processing incoming messages for client {100}.
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:INFO] Handling incoming ReqMarketDataType message.
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Started reading message:
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished reading message:
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] ee::[version=1,enableFrozenMktData=false]
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Start validating message:
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished validating message:
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Started processing message:
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:INFO] RequestMktDataType
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished processing message:
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:INFO] Handling incoming ReqMktData message.
    NX 09:58:27:052 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Started reading message:
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished reading message:
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] vd::[version=10,ID=10,action=null,reqDesc=Symbol=MSFT  Type=STK  Expiry=null  Strike=0.0  Put/Call=?  Exchange=SMART  CompExch=null  Currency=USD  Multiplier=null  IbLocalSymbol=null  IbTradingClass=null  SecIdType=null  SecId=null  includeExpired=false  newsSource=null  Legs=null  Special Info=null,combo=null,genericTickList=null]
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] [10;10;0;MSFT;STK;null;0;2;null;SMART;null;USD;null;null;null;true]
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Start validating message:
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished validating message:
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Started processing message:
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:INFO] Requested market data.
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished processing message:
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:INFO] Handling incoming ReqMktData message.
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Started reading message:
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished reading message:
    NX 09:58:27:053 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] vd::[version=10,ID=11,action=null,reqDesc=Symbol=ORCL  Type=STK  Expiry=null  Strike=0.0  Put/Call=?  Exchange=SMART  CompExch=null  Currency=USD  Multiplier=null  IbLocalSymbol=null  IbTradingClass=null  SecIdType=null  SecId=null  includeExpired=false  newsSource=null  Legs=null  Special Info=null,combo=null,genericTickList=null]
    NX 09:58:27:054 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] [10;11;0;ORCL;STK;null;0;2;null;SMART;null;USD;null;null;null;true]
    NX 09:58:27:054 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Start validating message:
    NX 09:58:27:054 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished validating message:
    NX 09:58:27:054 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Started processing message:
    NX 09:58:27:054 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:INFO] Requested market data.
    NX 09:58:27:054 JTS-EServerSocket-3981: [100:61:71:1:0:0:0:DET] Finished processing message:
    NX 09:58:27:635 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:635 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;9;44.69;non-eligible;0]
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;1;null;eligible;0]
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;2;null;eligible;0]
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:58:1:INFO] Sending market data type.
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;1;44.61;non-eligible;5]
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;2;44.69;non-eligible;2]
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;4;44.67;non-eligible;1]
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:INFO] Sending tick size.
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:DET] [2;6;10;0;5]
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:INFO] Tick size sent.
    NX 09:58:27:636 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:INFO] Sending tick size.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:DET] [2;6;10;3;2]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:INFO] Tick size sent.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:INFO] Sending tick size.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:DET] [2;6;10;5;1]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:INFO] Tick size sent.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:INFO] Sending tick size.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:DET] [2;6;10;8;423733]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:2:6:INFO] Tick size sent.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;6;44.84;non-eligible;0]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;7;44.25;non-eligible;0]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;9;44.53;non-eligible;0]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;14;44.65;non-eligible;0]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:46:6:INFO] Sending generic tick.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:46:6:DET] [46;6;10;45;1405727916]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:46:6:INFO] Generic tick sent.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:45:6:INFO] Sending generic tick.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:45:6:DET] [45;6;10;49;0.0]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:45:6:INFO] Generic tick sent.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;50;null;non-eligible;0]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;51;null;non-eligible;0]
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:INFO] Sending tick price.
    NX 09:58:27:637 JTS-usfarmDispatcher-3247: [100:61:71:1:0:1:6:DET] [1;6;10;52;null;non-eligible;0]
    NX 09:58:27:640 JTS-usfarmDispatcher-3247: [100:61:71:1:0:58:1:INFO] Sending market data type.
    NX 09:58:37:484 JTS-ushmdsDispatcher-3273: SCANNER:1:16 Scanner Result Entries:50
    NX 09:58:38:364 JTS-Snapshot-MktData-3983: [100:61:71:1:0:57:1:INFO] Sending Tick Snapshot end. ID = 10
    NX 09:58:38:364 JTS-Snapshot-MktData-3983: [100:61:71:1:0:57:1:INFO] Tick Snapshot sent. ID = 10
    NX 09:58:39:364 JTS-Snapshot-MktData-3983: [100:61:71:1:0:57:1:INFO] Sending Tick Snapshot end. ID = 11
    NX 09:58:39:364 JTS-Snapshot-MktData-3983: [100:61:71:1:0:57:1:INFO] Tick Snapshot sent. ID = 11
     
  2. I recall having issues like this when I was hardcoding or reusing IDs . Not sure if you're doing either of these things, but if you are:

    If you're not doing this already, you should use the ID returned by nextValidId:
    https://www.interactivebrokers.com/en/software/api/apiguide/java/nextvalidid.htm

    And make sure you're always incrementing the ID (don't cancel and reuse).

    I think I was running into situations where there were stale request IDs in my TWS session, maybe from previous API client runs, and subsequent runs which reused IDs would encounter problems (e.g. I would never get the callback - same as what you're seeing). Using whatever was returned by nextValidId() would prevent that.
     
  3. igopogo

    igopogo

    Doesn't seem to help, nor does using fresh, large, random ID's.

    I'm thinking it's because I'm trying to get quotes after hours. If I switch over to gateway I always get responses, but only the close price.

    Or...If I switch to real time data on TWS, I always get results, but again only the close price...on frozen data I get the problem. This seems backwards.

    I'll try during trading hours and see what happens. My day job doesn't leave me much time to code and tweak during trading hours so I wanted to get as close to live as possible, but I guess I can just simulate some live quotes.

    Thanks...if anyone has more ideas, please let me know.