/// <summary> /// Primary entry point to the program /// </summary> static void Main(string[] args) { //Document the process: Console.WriteLine("QuantConnect.ToolBox: AlgoSeek Options Processor "); Console.WriteLine("================================================="); Console.WriteLine("The AlgoSeek Options Processor transforms AlgoSeek options ticks into the LEAN Algorithmic Trading Engine Data Format."); Console.WriteLine("Three parameters are required: "); Console.WriteLine(" 1> Output resolution of the LEAN data. (either minute, second or hour)"); Console.WriteLine(" 2> Source Directory of Zipped AlgoSeek Options Data."); Console.WriteLine(" 3> Destination Directory of LEAN Data Folder. (Typically located under Lean/Data)"); Console.WriteLine(" "); Console.WriteLine("NOTE: THIS WILL OVERWRITE ANY EXISTING FILES."); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); if (args.Length > 0) _resolution = args[0]; if (args.Length > 1) _sourceDirectory = args[1]; if (args.Length > 2) _destinationDirectory = args[2]; //Validate the user input: Validate(_sourceDirectory, _destinationDirectory, _resolution); //Remove the final slash to make the path building easier: _sourceDirectory = StripFinalSlash(_sourceDirectory); _destinationDirectory = StripFinalSlash(_destinationDirectory); //Get all the zip files to process Console.WriteLine("Counting Files..."); var zipFiles = new DirectoryInfo(_sourceDirectory).GetFiles("*.zip"); Console.WriteLine("Processing {0} Files ...", zipFiles.Count()); // Dummy zip file var zipOut = new Ionic.Zip.ZipFile(); foreach (var zipFile in zipFiles) { var starttime = DateTime.Now; Console.WriteLine("Reading " + zipFile.Name); var listTick = new List<TmpTick>(); using (var reader = Compression.Unzip(zipFile.FullName, out zipOut)) while (!reader.EndOfStream) { var tick = new TmpTick(zipFile.Name.Split('.')[1], reader.ReadLine()); if (tick.IsInvalid) continue; if (listTick.Count == 0) { listTick.Add(tick); continue; } var lastRoundTime = listTick.Last().Time.RoundDown(_span); if (lastRoundTime == tick.Time.RoundDown(_span)) { listTick.Add(tick); continue; } Console.Write("\r" + lastRoundTime.ToString(@"HH\:mm\:ss") + "\t" + listTick.Count + "\t" + (DateTime.Now - starttime).ToString(@"hh\:mm\:ss\.fff")); WriteLeanCsvFiles(listTick); listTick.Add(tick); } WriteLeanCsvFiles(listTick); CompressLeanCSV(zipFile); Console.WriteLine("... done!"); } Console.WriteLine("All done! Press any key to exit."); Console.ReadKey(); }
/// <summary> /// Primary entry point to the program /// </summary> static void Main(string[] args) { //Document the process: Console.WriteLine("QuantConnect.ToolBox: AlgoSeek Options Processor "); Console.WriteLine("================================================="); Console.WriteLine("The AlgoSeek Options Processor transforms AlgoSeek options ticks into the LEAN Algorithmic Trading Engine Data Format."); Console.WriteLine("Three parameters are required: "); Console.WriteLine(" 1> Output resolution of the LEAN data. (either minute, second or hour)"); Console.WriteLine(" 2> Source Directory of Zipped AlgoSeek Options Data."); Console.WriteLine(" 3> Destination Directory of LEAN Data Folder. (Typically located under Lean/Data)"); Console.WriteLine(" "); Console.WriteLine("NOTE: THIS WILL OVERWRITE ANY EXISTING FILES."); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); if (args.Length > 0) { _resolution = args[0]; } if (args.Length > 1) { _sourceDirectory = args[1]; } if (args.Length > 2) { _destinationDirectory = args[2]; } //Validate the user input: Validate(_sourceDirectory, _destinationDirectory, _resolution); //Remove the final slash to make the path building easier: _sourceDirectory = StripFinalSlash(_sourceDirectory); _destinationDirectory = StripFinalSlash(_destinationDirectory); //Get all the zip files to process Console.WriteLine("Counting Files..."); var zipFiles = new DirectoryInfo(_sourceDirectory).GetFiles("*.zip"); Console.WriteLine("Processing {0} Files ...", zipFiles.Count()); // Dummy zip file var zipOut = new Ionic.Zip.ZipFile(); foreach (var zipFile in zipFiles) { var starttime = DateTime.Now; Console.WriteLine("Reading " + zipFile.Name); var listTick = new List <TmpTick>(); using (var reader = Compression.Unzip(zipFile.FullName, out zipOut)) while (!reader.EndOfStream) { var tick = new TmpTick(zipFile.Name.Split('.')[1], reader.ReadLine()); if (tick.IsInvalid) { continue; } if (listTick.Count == 0) { listTick.Add(tick); continue; } var lastRoundTime = listTick.Last().Time.RoundDown(_span); if (lastRoundTime == tick.Time.RoundDown(_span)) { listTick.Add(tick); continue; } Console.Write("\r" + lastRoundTime.ToString(@"HH\:mm\:ss") + "\t" + listTick.Count + "\t" + (DateTime.Now - starttime).ToString(@"hh\:mm\:ss\.fff")); WriteLeanCsvFiles(listTick); listTick.Add(tick); } WriteLeanCsvFiles(listTick); CompressLeanCSV(zipFile); Console.WriteLine("... done!"); } Console.WriteLine("All done! Press any key to exit."); Console.ReadKey(); }