Hi, I just started learning programming in python for trading with backtrader, now I'm doing some connection tests with IB Gateway-Backtrader with IbPY API. I can't understand why sometimes it works but most of the time the program seems that it can't download historical data to go and use live data. This is the simple test program: Code: import sys import time import backtrader as bt class Example(bt.Strategy): def logdata(self): txt = [] txt.append('{}'.format(len(self))) txt.append('{}'.format( self.data.datetime.datetime(0).isoformat()) ) txt.append('{:.2f}'.format(self.data.open[0])) txt.append('{:.2f}'.format(self.data.high[0])) txt.append('{:.2f}'.format(self.data.low[0])) txt.append('{:.2f}'.format(self.data.close[0])) txt.append('{:.2f}'.format(self.data.volume[0])) txt.append('operate:{}'.format(self.operate)) print(','.join(txt)) def notify_data(self, data, status, *args, **kwargs): if status == data.LIVE: # the data has switched to live data self.operate = True pass else: self.operate = False def next(self): self.logdata() self.buysell() def buysell(self): if self.operate == False: return print("buying 1000...") self.buy(size=1000) time.sleep(15) print("closing buy...") self.close() time.sleep(15) print("selling 1000...") self.sell(size=1000) time.sleep(15) print("closing sell...") self.close() time.sleep(15) # https://www.backtrader.com/docu/live/ib/ib/ if __name__ == "__main__": print("inizializzo Strategia Di Esempio") ticker = 'EUR.USD' print(ticker) cerebro = bt.Cerebro() print(1) store = bt.stores.IBStore(port=4002, notifyall=True, _debug=False, reconnect=-1) print(2) data = bt.feeds.IBData(dataname='EUR.USD-CASH-IDEALPRO', host='127.0.0.1', port=7496, clientId=35) print(3) #data = store.getdata(dataname=ticker, sectype='CASH', exchange='IDEALPRO', timeframe=bt.TimeFrame.Minutes) cerebro.resampledata(data, timeframe=bt.TimeFrame.Seconds, compression=15) cerebro.broker = store.getbroker() cerebro.addstrategy(Example) cerebro.run() and this is the output: Spoiler: output init example strategy EUR.USD Server Version: 76 TWS Time at connection:20211227 14:57:44 CET <managedAccounts accountsList=DU4825409> <nextValidId orderId=1> <error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:cashfarm> <error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:usfarm> <error id=-1, errorCode=2106, errorMsg=HMDS data farm connection is OK:cashhmds> <error id=-1, errorCode=2107, errorMsg=HMDS data farm connection is inactive but should be available upon demand.ushmds> <error id=-1, errorCode=2158, errorMsg=Sec-def data farm connection is OK:secdefil> <currentTime time=1640613464> <updateAccountValue key=AccountCode, value=DU4825409, currency=None, accountName=DU4825409> <updateAccountValue key=AccountOrGroup, value=DU4825409, currency=BASE, accountName=DU4825409> <updateAccountValue key=AccountOrGroup, value=DU4825409, currency=CAD, accountName=DU4825409> <updateAccountValue key=AccountOrGroup, value=DU4825409, currency=EUR, accountName=DU4825409> <updateAccountValue key=AccountOrGroup, value=DU4825409, currency=JPY, accountName=DU4825409> <updateAccountValue key=AccountOrGroup, value=DU4825409, currency=USD, accountName=DU4825409> <updateAccountValue key=AccountReady, value=true, currency=None, accountName=DU4825409> <updateAccountValue key=AccountType, value=INDIVIDUAL, currency=None, accountName=DU4825409> <updateAccountValue key=AccruedCash, value=-319.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=AccruedCash, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=AccruedCash, value=-319.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=AccruedCash, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=AccruedCash, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=AccruedCash-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=AccruedDividend, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=AccruedDividend-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=AvailableFunds, value=998383.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=AvailableFunds-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=Billable, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=Billable-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=BuyingPower, value=6655892.57, currency=EUR, accountName=DU4825409> <updateAccountValue key=CashBalance, value=998702.8855, currency=BASE, accountName=DU4825409> <updateAccountValue key=CashBalance, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=CashBalance, value=974715.2978, currency=EUR, accountName=DU4825409> <updateAccountValue key=CashBalance, value=2401665.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=CashBalance, value=6202.962, currency=USD, accountName=DU4825409> <updateAccountValue key=ColumnPrio-P, value=12, currency=None, accountName=DU4825409> <updateAccountValue key=ColumnPrio-S, value=3, currency=None, accountName=DU4825409> <updateAccountValue key=CorporateBondValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=CorporateBondValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=CorporateBondValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=CorporateBondValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=CorporateBondValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=Cryptocurrency, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=Cryptocurrency, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=Cryptocurrency, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=Cryptocurrency, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=Cryptocurrency, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=Currency, value=BASE, currency=BASE, accountName=DU4825409> <updateAccountValue key=Currency, value=CAD, currency=CAD, accountName=DU4825409> <updateAccountValue key=Currency, value=EUR, currency=EUR, accountName=DU4825409> <updateAccountValue key=Currency, value=JPY, currency=JPY, accountName=DU4825409> <updateAccountValue key=Currency, value=USD, currency=USD, accountName=DU4825409> <updateAccountValue key=Cushion, value=1, currency=None, accountName=DU4825409> <updateAccountValue key=EquityWithLoanValue, value=998383.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=EquityWithLoanValue-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=ExcessLiquidity, value=998383.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=ExcessLiquidity-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=ExchangeRate, value=1.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=ExchangeRate, value=0.6895466, currency=CAD, accountName=DU4825409> <updateAccountValue key=ExchangeRate, value=1.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=ExchangeRate, value=0.0077203, currency=JPY, accountName=DU4825409> <updateAccountValue key=ExchangeRate, value=0.8840756, currency=USD, accountName=DU4825409> <updateAccountValue key=FullAvailableFunds, value=998383.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=FullAvailableFunds-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FullExcessLiquidity, value=998383.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=FullExcessLiquidity-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FullInitMarginReq, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FullInitMarginReq-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FullMaintMarginReq, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FullMaintMarginReq-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FundValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=FundValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=FundValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FundValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=FundValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=FutureOptionValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=FutureOptionValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=FutureOptionValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FutureOptionValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=FutureOptionValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=FuturesPNL, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=FuturesPNL, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=FuturesPNL, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FuturesPNL, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=FuturesPNL, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=FxCashBalance, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=FxCashBalance, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=FxCashBalance, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=FxCashBalance, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=FxCashBalance, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=GrossPositionValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=GrossPositionValue-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=Guarantee, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=Guarantee-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=IndianStockHaircut, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=IndianStockHaircut-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=InitMarginReq, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=InitMarginReq-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=IssuerOptionValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=IssuerOptionValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=IssuerOptionValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=IssuerOptionValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=IssuerOptionValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=Leverage-P, value=0.00, currency=None, accountName=DU4825409> <updateAccountValue key=Leverage-S, value=0.00, currency=None, accountName=DU4825409> <updateAccountValue key=LookAheadAvailableFunds, value=998383.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=LookAheadAvailableFunds-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=LookAheadExcessLiquidity, value=998383.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=LookAheadExcessLiquidity-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=LookAheadInitMarginReq, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=LookAheadInitMarginReq-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=LookAheadMaintMarginReq, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=LookAheadMaintMarginReq-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=LookAheadNextChange, value=0, currency=None, accountName=DU4825409> <updateAccountValue key=MaintMarginReq, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=MaintMarginReq-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=MoneyMarketFundValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=MoneyMarketFundValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=MoneyMarketFundValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=MoneyMarketFundValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=MoneyMarketFundValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=MutualFundValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=MutualFundValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=MutualFundValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=MutualFundValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=MutualFundValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=NLVAndMarginInReview, value=false, currency=None, accountName=DU4825409> <updateAccountValue key=NetDividend, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=NetDividend, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=NetDividend, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=NetDividend, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=NetDividend, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=NetLiquidation, value=998383.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=NetLiquidation-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=NetLiquidationByCurrency, value=998383.8855, currency=BASE, accountName=DU4825409> <updateAccountValue key=NetLiquidationByCurrency, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=NetLiquidationByCurrency, value=974396.2978, currency=EUR, accountName=DU4825409> <updateAccountValue key=NetLiquidationByCurrency, value=2401665.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=NetLiquidationByCurrency, value=6202.962, currency=USD, accountName=DU4825409> <updateAccountValue key=NetLiquidationUncertainty, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=OptionMarketValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=OptionMarketValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=OptionMarketValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=OptionMarketValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=OptionMarketValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=PASharesValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=PASharesValue-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=PhysicalCertificateValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=PhysicalCertificateValue-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=PostExpirationExcess, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=PostExpirationExcess-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=PostExpirationMargin, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=PostExpirationMargin-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=RealCurrency, value=BASE, currency=BASE, accountName=DU4825409> <updateAccountValue key=RealCurrency, value=CAD, currency=CAD, accountName=DU4825409> <updateAccountValue key=RealCurrency, value=EUR, currency=EUR, accountName=DU4825409> <updateAccountValue key=RealCurrency, value=JPY, currency=JPY, accountName=DU4825409> <updateAccountValue key=RealCurrency, value=USD, currency=USD, accountName=DU4825409> <updateAccountValue key=RealizedPnL, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=RealizedPnL, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=RealizedPnL, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=RealizedPnL, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=RealizedPnL, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=SegmentTitle-P, value=Crypto at Paxos, currency=None, accountName=DU4825409> <updateAccountValue key=SegmentTitle-S, value=CFD, currency=None, accountName=DU4825409> <updateAccountValue key=StockMarketValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=StockMarketValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=StockMarketValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=StockMarketValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=StockMarketValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=TBillValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=TBillValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=TBillValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=TBillValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=TBillValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=TBondValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=TBondValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=TBondValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=TBondValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=TBondValue, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=TotalCashBalance, value=998702.8855, currency=BASE, accountName=DU4825409> <updateAccountValue key=TotalCashBalance, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=TotalCashBalance, value=974715.2978, currency=EUR, accountName=DU4825409> <updateAccountValue key=TotalCashBalance, value=2401665.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=TotalCashBalance, value=6202.962, currency=USD, accountName=DU4825409> <updateAccountValue key=TotalCashValue, value=998702.89, currency=EUR, accountName=DU4825409> <updateAccountValue key=TotalCashValue-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=TotalDebitCardPendingCharges, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=TotalDebitCardPendingCharges-P, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=TradingType-S, value=STKNOPT, currency=None, accountName=DU4825409> <updateAccountValue key=UnrealizedPnL, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=UnrealizedPnL, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=UnrealizedPnL, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=UnrealizedPnL, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=UnrealizedPnL, value=0.00, currency=USD, accountName=DU4825409> <updateAccountValue key=WarrantValue, value=0.00, currency=BASE, accountName=DU4825409> <updateAccountValue key=WarrantValue, value=0.00, currency=CAD, accountName=DU4825409> <updateAccountValue key=WarrantValue, value=0.00, currency=EUR, accountName=DU4825409> <updateAccountValue key=WarrantValue, value=0.00, currency=JPY, accountName=DU4825409> <updateAccountValue key=WarrantValue, value=0.00, currency=USD, accountName=DU4825409> <updatePortfolio contract=<ib.ext.Contract.Contract object at 0x000001D55FC33C40>, position=-24994, marketPrice=1.13112495, marketValue=-28271.34, averageCost=1.1307192, unrealizedPNL=-10.14, realizedPNL=-8.45, accountName=DU4825409> <updateAccountTime timeStamp=14:57> <updatePortfolio contract=<ib.ext.Contract.Contract object at 0x000001D55FC48190>, position=-21000, marketPrice=114.7475052, marketValue=-2409697.61, averageCost=114.365, unrealizedPNL=-8032.61, realizedPNL=0.0, accountName=DU4825409> <updateAccountTime timeStamp=14:56> <updateAccountTime timeStamp=14:57> <accountDownloadEnd accountName=DU4825409> <contractDetails reqId=16777216, contractDetails=<ib.ext.ContractDetails.ContractDetails object at 0x000001D55FC482B0>> <contractDetailsEnd reqId=16777216> <backtrader.feeds.ibdata.IBData object at 0x000001D55FC26EE0> *** DATA NOTIF: DELAYED <marketDataType reqId=16777217, marketDataType=1> What could be the problem?
It doesn't matter if seconds or minutes or days. I'm also curious why it's doing any switching between Delayed and Live. No clue what's going on underneath with backtrader. My recommendation would be to use the native IB API or ibpythonic so you can talk using the API directly.
according to the Backtrader documentation, it's in DELAYED mode when it's downloading the historical data and when it finishes it switches to LIVE. I'm using IbPY because was in the Backtrader documentation. Is there any test that I can do to find out what's the problem?
IbPy has long been abandoned. Not sure what BackTrader does when switching between delayed and live, it's not really required for the IB API. My suggestion is to look at the native IB API examples and try the same thing without the added complexity from IbPy and BT.
I tried to study the ib API, but I'm a beginner, at the moment I can't understand that documentation. Anyway, I've just noticed that with the TWS it works well, I don't understand why with ibgateway it works just sometimes...
Check versions. For API purposes, TWS and Gateway are exactly the same. Another issue can be if you're requesting data both in your real and paper account at the same time.