Пример #1
0
        internal void Set(CandleGranularity candleGranularity, DateTime utc)
        {
            switch (candleGranularity)
            {
            case CandleGranularity.Minutes1:
                _minutes1 = utc;
                break;

            case CandleGranularity.Minutes5:
                _minutes5 = utc;
                break;

            case CandleGranularity.Minutes15:
                _minutes15 = utc;
                break;

            case CandleGranularity.Hour1:
                _hour1 = utc;
                break;

            case CandleGranularity.Hour6:
                _hour6 = utc;
                break;

            case CandleGranularity.Hour24:
                _hour24 = utc;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(candleGranularity), candleGranularity, null);
            }
        }
Пример #2
0
        public async Task <IList <Candle> > GetHistoricRatesAsync(
            ProductType productPair,
            DateTime start,
            DateTime end,
            CandleGranularity granularity)
        {
            const int maxPeriods = 300;

            var candleList = new List <Candle>();

            DateTime?batchEnd = end;
            DateTime batchStart;

            var maxBatchPeriod = (int)granularity * maxPeriods;

            do
            {
                if (batchEnd == null)
                {
                    break;
                }

                batchStart = batchEnd.Value.AddSeconds(-maxBatchPeriod);
                if (batchStart < start)
                {
                    batchStart = start;
                }

                candleList.AddRange(await GetHistoricRatesAsync(productPair, batchStart, batchEnd.Value, (int)granularity));

                batchEnd = candleList.LastOrDefault()?.Time;
            } while (batchStart > start);

            return(candleList);
        }
Пример #3
0
        internal DateTime Get(CandleGranularity candleGranularity)
        {
            switch (candleGranularity)
            {
            case CandleGranularity.Minutes1:
                return(_minutes1);

            case CandleGranularity.Minutes5:
                return(_minutes5);

            case CandleGranularity.Minutes15:
                return(_minutes15);

            case CandleGranularity.Hour1:
                return(_hour1);

            case CandleGranularity.Hour6:
                return(_hour6);

            case CandleGranularity.Hour24:
                return(_hour24);

            default:
                throw new ArgumentOutOfRangeException(nameof(candleGranularity), candleGranularity, null);
            }
        }
        public void EnsureMarketFeedSettings(ProductType productType, CandleGranularity granularity)
        {
            var subject = new CandleMonitorFeeds(productType, granularity, true, null);

            Assert.That(subject.Granularity, Is.EqualTo(granularity));
            Assert.That(subject.Granularity, Is.EqualTo(subject.MarketFeedSettings.Granularity));

            Assert.That(subject.ProductId, Is.EqualTo(productType));
            Assert.That(subject.ProductId, Is.EqualTo(subject.MarketFeedSettings.ProductId));
        }
        public async Task AllOptionPricesAsyncTest(string symbol, CandleGranularity period)
        {
            var response = await _client.HistoricalData
                           .AllOptionPricesAsync(symbol, period);

            Assert.AreEqual(response.Status, "Success");
            Assert.IsNotNull(response.Data);
            Assert.GreaterOrEqual(response.Data.Count(), 1);
            Assert.GreaterOrEqual(response.Data.First().Volume, 1);
        }
        public CandleMonitorFeeds(ProductType productId, CandleGranularity granularity, bool hasOverlay = true, DateTime?tradeFromUtc = null)
        {
            if (tradeFromUtc != null && tradeFromUtc.Value.Kind != DateTimeKind.Utc)
            {
                throw new ArgumentNotUtcException(nameof(tradeFromUtc), tradeFromUtc.Value);
            }

            ProductId    = productId;
            Granularity  = granularity;
            TradeFromUtc = tradeFromUtc;
            HasOverlay   = hasOverlay;
        }
        /// <summary>
        /// Get Candlesticks for a trading pair
        /// </summary>
        /// <param name="pair">Trading pair</param>
        /// <param name="stickCount">Number of sticks to return</param>
        /// <param name="candleGranularity">CandleGranularity enum</param>
        /// <returns>Candle array</returns>
        public async Task <Candle[]> GetCandleSticks(string pair, int stickCount, CandleGranularity candleGranularity)
        {
            //stickCount++;
            var         start = _dtHelper.SubtractFromUTCNow(0, stickCount, 0);
            var         end   = DateTime.UtcNow;
            ProductType productType;

            Enum.TryParse(pair, out productType);

            var candlesticks = await gdaxClient.ProductsService.GetHistoricRatesAsync(productType, start, end, candleGranularity);

            return(candlesticks.ToArray());
        }
Пример #8
0
        public async Task <IList <Candle> > GetHistoricRatesAsync(
            string productPair,
            DateTime start,
            DateTime end,
            CandleGranularity granularity)
        {
            const int maxPeriods = 300;

            var candleList = new List <Candle>();

            DateTime?batchEnd = end;
            DateTime batchStart;

            var maxBatchPeriod = (int)granularity * maxPeriods;
            var requests       = 0;

            do
            {
                if (batchEnd == null)
                {
                    break;
                }

                batchStart = batchEnd.Value.AddSeconds(-maxBatchPeriod);
                if (batchStart < start)
                {
                    batchStart = start;
                }


                if (requests >= 3)
                {
                    await Task.Delay(1000);

                    requests = 0;
                }
                candleList.AddRange(await GetHistoricRatesAsync(productPair, batchStart, batchEnd.Value, (int)granularity));
                requests++;

                var previousBatchEnd = batchEnd;
                batchEnd = candleList.LastOrDefault()?.Time;

                if (previousBatchEnd == batchEnd)
                {
                    break;
                }
            } while (batchStart > start);

            return(candleList);
        }
 public MarketFeedSettings(ProductType id, CandleGranularity granularity)
 {
     ProductId   = id;
     Granularity = granularity;
 }
Пример #10
0
        public virtual async Task <IList <Candle> > ListerLesTaux(DateTime debut, DateTime fin, CandleGranularity granularite)
        {
            try
            {
                var taux = await coinbaseProClient.ProductsService.GetHistoricRatesAsync(TypeProduit, debut, fin, granularite);

                return(taux);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Пример #11
0
 public CandleRequest(CandleGranularity granularity)
 {
 }
Пример #12
0
        public async ValueTask <OmniEqResponse <IEnumerable <QuoteResponse> > > PricesAsync(string symbol, DateTime start, DateTime end, CandleGranularity period = CandleGranularity.OneMinute)
        {
            const string urlPattern = "historical/prices";
            var          results    = new List <QuoteResponse>();
            var          tempEnd    = start.AddDays(31);
            string       status;
            string       message;

            do
            {
                if (tempEnd.CompareTo(end) > 0)
                {
                    tempEnd = end;
                }

                var qsb = new QueryStringBuilder();
                qsb.Add("start", start.ToString("yyyy-MM-dd"));
                qsb.Add("end", tempEnd.ToString("yyyy-MM-dd"));
                qsb.Add("period", period.GetDescription());
                var quotes = await _executor.SymbolExecuteAsync <IEnumerable <QuoteResponse> >(urlPattern, symbol, qsb).ConfigureAwait(false);

                if (quotes.Status == "Success")
                {
                    results.AddRange(quotes.Data);

                    var quote = quotes.Data.FirstOrDefault();
                    if (quote != null && quote.Start.CompareTo(start) > 0)
                    {
                        start = quote.Start.AddDays(-32);
                    }
                    status  = quotes.Status;
                    message = quotes.Message;
                }
                else
                {
                    status  = quotes.Status;
                    message = quotes.Message;
                    results = null;
                    break;
                }

                start   = start.AddDays(32);
                tempEnd = start.AddDays(31);
            } while (tempEnd.CompareTo(end) < 0);

            return(new OmniEqResponse <IEnumerable <QuoteResponse> >()
            {
                Status = status,
                Message = message,
                Data = results
            });
        }
Пример #13
0
        public async ValueTask <OmniEqResponse <IEnumerable <QuoteResponse> > > AllOptionPricesAsync(string symbol, CandleGranularity period = CandleGranularity.OneMinute)
        {
            const string urlPattern = "historical/prices";
            var          qsb        = new QueryStringBuilder();

            qsb.Add("range", DataRange.All.GetDescription());
            qsb.Add("period", period.GetDescription());
            return(await _executor.SymbolExecuteAsync <IEnumerable <QuoteResponse> >(urlPattern, symbol, qsb).ConfigureAwait(false));
        }