protected override async Task <IEnumerable <MarketCandle> > OnGetCandlesAsync(string symbol, int periodSeconds, DateTime?startDate = null, DateTime?endDate = null, int?limit = null) { // https://api.bitfinex.com/v2/candles/trade:1d:btcusd/hist?start=ms_start&end=ms_end List <MarketCandle> candles = new List <MarketCandle>(); symbol = NormalizeSymbol(symbol); string periodString = CryptoUtility.SecondsToPeriodString(periodSeconds).Replace("d", "D"); // WTF Bitfinex, capital D??? string url = "/candles/trade:" + periodString + ":t" + symbol + "/hist?sort=1"; if (startDate.HasValue && endDate.HasValue) { url += "&start=" + ((long)startDate.Value.UnixTimestampFromDateTimeMillisecondsForBitfinex()).ToStringInvariant(); url += "&end=" + ((long)endDate.Value.UnixTimestampFromDateTimeMillisecondsForBitfinex()).ToStringInvariant(); } //else //{ // url = "/candles/trade:" + periodString + ":t" + symbol + "/last?sort=1"; //} if (limit != null) { url += "&limit=" + (limit.Value.ToStringInvariant()); } JToken token = await MakeJsonRequestAsync <JToken>(url); /* MTS, OPEN, CLOSE, HIGH, LOW, VOL */ foreach (JArray candle in token) { candles.Add(new MarketCandle { ClosePrice = candle[2].ConvertInvariant <decimal>(), ExchangeName = Name, HighPrice = candle[3].ConvertInvariant <decimal>(), LowPrice = candle[4].ConvertInvariant <decimal>(), Name = symbol, OpenPrice = candle[1].ConvertInvariant <decimal>(), PeriodSeconds = periodSeconds, Timestamp = CryptoUtility.UnixTimeStampToDateTimeMilliseconds(candle[0].ConvertInvariant <long>()), BaseVolume = candle[5].ConvertInvariant <decimal>(), ConvertedVolume = candle[5].ConvertInvariant <decimal>() * candle[2].ConvertInvariant <decimal>() }); } return(candles); }