/// <inheritdoc /> public async Task <string> SubscribeTradeReportsAsync(string symbol, XenaMdWsHandler handler, long throttlingMs = 0) { Validator.NotNullOrEmpty(nameof(symbol), symbol); Validator.NotNull(nameof(handler), handler); Validator.GrThanOrEq(nameof(throttlingMs), throttlingMs, 0); return(await SubscribeAsync("trades", handler, symbol, throttlingMs : throttlingMs).ConfigureAwait(false)); }
/// <inheritdoc /> public async Task <string> SubscribeCandlesAsync( string symbol, string timeframe, XenaMdWsHandler handler, long throttlingMs = 0) { Validator.NotNullOrEmpty(nameof(symbol), symbol); Validator.NotNullOrEmpty(nameof(timeframe), timeframe); Validator.OneOf(nameof(timeframe), timeframe, CandlesTimeframe.All); Validator.NotNull(nameof(handler), handler); Validator.GrThanOrEq(nameof(throttlingMs), throttlingMs, 0); return(await SubscribeAsync("candles", handler, symbol, timeframe, throttlingMs).ConfigureAwait(false)); }
/// <inheritdoc /> public async Task <string> SubscribeDOMAggregatedAsync( string symbol, XenaMdWsHandler handler, long throttlingMs = 0, long aggregation = 0, long depth = 0) { Validator.NotNullOrEmpty(nameof(symbol), symbol); Validator.NotNull(nameof(handler), handler); Validator.GrThanOrEq(nameof(throttlingMs), throttlingMs, 0); Validator.GrThanOrEq(nameof(aggregation), aggregation, 0); Validator.GrThanOrEq(nameof(depth), depth, 0); return(await SubscribeAsync("DOM", handler, symbol, "aggregated", throttlingMs : throttlingMs, aggregation : aggregation, depth : depth).ConfigureAwait(false)); }
private async Task <string> SubscribeAsync( string streamName, XenaMdWsHandler handler, string symbol = null, string streamPostfix = null, long throttlingMs = 0, long aggregation = 0, long depth = 0) { var streamId = streamName; if (symbol != null) { streamId += $":{symbol}"; } if (streamPostfix != null) { streamId += $":{streamPostfix}"; } var request = new MarketDataRequest { MsgType = MsgTypes.MarketDataRequest, MDStreamId = streamId, SubscriptionRequestType = SubscriptionRequestType.SnapshotAndUpdates, ThrottleType = ThrottleType.OutstandingRequests, ThrottleTimeInterval = throttlingMs, ThrottleTimeUnit = ThrottleTimeUnit.Milliseconds, AggregatedBook = aggregation, }; var sub = new Subscription(request, handler); if (!_subscriptions.TryAdd(streamId, sub)) { throw new DuplicateSubscriptionException($"Subscription {request.MDStreamId} done or in progress"); } await SendCommandAsync(request).ConfigureAwait(false); return(streamId); }
public Subscription(MarketDataRequest request, XenaMdWsHandler handler) { Request = request; Handler = handler; }
/// <inheritdoc /> public async Task <string> SubscribeMarketWatchAsync(XenaMdWsHandler handler) { Validator.NotNull(nameof(handler), handler); return(await SubscribeAsync("market-watch", handler).ConfigureAwait(false)); }