首页 > 解决方案 > 使用 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()

标签: pythonvisual-studio-codeinteractive-brokers

解决方案


您不会断开连接,因此 TWS 会保持连接。app.run() 线程仍在运行。您可以在获取数据后终止程序或断开连接。请注意,对于快照,您可以等待 11 秒后触发的 snapshotEnd 事件,然后您可以调用 disconnect()。

这是一个具有更好异步处理的示例。 https://stackoverflow.com/a/68026777/2855515


推荐阅读