def get_data_ib(instrument, start, resolution="1 min", blotter=None, output_path=None): """ Downloads historical data from Interactive Brokers :Parameters: instrument : mixed IB contract tuple / string (same as that given to strategy) start : str Backtest start date (YYYY-MM-DD [HH:MM:SS[.MS]) :Optional: resolution : str 1 sec, 5 secs, 15 secs, 30 secs, 1 min (default), 2 mins, 3 mins, 5 mins, 15 mins, 30 mins, 1 hour, 1 day blotter : str Store MySQL server used by this Blotter (default is "auto detect") output_path : str Path to the location where the resulting CSV should be saved (default: ``None``) :Returns: data : pd.DataFrame Pandas DataFrame in a QTPyLib-compatible format and timezone """ global _ib_history_downloaded # load blotter settings blotter_args = load_blotter_args(blotter, logger=logging.getLogger(__name__)) # create contract string (no need for connection) ibConn = ezIBpy() ibConn.ibCallback = ibCallback if not ibConn.connected: ibConn.connect(clientId=0, port=int(blotter_args['ibport']), host=str(blotter_args['ibserver'])) # generate a valid ib tuple instrument = tools.create_ib_tuple(instrument) contract_string = ibConn.contractString(instrument) contract = ibConn.createContract(instrument) ibConn.requestHistoricalData(contracts=[contract], data="TRADES", resolution=resolution, lookback=tools.ib_duration_str(start), rth=False) while not _ib_history_downloaded: time.sleep(.1) ibConn.disconnect() data = ibConn.historicalData[contract_string] data['datetime'] = data.index return prepare_data(instrument, data, output_path=output_path)
def get_data_ib(instrument, start, resolution="1 min", blotter=None, output_path=None): """ Downloads historical data from Interactive Brokers :Parameters: instrument : mixed IB contract tuple / string (same as that given to strategy) start : str Backtest start date (YYYY-MM-DD [HH:MM:SS[.MS]) :Optional: resolution : str 1 sec, 5 secs, 15 secs, 30 secs, 1 min (default), 2 mins, 3 mins, 5 mins, 15 mins, 30 mins, 1 hour, 1 day blotter : str Store MySQL server used by this Blotter (default is "auto detect") output_path : str Path to the location where the resulting CSV should be saved (default: ``None``) :Returns: data : pd.DataFrame Pandas DataFrame in a QTPyLib-compatible format and timezone """ global _ib_history_downloaded # load blotter settings blotter_args = load_blotter_args( blotter, logger=logging.getLogger(__name__)) # create contract string (no need for connection) ibConn = ezIBpy() ibConn.ibCallback = ibCallback if not ibConn.connected: ibConn.connect(clientId=0, port=int(blotter_args['ibport']), host=str(blotter_args['ibserver'])) # generate a valid ib tuple instrument = tools.create_ib_tuple(instrument) contract_string = ibConn.contractString(instrument) contract = ibConn.createContract(instrument) ibConn.requestHistoricalData(contracts=[contract], data="TRADES", resolution=resolution, lookback=tools.ib_duration_str(start), rth=False) while not _ib_history_downloaded: time.sleep(.1) ibConn.disconnect() data = ibConn.historicalData[contract_string] data['datetime'] = data.index return prepare_data(instrument, data, output_path=output_path)