public static async Task RunGetHistoricalTrades(Dictionary <string, string> dict)
        {
            RequireArgs(dict, "exchangeName", "marketSymbol");

            string       exchangeName = dict["exchangeName"];
            IExchangeAPI api          = ExchangeAPI.GetExchangeAPI(exchangeName);
            string       marketSymbol = dict["marketSymbol"];

            Console.WriteLine("Showing historical trades for exchange {0}...", exchangeName);
            DateTime?startDate = null;
            DateTime?endDate   = null;

            if (dict.ContainsKey("startDate"))
            {
                startDate = DateTime.Parse(dict["startDate"]).ToUniversalTime();
            }
            if (dict.ContainsKey("endDate"))
            {
                endDate = DateTime.Parse(dict["endDate"]).ToUniversalTime();
            }
            await api.GetHistoricalTradesAsync((IEnumerable <ExchangeTrade> trades) =>
            {
                foreach (ExchangeTrade trade in trades)
                {
                    Console.WriteLine("Trade at timestamp {0}: {1}/{2}/{3}", trade.Timestamp.ToLocalTime(), trade.Id, trade.Price, trade.Amount);
                }
                return(true);
            }, marketSymbol, startDate, endDate);
        }
Example #2
0
        private async Task TestTrade(IExchangeAPI api, string marketSymbol)
        {
            if (FunctionRegex == null || Regex.IsMatch("trade", FunctionRegex, RegexOptions.IgnoreCase))
            {
                try
                {
                    ExchangeTrade[] trades = null;
                    Console.Write("Test {0} GetHistoricalTradesAsync... ", api.Name);
                    await api.GetHistoricalTradesAsync(tradeEnum =>
                    {
                        trades = tradeEnum.ToArray();
                        return(true);
                    }, marketSymbol);

                    Assert(trades.Length != 0 && trades[0].Price > 0m && trades[0].Amount > 0m);
                    Console.WriteLine($"OK ({trades.Length})");

                    Console.Write("Test {0} GetRecentTradesAsync... ", api.Name);
                    trades = (await api.GetRecentTradesAsync(marketSymbol)).ToArray();
                    Assert(trades.Length != 0 && trades[0].Price > 0m && trades[0].Amount > 0m);
                    Console.WriteLine($"OK ({trades.Length} trades)");
                }
                catch (NotImplementedException)
                {
                    Console.WriteLine("Not implemented");
                }
            }
        }
Example #3
0
        /// <summary>
        /// Export exchange data to csv and then to optimized bin files
        /// </summary>
        /// <param name="api">Exchange api, null to just convert existing csv files</param>
        /// <param name="marketSymbol">Market symbol to export</param>
        /// <param name="basePath">Base path to export to, should not contain symbol, symbol will be appended</param>
        /// <param name="sinceDateTime">Start date to begin export at</param>
        /// <param name="callback">Callback if api is not null to notify of progress</param>
        public static async Task ExportExchangeTrades(IExchangeAPI api, string marketSymbol, string basePath, DateTime sinceDateTime, Action <long> callback = null)
        {
            basePath = Path.Combine(basePath, marketSymbol);
            Directory.CreateDirectory(basePath);
            sinceDateTime = sinceDateTime.ToUniversalTime();
            if (api != null)
            {
                long         count     = 0;
                int          lastYear  = -1;
                int          lastMonth = -1;
                StreamWriter writer    = null;
                bool innerCallback(IEnumerable <ExchangeTrade> trades)
                {
                    foreach (ExchangeTrade trade in trades)
                    {
                        if (trade.Timestamp.Year != lastYear || trade.Timestamp.Month != lastMonth)
                        {
                            if (writer != null)
                            {
                                writer.Close();
                            }
                            lastYear  = trade.Timestamp.Year;
                            lastMonth = trade.Timestamp.Month;
                            writer    = new StreamWriter(basePath + trade.Timestamp.Year + "-" + trade.Timestamp.Month.ToString("00") + ".csv");
                        }
                        writer.WriteLine("{0},{1},{2}", CryptoUtility.UnixTimestampFromDateTimeSeconds(trade.Timestamp), trade.Price, trade.Amount);
                        if (++count % 100 == 0)
                        {
                            callback?.Invoke(count);
                        }
                    }
                    return(true);
                }

                await api.GetHistoricalTradesAsync(innerCallback, marketSymbol, sinceDateTime);

                writer.Close();
                callback?.Invoke(count);
            }
            TraderFileReader.ConvertCSVFilesToBinFiles(basePath);
        }