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

问题描述 投票:0回答:2

首先,我成功地使用TWS API下订单。然而,据我了解,为此,我需要在后台运行 TWS 桌面版本。但我需要在我的远程服务器上运行它。因此,我使用了名为 IBeam 的第 3 方 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": {} } ] }
根据我从 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"
如果您能帮助我使用示例代码来使用 Ineteractive Broker 的 REST API 下类似的订单,那就太好了

python api gateway interactive-brokers
2个回答
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" } } ] }
您可以使用这些 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}"
此外,当您按照上述方式下订单时,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')
请注意,当您向 IBKR 发送 POST 请求时,您必须使用正确的标头,如

此处所述。


0
投票
您似乎混淆了 IBKR Web API 和 IBKR TWS API。

IBeam 帮助您设置 Web API 的 Web 网关。但您共享的代码表明您尝试与 TWS API 进行通信。两者不兼容。

您需要设置 TWS 网关 - 在本例中将 IBeam 替换为

IBC - 或使用 REST API 请求。

要使用 REST API,您需要向

place_order

 端点发送 POST 请求。使用文档提交正确的签名:
https://ibkrcampus.com/ibkr-api-page/cpapi-v1/#place-order

request_url = f"{baseUrl}/iserver/account/U1234567/orders" json_content = { "orders": [ { "acctId": "U1234567", "conid": 265598, "conidex": "265598@SMART", "secType": "265598@STK", "cOID": "AAPL-BUY-100", "parentId": None, "orderType": "TRAILLMT", "listingExchange": "NASDAQ", "isSingleGroup": False, "outsideRTH": True, "price": 185.50, "auxPrice": 183, "side": "BUY", "ticker": "AAPL", "tif": "GTC", "trailingAmt": 1.00, "trailingType": "amt", "referrer": "QuickTrade", "quantity": 100, # Can not be used in tandem with quantity value. # "cashQty": {{ cashQty }}, # "fxQty": {{ fxQty }}, "useAdaptive": False, "isCcyConv": False, # May specify an allocation method such as Equal or NetLiq for Financial Advisors. # "allocationMethod": {{ allocationMethod }}, "strategy": "Vwap", "strategyParameters": { "MaxPctVol":"0.1", "StartTime":"14:00:00 EST", "EndTime":"15:00:00 EST", "AllowPastEndTime":true } } ] } requests.post(url=request_url, json=json_content)
或者,您可以使用 

IBind(IBeam 的姊妹项目)以编程方式执行此操作:

import os from ibind import IbkrClient, make_order_request, QuestionType account_id = os.getenv('IBIND_ACCOUNT_ID', '[YOUR_ACCOUNT_ID]') client = IbkrClient() order_request = make_order_request( conid='265598', side='BUY' quantity=10, order_type='MARKET', acct_id=account_id, coid='my_order' ) answers = { QuestionType.PRICE_PERCENTAGE_CONSTRAINT: True, QuestionType.ORDER_VALUE_LIMIT: True } response = client.place_order(order_request, answers, account_id).data print(response)
(请参阅完整示例

此处


注意:我是 IBeam 和 IBind 的作者

© www.soinside.com 2019 - 2024. All rights reserved.