IbPy: как извлечь ответ API в переменную

Я изучаю, если IbPy может быть хорошим способом для меня подключиться к Interactive Brokers trading API. Я сейчас, как тест, пытаюсь собрать некоторые снимки цен акций, чтобы узнать, могу ли я заставить IbPy работать на меня. Я использую шлюз Brokertron для подключения к IB.

Я получил запрошенную стоимость акций из IB API просто отлично (из некоторого примера кода с обработкой ошибок, который я нашел, см. Ниже), поэтому технически он работает с IB API, но я не могу понять, как извлечь конкретное поле (поле = 4, цена = 175,95 ниже) в переменную для последующего использования.

Любые идеи о том, как получить содержимое поля 4 в переменной? Благодаря!

Пример сценария Python:

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.' 

Вывод командной строки:

 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 

  • UnboundLocalError: локальная переменная 'url_request', на которую ссылаются перед присваиванием
  • Python: невозможно преобразовать unicode в строку
  • Как я могу вызвать скрипт python из сценария python
  • python обрабатывает длинные ints по-разному на Windows и Unix
  • Заменить команду в O.Rename
  • Ошибка Python с плавающей точкой 117.285 раунд до 117.28 не 117.29
  • В разных экземплярах класса используется одинаковое расположение памяти
  • Cython Speed ​​Boost против удобства использования
  • One Solution collect form web for “IbPy: как извлечь ответ API в переменную”

    Это работает!

     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 
    Python - лучший язык программирования в мире.