python - 使用 IB API 请求市场数据一次可以工作一次 python
问题描述
我尝试在 VSCode 中运行 python 脚本来提取实时市场数据,它只会正确运行一次,给我输出卖价和买价。但是,当我尝试再次运行它时,什么也没有发生,没有输出。我需要重新启动我的 Trader 工作站才能让它再次工作。
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.ticktype import TickTypeEnum
class TestApp(EWrapper, EClient):
def __init__(self):
EClient.__init__(self, self)
def error(self, reqId, errorCode, errorString):
print("Error: " , reqId, " ", errorCode, " ", errorString)
def tickPrice(self, reqId, tickType, price, attrib):
if tickType == 2 and reqId == 1:
print("Ask price: ", price)
if tickType == 1 and reqId == 1:
print("Bid price: ", price)
def main():
app = TestApp()
app.connect("127.0.0.1", 7497, 1)
contract = Contract()
contract.symbol = "ES"
contract.lastTradeDateOrContractMonth = "202109"
contract.secType = "FUT"
contract.exchange = "GLOBEX"
contract.currency = "USD"
app.reqMktData(1, contract, "", True, False, [])
app.run()
if __name__ == "__main__":
main()
解决方案
您不会断开连接,因此 TWS 会保持连接。app.run() 线程仍在运行。您可以在获取数据后终止程序或断开连接。请注意,对于快照,您可以等待 11 秒后触发的 snapshotEnd 事件,然后您可以调用 disconnect()。
这是一个具有更好异步处理的示例。 https://stackoverflow.com/a/68026777/2855515
推荐阅读
- c# - 如何在 F# 代码中使用 Microsoft Coyote - 父类型中受保护的嵌套属性类型
- javascript - Web 表单:编辑用户“点”字段时的数据一致性
- django - 我怎样才能缩短这个 django 查看请求?
- xamarin.android - Xamarin.Android如何限制编辑文本字段只允许小数点前1个数字和小数点后2个数字?
- delphi - TChart 问题:我的条形图的条形应该均匀分布而不是重叠
- java - 处理索引 0 超出长度 0 的范围以验证用户方法
- php - 如何回显警报?
- wordpress - Wordpress 站点完成从一台服务器到另一台 wordpress 的迁移
- r - r闪亮应用程序中基于当前周的上周总和值
- android - 为什么 Navigator pushNamedAndRemoveUntil 没有按预期工作?