2012-11-03 6 views
7

Rozważam, czy IbPy może być dobrym sposobem na nawiązanie połączenia z interfejsem API Interactive Brokers. Jestem teraz, jako test, próbuję zebrać kilka migawek cen akcji, aby sprawdzić, czy mogę przekonać IbPy do pracy dla mnie. Używam Brokertronu do połączenia z IB.IbPy: Jak wyodrębnić odpowiedź API do zmiennej

Otrzymuję żądaną cenę akcji z powrotem od API IB dokładnie (z przykładowego kodu z obsługą błędów, które znalazłem, patrz poniżej), więc technicznie działa w kierunku IB API, ale nie mogę jak wyodrębnić określone pole (pole = 4, cena = 175,95 poniżej) do zmiennej do późniejszego wykorzystania.

Jakieś pomysły, jak uzyskać zawartość pola 4 w zmiennej? Dzięki!

Python przykład skrypt:

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 wyjście liniowe:

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 
+0

Problem rozwiązany: –

Odpowiedz

5

To działa!

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 
Powiązane problemy