交互式代理找不到请求的安全定义

2024-05-20 18:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从IBKR中获取特定股票的历史数据,但这里似乎没有调用testApp()函数。我可以连接到TWS站,但不知怎么的,我没有被反馈数据,所以我想知道我的包装器函数是否有什么问题

另外,当我运行代码时,我会返回以下错误消息:“没有为请求找到安全定义”

关于如何解决这个问题,有什么建议吗

class TestClient(EClient):
    def __init__(self, wrapper):
        EClient.__init__(self, wrapper)


class TestWrapper(wrapper.EWrapper):
    def __init__(self):
        wrapper.EWrapper.__init__(self)


class TestApp(TestWrapper, TestClient):
    def __init__(self):
        TestWrapper.__init__(self)
        TestClient.__init__(self, wrapper=self)

    def error(self, reqid, errorcode, errorstring):
        print("Error: ", reqid, " ", errorcode, " ", errorstring)

    def historicalData(self, reqid: int, bar: BarData):
        print("HistoricalData. ReqId:", reqid, "BarData.", bar)

    def historicalDataUpdate(self, reqid: int, bar: BarData):
        print("HistoricalDataUpdate. ReqId:", reqid, "BarData.", bar)

    def historicalDataEnd(self, reqid: int, start: str, end: str):
        print("HistoricalDataEnd. ReqId:", reqid, "from", start, "to", end)
        app.disconnect()
        print("Finished")

    def nextValidId(self, orderId: int):
        super().nextValidId(orderId)

        logging.debug("setting nextValidOrderId: %d", orderId)
        self.nextValidOrderId = orderId
        print("NextValidId:", orderId)

    def contractDetails(self, reqId: int, contractDetails: ContractDetails):
        super().contractDetails(reqId, contractDetails)
        printinstance(contractDetails)
        self.reqContractDetails(10004, ContractSamples.NewsFeedForQuery())

    def contractDetailsEnd(self, reqId: int):
        super().contractDetailsEnd(reqId)
        print("ContractDetailsEnd. ReqId:", reqId)


def main():
    app = TestApp()
    app.connect("127.0.0.1", 7497, clientId=1)
    print(app.isConnected())
    time.sleep(1)

    contract = Contract()

    contract.secType = "STK"
    contract.symbol = "AAPL"
    contract.currency = "USD"
    contract.exchange = "NASDAQ"


    querytime = (datetime.datetime.today() - datetime.timedelta(days=180)).strftime("%Y%m%d %H:%M:%S")

    app.reqHistoricalData(4001, contract, querytime, "1 M", "1 day", "MIDPOINT", 1, 1, False, [])

    app.run()


if __name__ == "__main__":
    main()

Tags: selfappinitdefbarwrapperintprint
1条回答
网友
1楼 · 发布于 2024-05-20 18:21:23

交换机应该是智能的,以便智能路由到所有可用的交换机。如果你真的想使用纳斯达克,那么我认为交易所应该是孤岛。我知道它是有效的,因为我测试过它,但从未在实际交易中使用过它,比如回扣。我也不知道它是否会提供一次交易的历史数据,但我严重怀疑

您已经实现了contractDetails,因此始终可以首先调用它,然后通过指定contract.conId = 265598来交易AAPL

相关问题 更多 >