Exemplo n.º 1
0
 /// <summary>
 /// Get the output zip file
 /// </summary>
 /// <param name="baseDirectory">Base output directory for the zip file</param>
 /// <param name="time">Date/time for the data we're writing</param>
 /// <returns>The full path to the output zip file</returns>
 private string GetZipOutputFileName(string baseDirectory, DateTime time)
 {
     return(LeanData.GenerateZipFilePath(baseDirectory, _symbol, time, _resolution, _dataType));
 }
Exemplo n.º 2
0
 /// <summary>
 /// Get the output zip file
 /// </summary>
 /// <param name="baseDirectory">Base output directory for the zip file</param>
 /// <param name="time">Date/time for the data we're writing</param>
 /// <returns>The full path to the output zip file</returns>
 private string GetZipOutputFileName(string baseDirectory, DateTime time)
 {
     return(LeanData.GenerateZipFilePath(baseDirectory, _symbol.Value, _securityType, _market, time, _resolution));
 }
Exemplo n.º 3
0
        public void GenerateZipFilePath(LeanDataTestParameters parameters)
        {
            var path = LeanData.GenerateZipFilePath(Globals.DataFolder, parameters.Symbol, parameters.Date, parameters.Resolution, parameters.TickType);

            Assert.AreEqual(parameters.ExpectedZipFilePath, path);
        }
        /// <summary>
        /// Gets the list of option contracts for a given underlying symbol
        /// </summary>
        /// <param name="underlyingSymbol">The underlying symbol</param>
        /// <param name="date">The date for which to request the option chain (only used in backtesting)</param>
        /// <returns>The list of option contracts</returns>
        public IEnumerable <Symbol> GetOptionContractList(Symbol underlyingSymbol, DateTime date)
        {
            if (!underlyingSymbol.SecurityType.HasOptions())
            {
                throw new NotSupportedException($"BacktestingOptionChainProvider.GetOptionContractList(): SecurityType.Equity, SecurityType.Future, or SecurityType.Index is expected but was {underlyingSymbol.SecurityType}");
            }

            // Resolve any mapping before requesting option contract list for equities
            // Needs to be done in order for the data file key to be accurate
            Symbol mappedSymbol;

            if (underlyingSymbol.RequiresMapping())
            {
                var mapFileResolver = _mapFileProvider.Get(AuxiliaryDataKey.Create(underlyingSymbol));
                var mapFile         = mapFileResolver.ResolveMapFile(underlyingSymbol);
                var ticker          = mapFile.GetMappedSymbol(date, underlyingSymbol.Value);
                mappedSymbol = underlyingSymbol.UpdateMappedSymbol(ticker);
            }
            else
            {
                mappedSymbol = underlyingSymbol;
            }


            // build the option contract list from the open interest zip file entry names

            // create a canonical option symbol for the given underlying
            var canonicalSymbol = Symbol.CreateOption(
                mappedSymbol,
                mappedSymbol.ID.Market,
                mappedSymbol.SecurityType.DefaultOptionStyle(),
                default(OptionRight),
                0,
                SecurityIdentifier.DefaultDate);

            var    zipFileName = string.Empty;
            Stream stream      = null;

            // In order of trust-worthiness of containing the complete option chain, OpenInterest is guaranteed
            // to have the complete option chain. Quotes come after open-interest
            // because it's also likely to contain the option chain. Trades may be
            // missing portions of the option chain, so we resort to it last.
            foreach (var tickType in new[] { TickType.OpenInterest, TickType.Quote, TickType.Trade })
            {
                // build the zip file name and fetch it with our provider
                zipFileName = LeanData.GenerateZipFilePath(Globals.DataFolder, canonicalSymbol, date, Resolution.Minute, tickType);
                stream      = _dataProvider.Fetch(zipFileName);

                if (stream != null)
                {
                    break;
                }
            }

            if (stream == null)
            {
                Log.Trace($"BacktestingOptionChainProvider.GetOptionContractList(): File not found: {zipFileName}");
                yield break;
            }

            // generate and return the contract symbol for each zip entry
            var zipEntryNames = Compression.GetZipEntryFileNames(stream);

            foreach (var zipEntryName in zipEntryNames)
            {
                yield return(LeanData.ReadSymbolFromZipEntry(canonicalSymbol, Resolution.Minute, zipEntryName));
            }

            stream.DisposeSafely();
        }