使用 API 请求在盈透证券下订单

Wen*_*uka 5 python api gateway interactive-brokers

首先,我成功地使用 TWS API 下了订单。然而,据我了解,为此,我需要在后台运行 TWS 桌面版本。但我需要在我的远程服务器上运行它。因此,我使用了名为 IBeam 的第三方 API,并在远程服务器中使用它创建了一个网关。现在它运行良好,可以满足我从盈透证券请求的 GET 请求。

现在,我想使用 API 请求在 Interactive Broker 中下订单,并通过 IB找到了此文档。然而,对我来说,不清楚他们每个论点的含义,所以到目前为止我陷入了困境。即,从文档中,我需要使用请求正文将 POST 请求发送到 https://localhost:5000/v1/api/iserver/account/{accountId}/orders (IB 网关在 localhost:5000 中运行)

{
  "orders": [
    {
      "acctId": "string",
      "conid": 0,
      "secType": "secType = 265598:STK",
      "cOID": "string",
      "parentId": "string",
      "orderType": "string",
      "listingExchange": "string",
      "isSingleGroup": true,
      "outsideRTH": true,
      "price": 0,
      "auxPrice": null,
      "side": "string",
      "ticker": "string",
      "tif": "string",
      "referrer": "QuickTrade",
      "quantity": 0,
      "fxQty": 0,
      "useAdaptive": true,
      "isCcyConv": true,
      "allocationMethod": "string",
      "strategy": "string",
      "strategyParameters": {}
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

根据我从 TWS API 了解到的情况,这是下订单所需的所有信息:

    contract = Contract()
    contract.symbol = "AAPL"
    contract.secType = "STK"
    contract.exchange = "SMART"
    contract.currency = "USD"
    contract.primaryExchange = "NASDAQ"

    order = Order()
    order.action = "BUY"
    order.totalQuantity = 10
    order.orderType = "MKT"
Run Code Online (Sandbox Code Playgroud)

如果您能帮助我使用示例代码来使用 Ineteractive Broker 的 REST API 下类似的订单,那就太好了

Wen*_*uka 4

我发现这篇文章对下订单的过程很有帮助。

即,这是您可以用来下订单的示例请求

{
  "orders": [
    {
      "acctId": "DU4299134",
      "conid": 8314,
      "secType": "8314:STK",
      "cOId": "testAlgoOrder",
      "orderType": "LMT",
      "price": 142,
      "side": "BUY",
      "tif": "DAY",
      "quantity": 1,
      "strategy": "Adaptive",
      "strategyParameters": {"adaptivePriority": "Normal" }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

您可以使用这些 URL 查找有关策略的更多信息,

url = f"https://localhost:5000/v1/api/iserver/contract/{conid}/algos"
url_more_info = f"https://localhost:5000/v1/api/iserver/contract/{conid}/algos?addDescription=1&addParams=1&algos={algos}"
Run Code Online (Sandbox Code Playgroud)

此外,当您下达上述订单时,IBKR将要求您确认订单,您可以通过以下方式进行确认:

url = f"https://localhost:5000/v1/api/iserver/reply/{replyid}"

data = '''{
  "confirmed": true
}'''

response = requests.post(url, data=data, headers=headers, verify='path to .pem file')

Run Code Online (Sandbox Code Playgroud)

请注意,当您向 IBKR 发送 POST 请求时,您必须使用正确的标头,如此处所述