For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See:

Help with Data Feed not recognized for IB Live Trading

  • Hi ,

    I'm trying to add the following datafeed (TICK-NYSE) to the ibstore, but i keep getting a disconnected error (all other feeds working fine).

    Interestingly, I tested this ticker with a direct call to IB (using reqMktData() and reqHistoricalData() in a separate program (see below), and was able to get the data (TickTypes 1,2, and 4 had information, and TickType 4 ('LAST') was the data i needed.

    Wondering if this has to do with the fact that the sectype is an "IND" - saw you had some exception handling in files like '' for other sectypes like "CASH", but couldn't quite follow the code (I'm still a Python novice).

    Any ideas on how to get this data working? Thanks in advance....

    Backtrader Data Feed code:

    store = bt.stores.IBStore(host='',
    			clientId = 100)
    for i,j in enumerate(indexdatalist):
    	tickdata = store.getdata(dataname=j,
    				what = 'TRADES',
    				tz = pytz.timezone('US/Central'),
    				sessionstart = session_start,
    				sessionend = session_end,

    Here is the error message:

    Datas in Strategy TICK-NYSE0
    Start preloading data to meet minimum data requirements

    Here is the separate program (direct call to IB outside backtrader framework) where data feed works:

    from ibapi.client import EClient
    from ibapi.wrapper import EWrapper
    import threading
    import time
    from ibapi.ticktype import TickTypeEnum	
    from ibapi.contract import Contract
    #from ibapi.ticktype import TickTypeEnum
    class IBapi(EWrapper, EClient):
        def __init__(self):
            EClient.__init__(self, self)
        def tickPrice(self, reqId, tickType, price, attrib):
        def historicalData(self, reqId, bar):
    	print(f'Time: {} Close: {bar.close}')[, bar.close])						
    def run_loop():
    app = IBapi()
    app.connect('', 7497, 100)
    #Start the socket in a thread
    api_thread = threading.Thread(target=run_loop, daemon=True)
    time.sleep(1) #Sleep interval to allow time for connection to server
    #Create contract object
    contract = Contract()
    contract.symbol = 'TICK-NYSE'
    contract.secType = 'IND' = 'NYSE'
    contract.currency = 'USD'
    #Request Market Data
    app.reqMktData(1, contract, '' , False, False, []) = [] #Initialize variable to store candle
    #Historical Candlestick data request
    app.reqHistoricalData(1, contract, '', '2 D', '1 hour', 'TRADES', 0, 2, True, [])
    time.sleep(10) #Sleep interval to allow time for incoming price data

    Here's the data loaded from the above program:

    ERROR:ibapi.wrapper:ERROR -1 2104 Market data farm connection is OK:usfarm
    ERROR:ibapi.wrapper:ERROR -1 2106 HMDS data farm connection is OK:ushmds.nj
    ERROR:ibapi.wrapper:ERROR -1 2106 HMDS data farm connection is OK:cashhmds
    ERROR:ibapi.wrapper:ERROR -1 2106 HMDS data farm connection is OK:ushmds
    ERROR:ibapi.wrapper:ERROR -1 2158 Sec-def data farm connection is OK:secdefnj
    Time: 1586352600 Close: -353.0
    Time: 1586354400 Close: 134.0
    Time: 1586358000 Close: 0.0
    Time: 1586361600 Close: -63.0
    Time: 1586365200 Close: -287.0
    Time: 1586368800 Close: 59.0
    Time: 1586372400 Close: 15.0
    Time: 1586439000 Close: 246.0
    Time: 1586440800 Close: 123.0
    Time: 1586444400 Close: 220.0
    Time: 1586448000 Close: -31.0
    Time: 1586451600 Close: -5.0
    Time: 1586455200 Close: 269.0
    Time: 1586458800 Close: -538.0
    ERROR:ibapi.wrapper:ERROR -1 2104 Market data farm connection is OK:usfarm.nj
    1 -1.0
    2 -1.0
    4 -402.0
    9 0.0
    4 -334.0
    4 -234.0
    4 -218.0
    4 -302.0

  • Just following up on this. I figured out why the ticker was not recognized (Backtrader's parsing logic parses with a '-' which was effectively splitting the ticker name into 2 separate parts) - I tweaked the code to bypass the parser for this ticker.

    I can now see prices streaming for TICK-NYSE, but only when i print "price" from within the RTVolume Class of When outputted by next() at my time interval, i only see prices of -1. Any ideas?

Log in to reply