BlitzTrader API provides implementation of the classic Black-Scholes option model for pricing Calls or Put. It also computes IV and Greeks: delta, gamma, theta, vega and rho The Library is used in our standard strategy of IV Scalping to compute delta position used to hedge the open position in options by buying/selling an underline contract. BlackSholes and OptionsGreek class provides API method to evaluate options pricing and Greeks
using namespace QX.Base.Financial ......... private IVObject _ivOptionObject = new IVObject("OptionInstrument", "Option Instrument", true, InstrumentType.Options, MarketDataType.All, OrderEventType.All); private IVObject _ivUnderlyingObject = new IVObject("UnderlyingInstrument", "Underlying Instrument", true, InstrumentType.Equity | InstrumentType.Futures, MarketDataType.All, OrderEventType.All); ............................. ............................. IVInfo _ivInfoOption = base.GetIVInfo(_ivOptionObject); Options _optionInstrument = ((Options)_ivInfoOption.IVInstrument.Instrument); IVInfo _ivInfoUnderlying = base.GetIVInfo(_ivUnderlyingObject); int _optionMaturityDays = _optionInstrument.RemainingExpiryDays; double _timeToMaturityInYearsInABS = (double)_optionMaturityDays / 365; // 10% risk free Interest rate double _riskFreeInterestRateInABS = .01; double _dividendYieldInABS = 0; private double GetCallOptionsImpliedVolatility(double optionPrice, double underlyingPrice) { double marketVolatility = 0; marketVolatility = BlackScholes.GetCallInitialImpliedVolatility(underlyingPrice, _optionInstrument.StrikePrice, _timeToMaturityInYearsInABS, _riskFreeInterestRateInABS, optionPrice, _dividendYieldInABS) / 100; return marketVolatility; } private double GetPutOptionsImpliedVolatility(double optionPrice, double underlyingPrice) { double marketVolatility = 0; marketVolatility = BlackScholes. GetPutInitialImpliedVolatility (underlyingPrice, _optionInstrument.StrikePrice, _timeToMaturityInYearsInABS, _riskFreeInterestRateInABS, optionPrice, _dividendYieldInABS) / 100; return marketVolatility; } private double GetUnderlyingDelta(OrderSide underlyingOrderSide, double ivValue) { double underlyingPrice = 0; if (underlyingOrderSide == OrderSide.Buy) underlyingPrice = _ivInfoUnderlying.MarketDataContainer.TouchLineInfo.BestAskPrice; else if (underlyingOrderSide == OrderSide.Sell) underlyingPrice = _ivInfoUnderlying.MarketDataContainer.TouchLineInfo.BestBidPrice; if (underlyingPrice <= 0) return 0; double delta = 0; if (_optionInstrument.OptionType == OptionType.CA || _optionInstrument.OptionType == OptionType.CE) { delta = OptionsGreeks.GetCallOptionDelta( underlyingPrice, _optionInstrument.StrikePrice, _riskFreeInterestRateInABS, ivValue, _timeToMaturityInYearsInABS, _dividendYieldInABS); } else if (_optionInstrument.OptionType == OptionType.PA || _optionInstrument.OptionType == OptionType.PE) { delta = OptionsGreeks.GetPutOptionDelta( underlyingPrice, _optionInstrument.StrikePrice, _riskFreeInterestRateInABS, ivValue, _timeToMaturityInYearsInABS, _dividendYieldInABS); } return delta; }
BlitzTrader API provides implementation of the classic Black-Scholes option model for pricing Calls or Put. It also computes IV and Greeks: delta, gamma, theta, vega and rho The Library is used in our standard strategy of IV Scalping to compute delta position used to hedge the open position in options by buying/selling an underline contract. BlackSholes and OptionsGreek class provides API method to evaluate options pricing and Greeks
using namespace QX.Base.Financial ......... private IVObject _ivOptionObject = new IVObject("OptionInstrument", "Option Instrument", true, InstrumentType.Options, MarketDataType.All, OrderEventType.All); private IVObject _ivUnderlyingObject = new IVObject("UnderlyingInstrument", "Underlying Instrument", true, InstrumentType.Equity | InstrumentType.Futures, MarketDataType.All, OrderEventType.All); ............................. ............................. IVInfo _ivInfoOption = base.GetIVInfo(_ivOptionObject); Options _optionInstrument = ((Options)_ivInfoOption.IVInstrument.Instrument); IVInfo _ivInfoUnderlying = base.GetIVInfo(_ivUnderlyingObject); int _optionMaturityDays = _optionInstrument.RemainingExpiryDays; double _timeToMaturityInYearsInABS = (double)_optionMaturityDays / 365; // 10% risk free Interest rate double _riskFreeInterestRateInABS = .01; double _dividendYieldInABS = 0; private double GetCallOptionsImpliedVolatility(double optionPrice, double underlyingPrice) { double marketVolatility = 0; marketVolatility = BlackScholes.GetCallInitialImpliedVolatility(underlyingPrice, _optionInstrument.StrikePrice, _timeToMaturityInYearsInABS, _riskFreeInterestRateInABS, optionPrice, _dividendYieldInABS) / 100; return marketVolatility; } private double GetPutOptionsImpliedVolatility(double optionPrice, double underlyingPrice) { double marketVolatility = 0; marketVolatility = BlackScholes. GetPutInitialImpliedVolatility (underlyingPrice, _optionInstrument.StrikePrice, _timeToMaturityInYearsInABS, _riskFreeInterestRateInABS, optionPrice, _dividendYieldInABS) / 100; return marketVolatility; } private double GetUnderlyingDelta(OrderSide underlyingOrderSide, double ivValue) { double underlyingPrice = 0; if (underlyingOrderSide == OrderSide.Buy) underlyingPrice = _ivInfoUnderlying.MarketDataContainer.TouchLineInfo.BestAskPrice; else if (underlyingOrderSide == OrderSide.Sell) underlyingPrice = _ivInfoUnderlying.MarketDataContainer.TouchLineInfo.BestBidPrice; if (underlyingPrice <= 0) return 0; double delta = 0; if (_optionInstrument.OptionType == OptionType.CA || _optionInstrument.OptionType == OptionType.CE) { delta = OptionsGreeks.GetCallOptionDelta( underlyingPrice, _optionInstrument.StrikePrice, _riskFreeInterestRateInABS, ivValue, _timeToMaturityInYearsInABS, _dividendYieldInABS); } else if (_optionInstrument.OptionType == OptionType.PA || _optionInstrument.OptionType == OptionType.PE) { delta = OptionsGreeks.GetPutOptionDelta( underlyingPrice, _optionInstrument.StrikePrice, _riskFreeInterestRateInABS, ivValue, _timeToMaturityInYearsInABS, _dividendYieldInABS); } return delta; }