2015-07-29 23 views
1

Я новичок в IBPy и очень заинтересован в том, чтобы узнать, как получить параметры учетной записи для нескольких учетных записей. Приведенный ниже код дает мне только результат в командной строке, но я не мог понять, как сохранить эту информацию в фреймворке данных. функция updateAccountValue() не имеет уникального идентификатора, который я могу использовать в качестве индекса для dataframe.отклик API ответов для нескольких учетных записей

from ib.opt import Connection, message 
import pandas as pd 
import time 

def error_handler(msg): 
    """Handles the capturing of error messages""" 
    print "Server Error: %s" % msg 

def updateAccount_handler(msg): 
    if msg.key in ['AccountType','NetLiquidation']: 
     print msg.key, msg.value 

if __name__ == "__main__": 
    conn = Connection.create(port=7497, clientId = 93) 
    conn.connect() 

    conn.register(error_handler, 'Error') 
    conn.register(updateAccount_handler,message.updateAccountValue) 

    # we can do a loop, i am just giving a simple example for 2 accounts 
    conn.reqAccountUpdates(1,"Uxxxx008") 
    time.sleep(0.5) 

    conn.reqAccountUpdates(1,"Uxxxx765") 
    time.sleep(0.5) 

    conn.disconnect() 

выхода выглядит следующим образом:

Server Version: 76 
TWS Time at connection:20150729 12:46:56 EST 
Server Error: <error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:usfuture> 
Server Error: <error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:usfuture.us> 
Server Error: <error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:usfarm> 
Server Error: <error id=-1, errorCode=2106, errorMsg=HMDS data farm connection is OK:ushmds> 
AccountType INDIVIDUAL 
NetLiquidation 2625.24 
AccountType IRA-ROTH NEW 
NetLiquidation 11313.83 

End цель состоит в том, чтобы хранить эти данные в формат панда dataframe с уникальным идентификатором номера счета.

ответ

1

Хорошо, IBpy работает в архитектуре отправителя/получателя. Я хотел бы предложить вам иметь глобальную переменную для хранения информации об учетной записи.

from ib.opt import Connection, message 
import pandas as pd 
import time 
class account_update : 
    acc_info = [] # list to store all your account info 
    # you can have list,tuple,panda dataframe or any data strucure I am using normal list to demonstrate 
    def error_handler(self,msg): 
     """Handles the capturing of error messages""" 
     print "Server Error: %s" % msg 

    def updateAccount_handler(self,msg): 
     if msg.key in ['AccountType','NetLiquidation']: 
      self.acc_info.append(msg.key, msg.value) 

    def main(self): 
     conn = Connection.create(port=7497, clientId = 93) 
     conn.connect() 

     conn.register(error_handler, 'Error') 
     conn.register(updateAccount_handler,message.updateAccountValue) 

     conn.reqAccountUpdates(1,"Uxxxx008") 
     time.sleep(0.5) 

     conn.reqAccountUpdates(1,"Uxxxx765") 
     time.sleep(0.5) 

     conn.disconnect() 

if __name__ == "__main__" : 
    account_update().main() 

Итак, логика проста, создайте глобальную переменную и создайте метод обработчика ответа для обновления глобальной переменной всякий раз, когда он получает ответ. Надеюсь, что он работает :)

+0

спасибо за помощь. Оно работает. – Edwin

Смежные вопросы