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
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.
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.