I'm looking into if IbPy can be a good way for me to connect to Interactive Brokers trading API. I'm now, as a test, trying to collect some stock price snapshots, to see if I can get IbPy to work for me. I'm using the Brokertron gateway to connect with IB.
I get the requested stock price back from the IB API just fine (from some example code with error handling which I've found, see below), so technically it works towards the IB API, but I can't figure out how to extract the specific field (field=4, price=175.95 below) into a variable for later use.
Any ideas how to get field 4 content into a variable? Thanks!
Python example script:
import ib
from ib.ext.Contract import Contract
from ib.opt import ibConnection, message
from time import sleep
class Downloader(object):
def __init__(self,debug=False):
self.tws = ibConnection('localhost', 4001, 0)
if debug:
self.tws.registerAll(self.debugHandler)
self.tws.connect()
self._reqId = 1 # current request id
def debugHandler(self,msg):
print '[debug]', msg
def requestData(self,contract):
self.tws.reqMktData(self._reqId,c,'',1)
self._reqId+=1
return "???"
if __name__=='__main__':
dl = Downloader(debug=True)
c = Contract()
c.m_symbol = 'SPY'
c.m_secType = 'STK'
c.m_exchange = 'SMART'
c.m_currency = 'USD'
laststockpricefield4 = dl.requestData(c)
print laststockpricefield4
sleep(3)
print 'Done.'
Commande line output:
01-Nov-12 22:30:43 DEBUG Server Version: 65
01-Nov-12 22:30:43 DEBUG TWS Time at connection: 20121101 22:30:43 GMT
???
[debug] ManagedAccounts accountsList=DU15144>
[debug] NextValidId orderId=1>
[debug] TickString tickerId=1, tickType=45, value=1351808899>
[debug] TickPrice tickerId=1, field=4, price=175.95, canAutoExecute=0>
[debug] TickSize tickerId=1, field=5, size=1>
[debug] TickGeneric tickerId=1, tickType=49, value=0.0>
[debug] TickPrice tickerId=1, field=1, price=176.03, canAutoExecute=1>
[debug] TickSize tickerId=1, field=0, size=378>
[debug] TickPrice tickerId=1, field=2, price=176.05, canAutoExecute=1>
[debug] TickSize tickerId=1, field=3, size=344
This works!
import re
import ib
from ib.ext.Contract import Contract
from ib.opt import ibConnection, message
from time import sleep
class Downloader(object):
field4price = ''
def __init__(self):
self.tws = ibConnection('localhost', 4001, 0)
self.tws.register(self.tickPriceHandler, 'TickPrice')
self.tws.connect()
self._reqId = 1 # current request id
def tickPriceHandler(self,msg):
if msg.field == 4:
self.field4price = msg.price
#print '[debug]', msg
def requestData(self,contract):
self.tws.reqMktData(self._reqId, contract, '', 1)
self._reqId+=1
if __name__=='__main__':
dl = Downloader()
c = Contract()
c.m_symbol = 'SPY'
c.m_secType = 'STK'
c.m_exchange = 'SMART'
c.m_currency = 'USD'
dl.requestData(c)
sleep(3)
print 'Price - field 4: ', dl.field4price
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With