void DownloadBars() { DownloadBarsEnumerator enumerator = quoteClient.DownloadBars(symbol, priceType, period, from, to, -1); if (outputType == "csv") { string path = Path.Combine(this.location, string.Format("{0} {1} {2} {3} {4}.csv", symbol, priceType, period, from.ToString(" yyyyMMdd"), to.ToString(" yyyyMMdd"))); using (StreamWriter file = File.CreateText(path)) { file.WriteLine("date_time,open,close,low,high,volume"); for (Bar bar = enumerator.Next(-1); bar != null; bar = enumerator.Next(-1)) { file.WriteLine(string.Format("{0},{1},{2},{3},{4},{5}", bar.From.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture), bar.Open, bar.Close, bar.Low, bar.High, bar.Volume)); } } this.Log("Bars are downloaded successfully"); } else if (outputType == "hdf5") { string path = Path.Combine(this.location, string.Format("{0} {1} {2} {3} {4}.h5", symbol, priceType, period, from.ToString(" yyyyMMdd"), to.ToString(" yyyyMMdd"))); H5FileId fileId = H5F.create(path, H5F.CreateMode.ACC_TRUNC); var barsData = new List <Bar>(); for (Bar bar = enumerator.Next(-1); bar != null; bar = enumerator.Next(-1)) { barsData.Add(bar); } if (barsData.Count == 0) { return; } double[,] barsArray = new double[barsData.Count, 5]; long[,] dataBarsArray = new long[barsData.Count, 2]; long priceTypeString = 0; if (priceType == PriceType.Ask) { priceTypeString = 1; } for (int i = 0; i < barsData.Count; i++) { dataBarsArray[i, 0] = priceTypeString; long dateTimestamp = (long)(barsData[i].From.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds; dataBarsArray[i, 1] = dateTimestamp; barsArray[i, 0] = barsData[i].Volume; barsArray[i, 1] = barsData[i].Open; barsArray[i, 2] = barsData[i].Close; barsArray[i, 3] = barsData[i].High; barsArray[i, 4] = barsData[i].Low; } H5DataTypeId barsTypeId = new H5DataTypeId(H5T.H5Type.NATIVE_DOUBLE); WriteDataToNewFile(fileId, "Bars", barsArray, barsData.Count, 5, barsTypeId); H5DataTypeId dataBarsTypeId = new H5DataTypeId(H5T.H5Type.NATIVE_LLONG); WriteDataToNewFile(fileId, "DataBars", dataBarsArray, barsData.Count, 2, dataBarsTypeId); H5F.close(fileId); this.Log("Bars are downloaded successfully"); } }
void DownloadBars() { if (outputType == "csv") { DownloadBarsEnumerator enumerator = quoteClient.DownloadBars(symbol, priceType, period, from, to, -1); enumeratorBars = enumerator; string path = Path.Combine(this.location, string.Format("{0} {1} {2} {3} {4}.csv", symbol.Replace("/", "%2F"), priceType, period, from.ToString(" yyyyMMdd-HH-mm-ss"), to.ToString(" yyyyMMdd-HH-mm-ss"))); using (StreamWriter file = File.CreateText(path)) { file.WriteLine("date_time;open;close;low;high;volume"); for (Bar bar = enumerator.Next(-1); bar != null; bar = enumerator.Next(-1)) { file.WriteLine(string.Format("{0};{1};{2};{3};{4};{5}", bar.From.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture), (decimal)bar.Open, (decimal)bar.Close, (decimal)bar.Low, (decimal)bar.High, (decimal)bar.Volume)); } } this.Log($"Bars {symbol} are downloaded successfully"); } else if (outputType == "hdf5") { DownloadBarsEnumerator enumerator = quoteClient.DownloadBars(symbol, priceType, period, from, to, -1); enumeratorBars = enumerator; string path = Path.Combine(this.location, string.Format("{0} {1} {2} {3} {4}.h5", symbol.Replace("/", "%2F"), priceType, period, from.ToString(" yyyyMMdd-HH-mm-ss"), to.ToString(" yyyyMMdd-HH-mm-ss"))); H5FileId fileId = H5F.create(path, H5F.CreateMode.ACC_TRUNC); var barsData = new List <Bar>(); for (Bar bar = enumerator.Next(-1); bar != null; bar = enumerator.Next(-1)) { barsData.Add(bar); } if (barsData.Count == 0) { return; } double[,] barsArray = new double[barsData.Count, 5]; long[,] dataBarsArray = new long[barsData.Count, 2]; long priceTypeString = 0; if (priceType == PriceType.Ask) { priceTypeString = 1; } for (int i = 0; i < barsData.Count; i++) { dataBarsArray[i, 0] = priceTypeString; long dateTimestamp = (long)(barsData[i].From.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds; dataBarsArray[i, 1] = dateTimestamp; barsArray[i, 0] = barsData[i].Volume; barsArray[i, 1] = barsData[i].Open; barsArray[i, 2] = barsData[i].Close; barsArray[i, 3] = barsData[i].High; barsArray[i, 4] = barsData[i].Low; } H5DataTypeId barsTypeId = new H5DataTypeId(H5T.H5Type.NATIVE_DOUBLE); WriteDataToNewFile(fileId, "Bars", barsArray, barsData.Count, 5, barsTypeId); H5DataTypeId dataBarsTypeId = new H5DataTypeId(H5T.H5Type.NATIVE_LLONG); WriteDataToNewFile(fileId, "DataBars", dataBarsArray, barsData.Count, 2, dataBarsTypeId); H5F.close(fileId); this.Log($"Bars {symbol} are downloaded successfully"); } else if (outputType == "csv_zip") { DownloadBarsEnumerator BidEnumerator = quoteClient.DownloadBars(symbol, PriceType.Bid, period, from, to, -1); DownloadBarsEnumerator AskEnumerator = quoteClient.DownloadBars(symbol, PriceType.Ask, period, from, to, -1); string path = Path.Combine(location, $"{symbol.Replace("/", "%2F")}_{period}_{from.ToString("yyyy-MM-dd-HH-mm-ss")}_{to.ToString("yyyy-MM-dd-HH-mm-ss")}.zip"); using (ZipOutputStream zs = new ZipOutputStream(File.Create(path))) { enumeratorBars = BidEnumerator; string filename = $"{period} bid.csv"; using (StreamWriter file = File.CreateText(filename)) { currentTempFile = filename; DateTime lastQuoteTime = DateTime.MinValue; int repeatingQuotes = 0; for (Bar bar = BidEnumerator.Next(-1); bar != null; bar = BidEnumerator.Next(-1)) { StringBuilder builder = new StringBuilder(); builder.Append(bar.From.ToString("yyyy.MM.dd HH:mm:ss", CultureInfo.InvariantCulture)); if (bar.From == lastQuoteTime) { repeatingQuotes++; } else { lastQuoteTime = bar.From; repeatingQuotes = 0; } if (repeatingQuotes > 0) { builder.Append(-repeatingQuotes); } builder.Append(","); builder.Append($"{(decimal)bar.Open},{(decimal)bar.High},{(decimal)bar.Low},{(decimal)bar.Close},{(decimal)bar.Volume},"); builder.Remove(builder.Length - 1, 1); file.WriteLine(builder); } } FileInfo fi = new FileInfo(filename); ZipEntry newEntry = new ZipEntry(filename); newEntry.Size = fi.Length; zs.PutNextEntry(newEntry); byte[] buffer = new byte[4096]; using (FileStream streamReader = File.OpenRead(filename)) { StreamUtils.Copy(streamReader, zs, buffer); } zs.CloseEntry(); File.Delete(filename); currentTempFile = null; enumeratorBars = AskEnumerator; filename = $"{period} ask.csv"; using (StreamWriter file = File.CreateText(filename)) { currentTempFile = filename; DateTime lastQuoteTime = DateTime.MinValue; int repeatingQuotes = 0; for (Bar bar = AskEnumerator.Next(-1); bar != null; bar = AskEnumerator.Next(-1)) { StringBuilder builder = new StringBuilder(); builder.Append(bar.From.ToString("yyyy.MM.dd HH:mm:ss", CultureInfo.InvariantCulture)); if (bar.From == lastQuoteTime) { repeatingQuotes++; } else { lastQuoteTime = bar.From; repeatingQuotes = 0; } if (repeatingQuotes > 0) { builder.Append(-repeatingQuotes); } builder.Append(","); builder.Append($"{(decimal)bar.Open},{(decimal)bar.High},{(decimal)bar.Low},{(decimal)bar.Close},{(decimal)bar.Volume},"); builder.Remove(builder.Length - 1, 1); file.WriteLine(builder); } } fi = new FileInfo(filename); newEntry = new ZipEntry(filename); newEntry.Size = fi.Length; zs.PutNextEntry(newEntry); buffer = new byte[4096]; using (FileStream streamReader = File.OpenRead(filename)) { StreamUtils.Copy(streamReader, zs, buffer); } zs.CloseEntry(); File.Delete(filename); currentTempFile = null; } this.Log($"Bars {symbol} are downloaded successfully"); } }