首页 > 解决方案 > 如何使用本机 Interactive Brokers Python API 创建条件订单?

问题描述

以下代码是 IB 提供的。我如何扩展它以创建条件订单,其中两个不同合约的价格可以在条件语句中用于执行所述合约的市场订单?

前任:if AAPL>SPY, "BUY" AAPL, else: "BUY" SPY...

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.ticktype import TickTypeEnum
from ibapi.utils import iswrapper #just for decorator
from ibapi.order import Order
from threading import Timer
import time

class TestApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)

    def error(self, reqId, errorCode, errorString):
        print("Error: ", reqId, " ", errorCode, " ", errorString)

    def nextValidId(self, orderId):
        self.nextOrderId = orderId
        self.start()

    def nextOrderId(self):
        oid = self.nextValidOrderId
        self.nextValidOrderId +=1
        return oid

    def orderStatus(self, orderId , status:str, filled:float,
                    remaining:float, avgFillPrice:float, permId:int,
                    parentId:int, lastFillPrice:float, clientId:int,
                    whyHeld:str, mktCapPrice: float):
        print(orderId, status, filled, remaining, lastFillPrice)

    def openOrder(self, orderId, contract: Contract, order: Order,
                  orderState):
        print("OpenOrder. ID:", orderId, "Symbol:", contract.symbol, "SecType:", contract.secType,
              "Exchange:", contract.exchange, "Action:", order.action, "OrderType:", order.orderType,
              "TotalQuantity:", order.totalQuantity, "Status:", orderState.status)
    def execDetails(self, reqId: int, contract: Contract, execution):
        print("ExecDetails. ReqId:", reqId, "Symbol:", contract.symbol, "SecType:", contract.secType, "Currency:", contract.currency, execution)

    def tickPrice(self, reqId, tickType, price, attrib):
        print(price)




def main():

    app = TestApp()
    app.connect("port", 7497, id)

    app.run()


if __name__ == "__main__":
    main()

标签: python

解决方案


原生条件定单(即那些触发下单的逻辑在IBKR服务器上执行)不支持直接比较两种不同工具的价格,例如AAPL和SPY。相反,证券的价格必须与固定的硬编码值进行比较,例如

“如果 AAPL 的最新价格 > 200,请提交购买 SPY 的订单”

要熟悉允许的条件语句类型,建议先尝试在交易者工作站中创建订单,然后再从 TWS API 创建订单。

您可以在您的 API 程序中请求多个工具的流式市场数据,然后在那里实现逻辑以比较不同工具的价格并在满足某些条件时提交订单。


推荐阅读