作者:yunjinqi 类别:
日期:2022-01-03 22:19:12
阅读:1729 次 消耗积分:0 分
Option Chains
给定证券的Option Chains可以使用函数 reqContractDetails 返回。如果期权合约的定义不完整(例如行使价未定义)并用作 IBApi::EClient::reqContractDetails的参数,则将返回所有匹配期权合约的列表。
下面的例子显示了一个"不完整"的期权IBApi.Contract ,没有最后一个交易日,行使价也没有定义乘数。在大多数情况下,使用这种合约会导致合约歧义错误,因为有很多工具与相同的描述相匹配。IBApi.EClient.reqContractDetails将使用它从TWS获取整个期权链。
contract = Contract()contract.symbol = "FISV"contract.secType = "OPT"contract.exchange = "SMART"contract.currency = "USD"# ...self.reqContractDetails(210, ContractSamples.OptionForQuery())self.reqContractDetails(211, ContractSamples.EurGbpFx())self.reqContractDetails(212, ContractSamples.Bond())self.reqContractDetails(213, ContractSamples.FuturesOnOptions())self.reqContractDetails(214, ContractSamples.SimpleFuture())self.reqContractDetails(215, ContractSamples.USStockAtSmart())self.reqContractDetails(216, ContractSamples.CryptoContract())
这种技术的一个局限性是,option chains的返回将受到限制,并且合约定义越模糊,需要更长的时间。从 API 的 9.72 版开始,引入了一个新功能 IBApi::EClient::reqSecDefOptParams该函数没有限制。
self.reqSecDefOptParams(0, "IBM", "", "STK", 8314)# ...def securityDefinitionOptionParameter(self, reqId: int, exchange: str,
underlyingConId: int, tradingClass: str, multiplier: str,
expirations: SetOfString, strikes: SetOfFloat):
super().securityDefinitionOptionParameter(reqId, exchange,
underlyingConId, tradingClass, multiplier, expirations, strikes)
print("SecurityDefinitionOptionParameter.",
"ReqId:", reqId, "Exchange:", exchange, "Underlying conId:", underlyingConId, "TradingClass:", tradingClass, "Multiplier:", multiplier,
"Expirations:", expirations, "Strikes:", str(strikes))
IBApi::EClient::reqSecDefOptParams返回到期日列表和行使价列表。在某些情况下,可能存在行使价和到期日的组合,不会提供有效的期权合约。
API可以实时返回期权的希腊值,以及计算给定假设价格的隐含波动率或计算给定隐含波动率的假设价格。
与期权相关的市场数据
分笔数据类型 “Bid Option Computation” (#10), “Ask Option Computation” (#11), “Last Option Computation” (#12), 和 “Model Option Computation” (#13)在请求的时候返回所有希腊字母(delta,gamma,vega,theta),标的价格以及股票和期权参考价格。
MODEL_OPTION_COMPUTATION还返回模型隐含波动率。
请注意,要接收实时希腊价值,必须同时订阅期权和基础合约的市场数据。
# Requesting data for an option contract will return the greek valuesself.reqMktData(1013, ContractSamples.OptionWithLocalSymbol(), "", False, False, [])self.reqMktData(1014, ContractSamples.FuturesOnOptions(), "", False, False, []);
标的物基于其当前期权价格的隐含波动率在tick 24中返回。查看可用的逐笔报价类型
IB 30天波动率是当前交易日远期30个日历日到期日的市场波动率估计值,基于连续两个到期月份的期权价格。
计算期权价格和历史波动率
给定期权价格和标的物价格的隐含波动率可以使用函数IBApi.EClient.calculateImpliedVolatility计算
self.calculateImpliedVolatility(5001, ContractSamples.OptionWithLocalSymbol(), 0.5, 55, [])
或者,给定标的物的价格和隐含波动率,可以使用IBApi.EClient.calculateOptionPrice函数计算期权价格。
self.calculateOptionPrice(5002, ContractSamples.OptionWithLocalSymbol(), 0.6, 55, [])
请求后,选项特定信息将通过IBApi.EWrapper.tickOptionComputation方法提供:
class TestWrapper(wrapper.EWrapper):# ...
def tickOptionComputation(self, reqId: TickerId, tickType: TickType, tickAttrib: int,
impliedVol: float, delta: float, optPrice: float, pvDividend: float,
gamma: float, vega: float, theta: float, undPrice: float):
super().tickOptionComputation(reqId, tickType, tickAttrib, impliedVol, delta,
optPrice, pvDividend, gamma, vega, theta, undPrice)
print("TickOptionComputation. TickerId:", reqId, "TickType:", tickType,
"TickAttrib:", tickAttrib,
"ImpliedVolatility:", impliedVol, "Delta:", delta, "OptionPrice:",
optPrice, "pvDividend:", pvDividend, "Gamma: ", gamma, "Vega:", vega,
"Theta:", theta, "UnderlyingPrice:", undPrice)
行使期权
期权从 API 中行使或失效,功能为IBApi.EClient.exerciseOptions
self.exerciseOptions(5003, ContractSamples.OptionWithTradingClass(), 1,
1, self.account, 1)
TWS API相关的教程
【TWS API使用教程1】—如何在自己创建的client和TWS之间创建一个连接,并请求当前的时间
【TWS API使用教程2】—如何使用 TWS API在ubuntu和windows上分别设置contract、获取contract详细信息、设置order、下单、获取持仓信息、获取账户信息
【TWS API使用教程3】—如何使用TWS API从盈透证券中设置contract及获取contract的信息?
【TWS API使用教程4】—如何使用TWS API在盈透证券中设置order?
【TWS API使用教程5】—如何使用TWS API在盈透证券中下单(place order)、获取订单信息、获取持仓、获取账户汇总信息?
【TWS API使用教程6】—如何使用TWS API在盈透证券中获取数据?
【TWS API 使用教程7】如何使用TWS API 从盈透证券中筛选满足一定条件的contract?
【TWS API 使用教程8】一个基于TWS API的简单的程序化策略