【TWS API 翻译系列】15、TWS API和IB中的期权相关的操作
作者:yunjinqi   类别:    日期:2022-01-03 22:19:12    阅读:1259 次   消耗积分: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该函数没有限制。

  • 不建议使用 reqContractDetails 来接收标的物的完整期权链,例如,所有行使价/权利/到期的组合。

  • 对于从 reqContractDetails 返回的非常大的期权链,取消选中 TWS 全局配置中的 API -> 设置 ->"向 API 公开整个交易计划"的设置将减少每个期权返回的数据量,并有助于更快地返回合约列表。

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可以实时返回期权的希腊值,以及计算给定假设价格的隐含波动率或计算给定隐含波动率的假设价格。

期权希腊字母

与期权相关的市场数据

  • 期权的希腊字母 delta,gamma,theta,vega- 默认情况下在对该期权使用reqMktData() 请求数据后会返回。查看可用的逐笔报价类型

分笔数据类型 “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

  • 期权行权将显示为订单状态侧 ="买入"且限价为 0,但仅在发出请求时显示

  • 期权行权可以通过价格= 0来区分

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的简单的程序化策略


版权所有,转载本站文章请注明出处:云子量化, http://www.woniunote.com/article/81
上一篇:【TWS API 翻译系列】14、TWS API和IB中的账户和投资组合数据
下一篇:【TWS API 翻译系列】16、TWS API和IB中关于数字货币的操作