예제 #1
0
        public async Task SubscribeOnCandles(string currencyPairId, CandlePeriod period, Action <IList <Infrastructure.Common.Models.Market.Candle> > callback, int limit = 30)
        {
            var request = new SocketSubscriptionRequest <CandleRequestParameters>
            {
                RequestMethodName      = "subscribeCandles",
                SnapshotMethodName     = "snapshotCandles",
                NotificationMethodName = "updateCandles",
                UnsubscribeMethodName  = "unsubscribeCandles",
                RequestParameters      = new CandleRequestParameters
                {
                    CurrencyPairId = currencyPairId,
                    Period         = period.ToInnerFormat(),
                    Limit          = limit
                }
            };

            await _connection.Subscribe <CandleNotificationParameters>(request, notificationParameters =>
            {
                var notificationCurrencyPairId = notificationParameters.CurrencyPairId;
                var notificationPeriod         = CandlePeriodMap.ToOuterFormat(notificationParameters.Period);

                if (!(currencyPairId == notificationCurrencyPairId && notificationPeriod == period))
                {
                    return;
                }

                callback(notificationParameters.Candles
                         .Select(CandleMap.ToOuterModel)
                         .ToList());
            });
        }
예제 #2
0
		public async Task<IList<Infrastructure.Common.Models.Market.Candle>> GetCandles(String currencyPairId, CandlePeriod period, int limit)
		{
			var connection = new HitBtcConnection();
			var request = new RestRequest(String.Format("public/candles/{0}", currencyPairId), Method.GET);
			request.ConfigureRequest();

			var candlePeriod = period.ToInnerFormat();
			request.AddParameter("period", candlePeriod);

			request.AddParameter("limit", limit);
			request.AddParameter("sort", "DESC");

			var response = await connection.DoRequest(request);
			var candles = response
				.ExtractResponseData<Candle[]>()
				.Select(entity => entity.ToOuterModel())
				.ToList();

			return candles;
		}
예제 #3
0
        public async Task SubscribeOnCandles(string currencyPairId, CandlePeriod period, Action <IList <Candle> > callback, int limit = 30)
        {
            Connect();

            var innerPeriod = period.ToInnerFormat();

            var dateFrom = DateTime.UtcNow;

            switch (period)
            {
            case CandlePeriod.Minute1:
                dateFrom = dateFrom.AddMinutes(-(limit * 1));
                break;

            case CandlePeriod.Minute3:
                dateFrom = dateFrom.AddMinutes(-(limit * 3));
                break;

            case CandlePeriod.Minute5:
                dateFrom = dateFrom.AddMinutes(-(limit * 5));
                break;

            case CandlePeriod.Minute15:
                dateFrom = dateFrom.AddMinutes(-(limit * 15));
                break;

            case CandlePeriod.Minute30:
                dateFrom = dateFrom.AddMinutes(-(limit * 30));
                break;

            case CandlePeriod.Hour1:
                dateFrom = dateFrom.AddHours(-(limit * 1));
                break;

            case CandlePeriod.Hour4:
                dateFrom = dateFrom.AddHours(-(limit * 4));
                break;

            case CandlePeriod.Day1:
                dateFrom = dateFrom.AddDays(-(limit * 1));
                break;

            case CandlePeriod.Day7:
                dateFrom = dateFrom.AddDays(-(limit * 7));
                break;

            case CandlePeriod.Month1:
                dateFrom = dateFrom.AddMonths(-(limit * 1));
                break;
            }
            var dateTo = DateTime.UtcNow;

            var innerExistingCandles = await _connection.Context.MarketCandlesAsync(currencyPairId, dateFrom, dateTo, innerPeriod);

            var existingCandles = innerExistingCandles.Candles.Select(candle => candle.ToOuterModel()).ToList();

            callback(existingCandles);

            var subscription = new Subscription
            {
                SubscribeRequest   = StreamingRequest.SubscribeCandle(currencyPairId, innerPeriod),
                UnsubscribeRequest = StreamingRequest.UnsubscribeCandle(currencyPairId, innerPeriod),
                EventHandler       = (o, e) =>
                {
                    if (!(e.Response is CandleResponse candleResponse) ||
                        candleResponse.Payload.Figi != currencyPairId ||
                        candleResponse.Payload.Interval != innerPeriod)
                    {
                        return;
                    }

                    var candle = candleResponse.Payload.ToOuterModel();
                    callback(new List <Candle> {
                        candle
                    });
                }
            };

            _connection.StreamingEventReceived += (o, e) => subscription.EventHandler(o, e);
            await _connection.Context.SendStreamingRequestAsync(subscription.SubscribeRequest);
        }