我使用的是交互式代理的ibapi,我通常被困在如何捕获返回的数据上。例如,根据api文档,当我请求reqAccountSummary()时,该方法通过accountSummary()传递数据。但他们的例子只打印数据。我曾尝试捕获数据或将其分配给变量,但他们的文档中没有任何地方显示如何执行此操作。我也在谷歌搜索,只找到register()和registerAll(),但这是来自ib.opt的,它不在最新的工作ibapi包中。
这是我的密码。您能告诉我如何修改accountSummary()以捕获数据吗?
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.common import *
class TestApp(EWrapper,EClient):
def __init__(self):
EClient.__init__(self,self)
# request account data:
def my_reqAccountSummary1(self, reqId:int, groupName:str, tags:str):
self.reqAccountSummary(reqId, "All", "TotalCashValue")
# The received data is passed to accountSummary()
def accountSummary(self, reqId: int, account: str, tag: str, value: str, currency: str):
super().accountSummary(reqId, account, tag, value, currency)
print("Acct# Summary. ReqId>:", reqId, "Acct:", account, "Tag: ", tag, "Value:", value, "Currency:", currency)
return value #This is my attempt which doesn't work
def main():
app = TestApp()
app.connect("127.0.0.1",7497,clientId=0)
app.my_reqAccountSummary1(8003, "All", "TotalCashValue") #"This works, but the data is print to screen. I don't know how to assign the received TotalCashValue to a variable"
# myTotalCashValue=app.my_reqAccountSummary1(8003, "All", "TotalCashValue") #"My attempt doesn't work"
# more code to stop trading if myTotalCashValue is low
app.run()
if __name__=="__main__":
main()
您不能在主功能中执行此操作,因为app。run
监听TWS的响应。一旦你正确设置了所有回调,主功能将在应用程序中永远循环。运行
。
您必须将代码直接放入帐户摘要
函数中。这就是这类程序的工作方式,您可以将逻辑直接放入回调函数中。您可以始终分配self.myTotalCashValue=value
以使其可用于类的其他部分,甚至可用于另一个线程。
--或者--
在线程中运行app.run并等待值返回,例如:
添加self_myTotalCashValue=value
到accountSummary,导入线程
和时间
,然后在main中添加如下内容:
t = threading.Thread(target=app.run)
t.daemon = True
t.start()
while not hasattr(app,"_myTotalCashValue"):
time.sleep(1)
print(app._myTotalCashValue)
和往常一样,在使用线程时,你必须小心使用app
和main
之间的共享内存。
问题内容: 以下代码给出了编译错误,提示“意外运行”: 我知道,如果正常调用函数就可以获取返回值,而无需使用goroutine。或者我可以使用频道等 我的问题是为什么不能从goroutine中获取像这样的返回值。 问题答案: 严格的答案是您 可以 做到。这可能不是一个好主意。下面的代码可以做到这一点: 这将产生一个新的goroutine,它将进行计算,然后将结果分配给。问题是:您将如何使用原始go
有许多关于如何在使用JavaScript Promise编程时使用“然后”和“捕获”的教程。然而,所有这些教程似乎都忽略了一个重要的点:从然后/捕获块返回以打破promise链。让我们从一些同步代码开始来说明这个问题: 本质上,我正在测试一个捕获的错误,如果不是我期望的错误,我会返回给调用方,否则程序将继续。然而,这种逻辑在Promise中不起作用: 这种逻辑用于我的一些单元测试,我希望函数以某种
我想要能够让我的catch请求用户输入文件名,直到文件名有效为止,有没有人能给我一个建议,如何安排我的代码做到这一点? 导入java.io.FileNotFoundException;导入java.util.scanner; public class Requierment2{public static void main(String[]args){ }
问题内容: 我想在其中捕获返回键,以便对当前标记的单元格执行某些操作。那就是:我希望用户在任何单元格处于高亮状态时按下键盘上的“返回/输入”键。按下该按钮应发出一种新方法。例如,显示带有该单元格内容的消息框。 如何将按回车键的事件连接到方法? 由于我是python的新手,所以我不知道该怎么做,并且感谢任何建议。 问题答案: 您的问题有点模棱两可。“捕捉返回键”是什么意思?有几种返回信息的方法。 如
问题内容: 我需要兑现承诺,以便可以通过封闭函数将其返回。我知道,由于正常的JavaScript范围,我可能无法按照编码的方式进行操作。有什么办法可以做到吗? 位于#1 的 console.log 会生成正确的数据。 console.log #2总是产生’a’; 任何指针将不胜感激。 问题答案: 许诺背后的基本原则之一是它是异步处理的。这意味着您无法创建承诺,然后立即在代码中同步使用其结果(例如,