盈透证券 - 获取 OPT 的历史数据(MIDPOINT 和 TRADES)

Che*_*ter 3 python api interactive-brokers ibpy

我正在尝试通过盈透证券 API 获取在 SPY 上编写的底层证券和期权,虽然获取当前期权(包括罢工、权利等)不是问题,但我坚持获取历史数据,比如从 5 个月到现在。

代码如下:

from ib.ext.Contract import Contract
from ib.ext.ContractDetails import ContractDetails
from ib.opt import ibConnection, message
import time
import datetime

def watcher(msg):
    print(msg)

def contractDetailsHandler(msg):
    contracts.append(msg.contractDetails.m_summary)

def contractDetailsEndHandler(msg):
    global DataWait
    DataWait =  False

def contractHistDetailsHandler(msg):
    contracts.append(msg.contractDetails.m_summary)


con = ibConnection()
con.host = "..."
con.port = ...
con.clientId = 5
con.registerAll(watcher)
con.register(contractDetailsHandler, 'ContractDetails')
con.register(contractDetailsEndHandler, 'ContractDetailsEnd')
con.register(contractHistDetailsHandler, message.historicalData)

con.connect()

contract = Contract()
contract.m_exchange     = "SMART"
contract.m_secType      = "OPT"
contract.m_symbol       = "SPY"
contract.m_currency     = "USD"

endtime = '20170102 01:00:00'

#con.reqContractDetails(1, contract)

con.reqHistoricalData(2,contract,endtime,"5 M","1 sec","TRADES",0,1)
con.reqHistoricalData(3,contract,endtime,"5 M","1 sec","MIDPOINT",0,1)

contracts = []

DataWait = True  ;  i = 0
while DataWait and i < 90:
    i += 1 ; print(i),
    time.sleep(1)

con.disconnect()
con.close()

print(contracts)
Run Code Online (Sandbox Code Playgroud)

我得到的是:

<error id=2, errorCode=321, errorMsg=Error validating request:-'yd' : cause - When the local symbol field is empty, please fill all option fields (right, strike, expiry))>
Run Code Online (Sandbox Code Playgroud)

现在我知道 Contract 对象不包含这些,但如何知道正确、罢工和到期?这基本上就是我需要的(在选项期间有日期和基本变化)。有没有不同的方法呢?

如果你能给我一些指点,那将是非常受欢迎的!或者是选定范围内带有行使价、权利和到期日的标的和期权的替代来源(无论是否支付;需要它用于 uni 项目)。

预先非常感谢!任何输入都非常感谢。

kbc*_*ool 5

我没有足够的声誉来评论我想对这个问题发表评论而不是提交答案,但我读到的所有内容都表明您无法通过 IB API 检索过期期权合约的历史数据。

事实上,Brian 提到的 URL ( https://www.interactivebrokers.com/en/software/api/apiguide/tables/historical_data_limitations.htm ) 引用了以下内容:

历史数据请求仅适用于当前到期。

所以你很可能是在浪费时间。历史期权数据可能很大,所以我明白为什么。它也非常昂贵,足够便宜,可以在一天结束时使用 - 您可以从http://ivolatility.com获得它,但盘中变得昂贵。我使用https://datashop.cboe.com,但他们的服务速度和客户服务技能肯定缺乏,但只能要求一种仪器,您想要的任何时间段和频率都是我喜欢的灵活性。