Я написал скрипт, который получает значение счетов от моей биржевой торговли, которая выглядит следующим образом (рабочие):Как преобразовать асинхронный шаблон проектирования в синхронный?
from ib.opt import ibConnection, message
def account_summary_handler(msg):
print(msg.tag, msg.value, msg.currency)
connection.cancelAccountSummary(1)
connection.disconnect()
connection = ibConnection(port=7497, clientId=100)
connection.register(account_summary_handler, 'AccountSummary')
connection.connect()
connection.reqAccountSummary(1, 'All', 'NetLiquidation')
Это в режиме реального времени API, поэтому, как только соединение открыто, обновление потокового воспроизведения и my_account_handler
вызывается при каждом обновлении.
Я хочу, чтобы получить баланс счета от другого синхронного сценария, что-то вроде, называется что-то вроде:
myaccount.account_summary()
Я написал то, что выглядит следующим образом (непроверенные):
class IBAccount(object):
def __init__(self):
self.clientId=100
self.port=7497
def connect(self):
self.connection = ibConnection(port=self.port, clientId=self.clientId)
def account_summary(self):
self.connection.register(self.account_summary_handler, 'AccountSummary')
connection.connect()
connection.reqAccountSummary(1, 'All', 'NetLiquidation')
def account_summary_handler(self, msg):
self.connection.cancelAccountSummary(1)
self.connection.disconnect()
return msg.value
Я считаю, что мне нужно account_summary() блокировать и возвращать фактическое значение учетной записи, а не возвращать ее через другую функцию.
Мой вопрос: Как мне получить account_summary(), чтобы вернуть значение учетной записи?
Кроме того, если я использую неподходящий шаблон дизайна для этого кода и не должен использовать класс, проконсультируйтесь.