/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using QuantConnect.Data; using QuantConnect.Data.UniverseSelection; using QuantConnect.Interfaces; using QuantConnect.Securities.Option; using System; using System.Collections.Generic; using System.Linq; using QuantConnect.Data.Market; using QuantConnect.Securities; namespace QuantConnect.Algorithm.CSharp { /// /// Regression algorithm checks FillForwardEnumerator should FF the data until it reaches the delisting date /// replicates GH issue https://github.com/QuantConnect/Lean/issues/4872 /// public class FillForwardUntilExpiryRegressionAlgorithm : QCAlgorithm, IRegressionAlgorithmDefinition { private DateTime _realEndDate = new DateTime(2014, 06, 07); private SecurityExchange _exchange; private Dictionary> _options; private string[] _contracts = { "TWX 140621P00067500", "TWX 140621C00067500", "TWX 140621C00070000", "TWX 140621P00070000" }; public override void Initialize() { SetStartDate(2014, 06, 05); SetEndDate(2014, 06, 30); _options = new Dictionary>(); var _twxOption = AddOption("TWX", Resolution.Minute); _exchange = _twxOption.Exchange; _twxOption.SetFilter((x) => x .Contracts(c => c.Where(s => _contracts.Contains(s.Symbol.Value)))); SetBenchmark(t => 1); } public override void OnData(Slice slice) { foreach (var value in slice.OptionChains.Values) { foreach (var contact in value.Contracts) { BaseData bar = null; QuoteBar quoteBar; if (bar == null && value.QuoteBars.TryGetValue(contact.Key, out quoteBar)) { bar = quoteBar; } TradeBar tradeBar; if (bar == null && value.TradeBars.TryGetValue(contact.Key, out tradeBar)) { bar = tradeBar; } if (bar.IsFillForward) { _options[contact.Key].Add(value.Time.Date); } } } } public override void OnSecuritiesChanged(SecurityChanges changes) { foreach (var security in changes.AddedSecurities.OfType