1

我正在使用 Python 和 ib_insync 来使用 Interactive brokers API,我正在尝试获取未来期权合约的 Bid、Ask、AskSize 等市场数据,但是当在股票代码上转换此合约时,我得到“没有安全定义已找到请求”,即使我之前分配了此属性。

# using Future from ib_insync has the same problem
# contract = Future('ES',"20190315",'GLOBEX')

contract = Contract()
contract.symbol = "ES"
contract.secType = "FOP"
contract.exchange = "GLOBEX"
contract.currency = "USD"
contract.lastTradeDateOrContractMonth = "20190315"
contract.strike = 2900
contract.right = "C"
contract.multiplier = "50"

result =[]
result.append(contract)


ib.reqMarketDataType(3)
ib.qualifyContracts(*result)
ticker = ib.reqMktData(contract,"",False,False)
ib.sleep(3)
ticker

输出:

Error 200, reqId 26: No security definition has been found for the request, contract: Contract(secType='FOP', symbol='ES', lastTradeDateOrContractMonth='20190315', strike=2900, right='C', multiplier='50', exchange='GLOBEX', currency='USD')
Unknown contract: Contract(secType='FOP', symbol='ES', lastTradeDateOrContractMonth='20190315', strike=2900, right='C', multiplier='50', exchange='GLOBEX', currency='USD')
4

2 回答 2

0

在不测试您的代码的情况下,我猜测文档中的这句话适用。

bool IncludeExpired [get, set] 如果设置为 true,则可以执行与过期期货合约有关的合约详细信息请求和历史数据查询。过期选项或其他仪器类型不可用。

链接到文档

因此,如果它只是一份期货合约, contract.includeExpired = True如果你想要历史数据,你可以这样做。

对于 reqMarketData,显然您需要使用当前合约,对于 ES,前月将是 201909。请注意,您不必输入日期(15 日),除非它不明确或用于选项。

github 上有一个测试列表合约的程序。 https://github.com/tradewright/ibapi-tools/blob/master/ContractInspector/readme.md

于 2019-06-30T14:15:52.453 回答
0

一旦未来期权(或股票期权)到期,其历史数据将从盈透证券的数据库中删除并且不再可用。因此,您必须为尚未到期的期货期权请求数据。 TWS API 历史数据限制(TWS 图表也是如此,而不仅仅是 TWS API)。

布尔值“IncludeExpired”仅适用于期货合约,不适用于期货期权。

于 2019-07-16T13:44:03.877 回答