Exemplo n.º 1
0
        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);
        }