/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }