Downloading Data from Interactive Brokers using IbPy
Downloading Data from Interactive Brokers using IbPy
Loading saved threads...
Escachator · External communityPost link
External question — Quantitative Finance Stack Exchange
Author: Escachator
Original post: https://quant.stackexchange.com/questions/17033
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
I am trying to download data from Interactive Broker using the code below and I am able to create the connection with the Trader Work Station (I get a "True" after
con.connect()
) but there is no output, i.e. the
dataDownload
variable becomes empty.
Anyone know why this can be?
# Adapted from: http://godelsmarket.blogspot.co.uk/2012/07/non-gui-ib-historical-data-downloader.html
from time import sleep, strftime, localtime
from ib.ext.Contract import Contract
from ib.opt import ibConnection, message
new_symbolinput = ['EUR.USD']
newDataList = []
dataDownload = []
def historical_data_handler(msg):
global newDataList
#print msg.reqId, msg.date, msg.open, msg.high, msg.low, msg.close, msg.volume
if ('finished' in str(msg.date)) == False:
new_symbol = new_symbolinput[msg.reqId]
dataStr = '%s, %s, %s, %s, %s, %s, %s' % (new_symbol, strftime("%Y-%m-%d %H:%M:%S", localtime(int(msg.date))), msg.open, msg.high, msg.low, msg.close, msg.volume)
newDataList = newDataList + [dataStr]
else:
new_symbol = new_symbolinput[msg.reqId]
filename = 'minutetrades' + new_symbol + '.csv'
csvfile = open('csv_day_test/' + filename,'wb')
for item in newDataList:
csvfile.write('%s \n' % item)
csvfile.close()
newDataList = []
global dataDownload
dataDownload.append(new_symbol)
con = ibConnection()
con.register(historical_data_handler, message.historicalData)
con.connect()
symbol_id = 0
for i in new_symbolinput:
print i
qqq = Contract()
qqq.m_symbol = i
qqq.m_secType = 'STK'
qqq.m_exchange = 'SMART'
qqq.m_currency = 'USD'
con.reqHistoricalData(symbol_id, qqq, '', '1 D', '1 min', 'TRADES', 1, 2)
symbol_id = symbol_id + 1
sleep(0.5)
print dataDownload
Quote
Report
Sagaponack FX · External communityPost link
External answer — Quantitative Finance Stack Exchange
Author: Sagaponack FX
Original post: https://quant.stackexchange.com/a/17091
License: CC BY-SA 3.0 — https://creativecommons.org/licenses/by-sa/3.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
You'll want to adjust the contract inputs you're sending to IB
secType should be CASH,
exchange should be IDEALPRO,
and add in whatToShow = "MIDPOINT" or "BID" or "ASK"
Quote
Report
Post Reply
Quoted from Forex.com.bd-Editorial External question — Quantitative Finance Stack Exchange Author: Escachator Source score (net votes, not local likes): 4 Original post: https://quant.stackexchange.com/questions/17033 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. I am trying to download data from Interactive Broker using the code below and I am able to create the connection with the Trader Work Station (I get a "True" after con.connect() ) but there is no output, i.e. the dataDownload variable becomes empty. Anyone know why this can be? # Adapted from: http://godelsmarket.blogspot.co.uk/2012/07/non-gui-ib-historical-data-downloader.html from time import sleep, strftime, localtime from ib.ext.Contract import Contract from ib.opt import ibConnection, message new_symbolinput = ['EUR.USD'] newDataList = [] dataDownload = [] def historical_data_handler(msg): global newDataList #print msg.reqId, msg.date, msg.open, msg.high, msg.low, msg.close, msg.volume if ('finished' in str(msg.date)) == False: new_symbol = new_symbolinput[msg.reqId] dataStr = '%s, %s, %s, %s, %s, %s, %s' % (new_symbol, strftime("%Y-%m-%d %H:%M:%S", localtime(int(msg.date))), msg.open, msg.high, msg.low, msg.close, msg.volume) newDataList = newDataList + [dataStr] else: new_symbol = new_symbolinput[msg.reqId] filename = 'minutetrades' + new_symbol + '.csv' csvfile = open('csv_day_test/' + filename,'wb') for item in newDataList: csvfile.write('%s \n' % item) csvfile.close() newDataList = [] global dataDownload dataDownload.append(new_symbol) con = ibConnection() con.register(historical_data_handler, message.historicalData) con.connect() symbol_id = 0 for i in new_symbolinput: print i qqq = Contract() qqq.m_symbol = i qqq.m_secType = 'STK' qqq.m_exchange = 'SMART' qqq.m_currency = 'USD' con.reqHistoricalData(symbol_id, qqq, '', '1 D', '1 min', 'TRADES', 1, 2) symbol_id = symbol_id + 1 sleep(0.5) print dataDownload
Checking account access…