protected override decimal InternalGetFiatPrice(ITradeParser parser, ECoin coin, DateTime date)
        {
            if (coin == ECoin.USD)
            {
                return(FiatProviderHelper.UsdPerCoin(Coin, date));
            }

            if (_coinCache.Count == 0)
            {
                // Fill cache

                var coins = DownloadHelper.Download <CoinInfo[]>("https://api.coinpaprika.com/v1/coins", false);

                foreach (var c in coins.Where(u => u.Rank > 0).OrderBy(u => u.Rank))
                {
                    if (!_coinCache.ContainsKey(c.Symbol))
                    {
                        _coinCache[c.Symbol] = c.Id;
                    }
                }

                var exchages = DownloadHelper.Download <ExchageInfo[]>("https://api.coinpaprika.com/v1/exchanges", false);

                foreach (var exchage in exchages.OrderBy(u => u.Active))
                {
                    if (!_exchangeCache.ContainsKey(exchage.Name))
                    {
                        _exchangeCache[exchage.Name] = exchage.Id;
                    }
                }
            }

            var preparedDate = date.AddSeconds(-date.Second);

            preparedDate = preparedDate.AddMinutes(-5);

            var ticks = DownloadHelper.Download <TickInfo[]>(
                $"https://api.coinpaprika.com/v1/tickers/{GetCoinId(coin)}/historical?start={PrepareDate(preparedDate)}&limit=10&quote=usd&interval=5m");

            var usdPrice = 0M;

            foreach (var tick in ticks.OrderBy(u => u.Date))
            {
                if (tick.Date > date)
                {
                    break;
                }

                usdPrice = tick.Price;
            }

            return(UsdToPrice(usdPrice, date));
        }
        /// <summary>
        /// Get fiat price for one coin in specific date
        /// </summary>
        /// <param name="parser">Parser</param>
        /// <param name="coin">Coin</param>
        /// <param name="date">Date</param>
        /// <returns>Price</returns>
        protected override decimal InternalGetFiatPrice(ITradeParser parser, ECoin coin, DateTime date)
        {
            if (coin == ECoin.USD)
            {
                return(FiatProviderHelper.UsdPerCoin(Coin, date));
            }

            var ret = DownloadHelper.Download <JObject>
                      (
                $"http://api.coinlayer.com/{date.ToString("yyyy-MM-dd")}?access_key={ApiKey}&symbols={GetCoin(coin)}&target={GetCoin(Coin)}&expand=1"
                      );

            if (!ret.TryGetValue("success", out var sucess) ||
                !sucess.Value <bool>() ||
                !ret.TryGetValue("rates", out var rates))
            {
                throw new ArgumentException();
            }

            var val = ((JProperty)rates.First).Value.ToObject <Entry>();

            return(val.Rate);
        }