Exemple #1
0
        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");
            }
        }