2016-10-21 4 views
2

Ich möchte den Status meiner früheren Bestellungen erhalten. Ich habe den folgenden einfachen Code, aber ich bekomme nur True/False-Werte. Hier ist mein Code:IBpy Bestellstatus-Update erhalten

from ib.opt import Connection, message 

tws_conn = Connection.create(port=7497, clientId=999) 
tws_conn.connect() 

def acct_update(msg): 
    print msg 

tws_conn.register(acct_update, message.openOrder) 
tws_conn.register(acct_update, message.orderStatus) 

hier ist die Ausgabe:

>>> from ib.opt import Connection, message 
>>> 
>>> tws_conn = Connection.create(port=7497, clientId=999) 
>>> tws_conn.connect() 
Server Version: 76 
TWS Time at connection:20161021 18:53:42 EST 
True 
>>> 
>>> def acct_update(msg): 
...  print msg 
... 
>>> tws_conn.register(acct_update, message.openOrder) 
True 
>>> tws_conn.register(acct_update, message.orderStatus) 
True 
>>> 
>>> 

Wie kann ich die Liste der offenen Aufträge bekommen? und wie bekomme ich den Status einer individuellen Bestellung?

Danke.

Antwort

0

Sie haben vergessen zu fragen! Fügen Sie eine Zeile tws_conn.reqOpenOrders() hinzu, um die Bestellungen zu erhalten. Sie sehen sowohl einen OpenOrder- als auch einen OrderStatus-Callback. Vielleicht möchten Sie eine Zeile tws_conn.register(acct_update, message.openOrderEnd) hinzufügen, um zu wissen, wann Sie OpenOrders abgeschlossen haben. Ich habe nie getestet, dass und wie üblich Menschen diese Fragen am Freitag Abend fragen;)

Wenn Sie Aufträge von allen Clients und TWS platziert wollen verwenden tws_conn.reqAllOpenOrders()

Hier eine Probe aus einem Auftrag in TWS gerade platziert ist (clientId = 0) aber wird offensichtlich nicht für ein paar Tage füllen.

<openOrder orderId=0, contract=<ib.ext.Contract.Contract object at 0x00000000041FA0F0>, order=<ib.ext.Order.Order object at 0x00000000043FF080>, orderState=<ib.ext.OrderState.OrderState object at 0x00000000043FF5C0>>

<orderStatus orderId=0, status=PreSubmitted, filled=0, remaining=1, avgFillPrice=0.0, permId=1905611953, parentId=0, lastFillPrice=0.0, clientId=0, whyHeld=None>

<openOrderEnd>

Hinweis gibt es eine API „Download offenen Aufträge auf der Verbindung“ Einstellung, aber es ist unzuverlässig und es ist am besten, wenn Sie den Überblick über Aufträge auf eigene Faust halten und fragen für Hinrichtungen. Sehen Sie ... wenn eine Bestellung gefüllt ist, während Sie nicht verbunden sind, dann ist es keine offene Bestellung mehr und Sie werden es nicht bekommen.

Die true 's sind nur, was die Befehlszeile für diese Befehle druckt ... bedeutet, dass nichts schief gelaufen ist, denke ich.