/// <summary> /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. /// </summary> /// <param name="slice">Slice object keyed by symbol containing the stock data</param> public override void OnData(Slice slice) { if (!Portfolio.Invested) { OptionChain chain; if (IsMarketOpen(_optionSymbol) && slice.OptionChains.TryGetValue(_optionSymbol, out chain)) { var callContracts = chain.Where(contract => contract.Right == OptionRight.Call) .GroupBy(x => x.Expiry) .OrderBy(grouping => grouping.Key) .First() .OrderBy(x => x.Strike) .ToList(); var expiry = callContracts[0].Expiry; var lowerStrike = callContracts[0].Strike; var middleStrike = callContracts[1].Strike; var higherStrike = callContracts[2].Strike; var optionStrategy = OptionStrategies.CallButterfly(_optionSymbol, higherStrike, middleStrike, lowerStrike, expiry); Order(optionStrategy, 10); } } }