public override void Initialize() { // this test opens position in the first day of trading, lives through stock split (7 for 1), and closes adjusted position on the second day SetStartDate(2015, 12, 24); SetEndDate(2015, 12, 24); SetCash(1000000); var option = AddOption("GOOG"); option.PriceModel = OptionPriceModels.CrankNicolsonFD(); option.SetFilter(-2, +2, TimeSpan.Zero, TimeSpan.FromDays(180)); SetBenchmark("GOOG"); }
public override void Initialize() { // this test opens position in the first day of trading, lives through stock split (7 for 1), and closes adjusted position on the second day SetStartDate(2015, 12, 24); SetEndDate(2015, 12, 24); SetCash(1000000); var equity = AddEquity(UnderlyingTicker); var option = AddOption(UnderlyingTicker); equity.SetDataNormalizationMode(DataNormalizationMode.Raw); option.PriceModel = OptionPriceModels.CrankNicolsonFD(); option.SetFilter(-2, +2, TimeSpan.FromDays(00), TimeSpan.FromDays(180)); SetBenchmark(equity.Symbol); }
public void GreekApproximationTest() { const decimal price = 20.00m; const decimal underlyingPrice = 190m; const decimal underlyingVol = 0.15m; var tz = TimeZones.NewYork; var evaluationDate = new DateTime(2016, 1, 19); var equity = new Equity(SecurityExchangeHours.AlwaysOpen(tz), new SubscriptionDataConfig(typeof(TradeBar), Symbols.SPY, Resolution.Minute, tz, tz, true, false, false), new Cash(CashBook.AccountCurrency, 0, 1m), SymbolProperties.GetDefault(CashBook.AccountCurrency)); equity.SetMarketPrice(new Tick { Value = underlyingPrice }); equity.VolatilityModel = new DummyVolatilityModel(underlyingVol); var contract = new OptionContract(Symbols.SPY_P_192_Feb19_2016, Symbols.SPY) { Time = evaluationDate }; var optionPut = new Option(SecurityExchangeHours.AlwaysOpen(tz), new SubscriptionDataConfig(typeof(TradeBar), Symbols.SPY_P_192_Feb19_2016, Resolution.Minute, tz, tz, true, false, false), new Cash(CashBook.AccountCurrency, 0, 1m), new OptionSymbolProperties(SymbolProperties.GetDefault(CashBook.AccountCurrency))); optionPut.SetMarketPrice(new Tick { Value = price }); optionPut.Underlying = equity; var priceModel = (QLOptionPriceModel)OptionPriceModels.CrankNicolsonFD(); priceModel.EnableGreekApproximation = false; var results = priceModel.Evaluate(optionPut, null, contract); var greeks = results.Greeks; Assert.AreEqual(greeks.Theta, 0); Assert.AreEqual(greeks.Rho, 0); Assert.AreEqual(greeks.Vega, 0); priceModel = (QLOptionPriceModel)OptionPriceModels.CrankNicolsonFD(); priceModel.EnableGreekApproximation = true; results = priceModel.Evaluate(optionPut, null, contract); greeks = results.Greeks; Assert.LessOrEqual(greeks.Theta, 0); Assert.AreNotEqual(greeks.Rho, 0); Assert.Greater(greeks.Vega, 0); }
public override void Initialize() { // this test opens position in the first day of trading, lives through stock split (7 for 1), and closes adjusted position on the second day SetStartDate(2015, 12, 24); SetEndDate(2015, 12, 24); SetCash(1000000); var option = AddOption("GOOG"); // add the initial contract filter option.SetFilter(-2, +2, TimeSpan.Zero, TimeSpan.FromDays(180)); // set the pricing model for Greeks and volatility // find more pricing models https://www.quantconnect.com/lean/documentation/topic27704.html option.PriceModel = OptionPriceModels.CrankNicolsonFD(); // set the warm-up period for the pricing model SetWarmup(TimeSpan.FromDays(4)); // set the benchmark to be the initial cash SetBenchmark(d => 1000000); }
public void GreekApproximationTest() { const decimal price = 20.00m; const decimal underlyingPrice = 190m; const decimal underlyingVol = 0.15m; var tz = TimeZones.NewYork; var evaluationDate = new DateTime(2016, 1, 19); var spy = Symbols.SPY; var equity = GetEquity(spy, underlyingPrice, underlyingVol, tz); var contract = GetOptionContract(Symbols.SPY_P_192_Feb19_2016, spy, evaluationDate); var optionPut = GetOption(Symbols.SPY_P_192_Feb19_2016, equity, tz); optionPut.SetMarketPrice(new Tick { Value = price }); var priceModel = (QLOptionPriceModel)OptionPriceModels.CrankNicolsonFD(); priceModel.EnableGreekApproximation = false; var results = priceModel.Evaluate(optionPut, null, contract); var greeks = results.Greeks; Assert.AreEqual(greeks.Theta, 0); Assert.AreEqual(greeks.Rho, 0); Assert.AreEqual(greeks.Vega, 0); priceModel = (QLOptionPriceModel)OptionPriceModels.CrankNicolsonFD(); priceModel.EnableGreekApproximation = true; results = priceModel.Evaluate(optionPut, null, contract); greeks = results.Greeks; Assert.LessOrEqual(greeks.Theta, 0); Assert.AreNotEqual(greeks.Rho, 0); Assert.Greater(greeks.Vega, 0); }