首先,我成功地使用TWS API下订单。然而,据我了解,为此,我需要在后台运行 TWS 桌面版本。但我需要在我的远程服务器上运行它。因此,我使用了名为 IBeam 的第 3 方 API,并在远程服务器中使用它创建了一个网关。现在它运行良好,可以满足我从盈透证券请求的 GET 请求。
现在,我想使用 API 请求在 Interactive Broker 中下订单,并由 IB 找到了{
"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 下类似的订单,那就太好了
这篇文章在下订单的过程中很有帮助。
也就是说,这是一个示例请求,您可以使用它来下订单
{
"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 请求时,您必须使用正确的标头,如此处所述。
IBeam 帮助您设置 Web API 的 Web 网关。但您共享的代码表明您尝试与 TWS API 进行通信。两者不兼容。
您需要设置 TWS 网关 - 在本例中将 IBeam 替换为 要使用 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)
或者,您可以使用 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 的作者