/// <summary>
        /// Subscribes to trade updates for a symbol
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToMarketTradeUpdatesAsync(string symbol, Action <HuobiMarketTrade> onData)
        {
            var request         = new HuobiSubscribeRequest($"market.{symbol}.trade.detail");
            var internalHandler = new Action <HuobiSocketUpdate <HuobiMarketTrade> >(data => onData(data.Data));

            return(await Subscribe(request, internalHandler).ConfigureAwait(false));
        }
        /// <summary>
        /// Subscribes to candlestick updates for a symbol
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="period">The period of a single candlestick</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToMarketKlineUpdatesAsync(string symbol, HuobiPeriod period, Action <HuobiMarketKline> onData)
        {
            var request         = new HuobiSubscribeRequest($"market.{symbol}.kline.{JsonConvert.SerializeObject(period, new PeriodConverter(false))}");
            var internalHandler = new Action <HuobiSocketUpdate <HuobiMarketKline> >(data => onData(data.Data));

            return(await Subscribe(request, internalHandler).ConfigureAwait(false));
        }
Beispiel #3
0
        /// <summary>
        /// Subscribes to trade updates for a symbol
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToTradeUpdatesAsync(string symbol, Action <HuobiSymbolTrade> onData)
        {
            symbol = symbol.ValidateHuobiSymbol();
            var request         = new HuobiSubscribeRequest(NextId().ToString(), $"market.{symbol}.trade.detail");
            var internalHandler = new Action <HuobiSocketUpdate <HuobiSymbolTrade> >(data => onData(data.Data));

            return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false));
        }
Beispiel #4
0
        /// <summary>
        /// Subscribes to candlestick updates for a symbol
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="period">The period of a single candlestick</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToKlineUpdatesAsync(string symbol, HuobiPeriod period, Action <HuobiKline> onData)
        {
            symbol = symbol.ValidateHuobiSymbol();
            var request         = new HuobiSubscribeRequest(NextId().ToString(CultureInfo.InvariantCulture), $"market.{symbol}.kline.{JsonConvert.SerializeObject(period, new PeriodConverter(false))}");
            var internalHandler = new Action <HuobiSocketUpdate <HuobiKline> >(data => onData(data.Data));

            return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false));
        }
Beispiel #5
0
        /// <summary>
        /// Subscribe to changes of a symbol's best ask/bid
        /// </summary>
        /// <param name="symbol">Symbol to subscribe to</param>
        /// <param name="onData">Data handler</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToBestOfferUpdatesAsync(string symbol, Action <DataEvent <HuobiBestOffer> > onData)
        {
            var request         = new HuobiSubscribeRequest(NextId().ToString(CultureInfo.InvariantCulture), $"market.{symbol}.bbo");
            var internalHandler = new Action <DataEvent <HuobiDataEvent <HuobiBestOffer> > >(data =>
            {
                onData(data.As(data.Data.Data, symbol));
            });

            return(await SubscribeAsync(request, null, false, internalHandler).ConfigureAwait(false));
        }
Beispiel #6
0
        /// <summary>
        /// Subscribes to market detail updates for a symbol
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToMarketDetailUpdatesAsync(string symbol, Action <HuobiMarketDetails> onData)
        {
            var request         = new HuobiSubscribeRequest(NextId().ToString(), $"market.{symbol}.detail");
            var internalHandler = new Action <HuobiSocketUpdate <HuobiMarketDetails> >(data =>
            {
                data.Data.Timestamp = data.Timestamp;
                onData(data.Data);
            });

            return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false));
        }
Beispiel #7
0
        /// <summary>
        /// Subscribes to symbol detail updates for a symbol
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToSymbolDetailUpdatesAsync(string symbol, Action <DataEvent <HuobiSymbolDetails> > onData)
        {
            symbol = symbol.ValidateHuobiSymbol();
            var request         = new HuobiSubscribeRequest(NextId().ToString(CultureInfo.InvariantCulture), $"market.{symbol}.detail");
            var internalHandler = new Action <DataEvent <HuobiDataEvent <HuobiSymbolDetails> > >(data =>
            {
                data.Data.Timestamp = data.Timestamp;
                onData(data.As(data.Data.Data, symbol));
            });

            return(await SubscribeAsync(request, null, false, internalHandler).ConfigureAwait(false));
        }
Beispiel #8
0
        /// <summary>
        /// Subscribes to updates for all tickers
        /// </summary>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToSymbolTickerUpdatesAsync(Action <HuobiSymbolTicks> onData)
        {
            var request         = new HuobiSubscribeRequest(NextId().ToString(), "market.tickers");
            var internalHandler = new Action <HuobiSocketUpdate <IEnumerable <HuobiSymbolTick> > >(data =>
            {
                var result = new HuobiSymbolTicks {
                    Timestamp = data.Timestamp, Ticks = data.Data
                };
                onData(result);
            });

            return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false));
        }
Beispiel #9
0
        /// <summary>
        /// Subscribes to updates for all tickers
        /// </summary>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToSymbolTickerUpdatesAsync(Action <DataEvent <HuobiSymbolDatas> > onData)
        {
            var request         = new HuobiSubscribeRequest(NextId().ToString(CultureInfo.InvariantCulture), "market.tickers");
            var internalHandler = new Action <DataEvent <HuobiDataEvent <IEnumerable <HuobiSymbolTicker> > > >(data =>
            {
                var result = new HuobiSymbolDatas {
                    Timestamp = data.Timestamp, Ticks = data.Data.Data
                };
                onData(data.As(result));
            });

            return(await SubscribeAsync(request, null, false, internalHandler).ConfigureAwait(false));
        }
        /// <summary>
        /// Subscribes to updates for all market tickers
        /// </summary>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToMarketTickerUpdatesAsync(Action <HuobiMarketTicks> onData)
        {
            var request         = new HuobiSubscribeRequest("market.tickers");
            var internalHandler = new Action <HuobiSocketUpdate <List <HuobiMarketTick> > >(data =>
            {
                var result       = new HuobiMarketTicks();
                result.Timestamp = data.Timestamp;
                result.Ticks     = data.Data;
                onData(result);
            });

            return(await Subscribe(request, internalHandler).ConfigureAwait(false));
        }
Beispiel #11
0
        /// <summary>
        /// Subscribes to order book updates for a symbol
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="mergeStep">The way the results will be merged together</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToOrderBookUpdatesAsync(string symbol, int mergeStep, Action <HuobiOrderBook> onData)
        {
            symbol = symbol.ValidateHuobiSymbol();
            mergeStep.ValidateIntBetween(nameof(mergeStep), 0, 5);

            var internalHandler = new Action <HuobiSocketUpdate <HuobiOrderBook> >(data =>
            {
                data.Data.Timestamp = data.Timestamp;
                onData(data.Data);
            });

            var request = new HuobiSubscribeRequest(NextId().ToString(), $"market.{symbol}.depth.step{mergeStep}");

            return(await Subscribe(request, null, false, internalHandler).ConfigureAwait(false));
        }
Beispiel #12
0
        /// <summary>
        /// Subscribes to order book updates for a symbol,
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="levels">The number of price levels. 5, 20, 150 or 400</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToOrderBookChangeUpdatesAsync(string symbol, int levels, Action <DataEvent <HuobiIncementalOrderBook> > onData)
        {
            symbol = symbol.ValidateHuobiSymbol();
            levels.ValidateIntValues(nameof(levels), 5, 20, 150, 400);

            var internalHandler = new Action <DataEvent <HuobiDataEvent <HuobiIncementalOrderBook> > >(data =>
            {
                data.Data.Timestamp = data.Timestamp;
                onData(data.As(data.Data.Data, symbol));
            });

            var request = new HuobiSubscribeRequest(NextId().ToString(CultureInfo.InvariantCulture), $"market.{symbol}.mbp.{levels}");

            return(await SubscribeAsync(baseAddressMbp, request, null, false, internalHandler).ConfigureAwait(false));
        }
Beispiel #13
0
        /// <summary>
        /// Subscribes to updates for the top 150 entries in the order book. Updates push the full 150 rows each second
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="mergeStep">The way the results will be merged together</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToPartialOrderBookUpdates1SecondAsync(string symbol, int mergeStep, Action <DataEvent <HuobiOrderBook> > onData)
        {
            symbol = symbol.ValidateHuobiSymbol();
            mergeStep.ValidateIntBetween(nameof(mergeStep), 0, 5);

            var internalHandler = new Action <DataEvent <HuobiDataEvent <HuobiOrderBook> > >(data =>
            {
                data.Data.Timestamp = data.Timestamp;
                onData(data.As(data.Data.Data, symbol));
            });

            var request = new HuobiSubscribeRequest(NextId().ToString(CultureInfo.InvariantCulture), $"market.{symbol}.depth.step{mergeStep}");

            return(await SubscribeAsync(request, null, false, internalHandler).ConfigureAwait(false));
        }
        /// <summary>
        /// Subscribes to order book updates for a symbol
        /// </summary>
        /// <param name="symbol">The symbol to subscribe to</param>
        /// <param name="mergeStep">The way the results will be merged together</param>
        /// <param name="onData">The handler for updates</param>
        /// <returns></returns>
        public async Task <CallResult <UpdateSubscription> > SubscribeToMarketDepthUpdatesAsync(string symbol, int mergeStep, Action <HuobiMarketDepth> onData)
        {
            if (mergeStep < 0 || mergeStep > 5)
            {
                return(new CallResult <UpdateSubscription>(null, new ArgumentError("Merge step should be between 0 and 5")));
            }

            var internalHandler = new Action <HuobiSocketUpdate <HuobiMarketDepth> >(data =>
            {
                data.Data.Timestamp = data.Timestamp;
                onData(data.Data);
            });

            var request = new HuobiSubscribeRequest($"market.{symbol}.depth.step{mergeStep}");

            return(await Subscribe(request, internalHandler).ConfigureAwait(false));
        }