1
$\begingroup$

Hi I'm having trouble with the Interactive Broker python API. I'm using python 3.8 and connecting to IB TWS ver. 979

when I run this symbol script I get the following error:

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract

import threading
import time



class IBapi(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)
    def tickPrice(self, reqId, tickType, price, attrib):
        if tickType == 2 and reqId == 1:
            print('The current ask price is: ', price)

def run_loop():
    app.run()

app = IBapi()
app.connect('127.0.0.1', 7497, 123)

#Start the socket in a thread
api_thread = threading.Thread(target=run_loop, daemon=True)
api_thread.start()

time.sleep(1) #Sleep interval to allow time for connection to server

fut_contract = Contract()
fut_contract.symbol = "MNQU0" #MNQ SEP'20"
fut_contract.secType = 'FUT'
fut_contract.exchange = 'GLOBEX'
fut_contract.currency = 'USD'
fut_contract.LocalSymbol = 'MNQU0'
fut_contract.LastTradeDateOrContractMonth = "202009";

#Request Market Data
app.reqMktData(1, fut_contract, '', False, False, [])

time.sleep(100) #Sleep interval to allow time for incoming price data
app.disconnect()

Error:

Error 1 321 error validating request:-'bW' : cause - Please enter a local symbol or expiry

I can't see what I'm doing wrong. I can't find any other Contact() field relating to expiry.

Thanks

$\endgroup$
  • 2
    $\begingroup$ You're probably better of asking IB tech support. $\endgroup$ – Dimitri Vulis Jul 10 at 16:19
  • 3
    $\begingroup$ ..or at a specialized group like this groups.io/g/twsapi $\endgroup$ – noob2 Jul 10 at 16:50
3
$\begingroup$

Try changing LocalSymbol to tradingClass and changing Last..Month to last..Month:

fut_contract = Contract()
fut_contract.symbol = 'MNQU0' #MNQ SEP'20
fut_contract.secType = 'FUT'
fut_contract.exchange = 'GLOBEX'
fut_contract.currency = 'USD'
fut_contract.tradingClass = 'MNQ'
fut_contract.lastTradeDateOrContractMonth = '202009'

#Request Market Data
app.reqMktData(1, fut_contract, '', True, False, [])

I switched the 4th argument to True because I didn't want to request a stream, just a snapshot. Be careful with your upper and lower cases!

This is what is returned for me when running your script with the changes I suggest:

The current ask price is:  10765.5
| improve this answer | |
$\endgroup$
  • $\begingroup$ Fixed! It seems that the change to tradingClass, was necessary only if the 4th arg was 'True'... Thank you!! $\endgroup$ – gearhead Jul 10 at 18:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.