private void ProcessMarketDataMessage(MarketDataMessage mdMsg) { if (!mdMsg.IsSubscribe) { return; } if (mdMsg.SecurityId.Native == null) { throw new InvalidOperationException(LocalizedStrings.Str3392Params.Put(mdMsg.SecurityId.SecurityCode)); } var lmaxId = (long)mdMsg.SecurityId.Native; switch (mdMsg.DataType) { case MarketDataTypes.Level1: case MarketDataTypes.Trades: { _session.Subscribe(new OrderBookStatusSubscriptionRequest(lmaxId), () => { }, CreateErrorHandler("OrderBookStatusSubscriptionRequest")); break; } case MarketDataTypes.MarketDepth: { _session.Subscribe(new OrderBookSubscriptionRequest(lmaxId), () => { }, CreateErrorHandler("OrderBookSubscriptionRequest")); break; } case MarketDataTypes.CandleTimeFrame: { IHistoricMarketDataRequest request; var tf = (TimeSpan)mdMsg.Arg; var from = (mdMsg.From ?? DateTimeOffset.MinValue).UtcDateTime; var to = (mdMsg.To ?? DateTimeOffset.MaxValue).UtcDateTime; if (tf.Ticks == 1) { request = new TopOfBookHistoricMarketDataRequest(mdMsg.TransactionId, lmaxId, from, to, Format.Csv); } else { Resolution resolution; if (tf == TimeSpan.FromMinutes(1)) { resolution = Resolution.Minute; } else if (tf == TimeSpan.FromDays(1)) { resolution = Resolution.Day; } else { throw new InvalidOperationException(LocalizedStrings.Str3393Params.Put(tf)); } request = new AggregateHistoricMarketDataRequest(mdMsg.TransactionId, lmaxId, from, to, resolution, Format.Csv, Option.Bid, Option.Ask); } if (!_isHistoricalSubscribed) { _session.Subscribe(new HistoricMarketDataSubscriptionRequest(), () => { }, CreateErrorHandler("HistoricMarketDataSubscriptionRequest")); _isHistoricalSubscribed = true; } _session.RequestHistoricMarketData(request, () => { }, CreateErrorHandler("RequestHistoricMarketData")); break; } default: { SendOutMarketDataNotSupported(mdMsg.TransactionId); return; } } var result = (MarketDataMessage)mdMsg.Clone(); result.OriginalTransactionId = mdMsg.TransactionId; SendOutMessage(result); }
private void ProcessMarketDataMessage(MarketDataMessage mdMsg) { if (!mdMsg.IsSubscribe) return; if (mdMsg.SecurityId.Native == null) throw new InvalidOperationException(LocalizedStrings.Str3392Params.Put(mdMsg.SecurityId.SecurityCode)); var lmaxId = (long)mdMsg.SecurityId.Native; switch (mdMsg.DataType) { case MarketDataTypes.Level1: case MarketDataTypes.Trades: { _session.Subscribe(new OrderBookStatusSubscriptionRequest(lmaxId), () => { }, CreateErrorHandler("OrderBookStatusSubscriptionRequest")); break; } case MarketDataTypes.MarketDepth: { _session.Subscribe(new OrderBookSubscriptionRequest(lmaxId), () => { }, CreateErrorHandler("OrderBookSubscriptionRequest")); break; } case MarketDataTypes.CandleTimeFrame: { IHistoricMarketDataRequest request; var tf = (TimeSpan)mdMsg.Arg; var from = (mdMsg.From ?? DateTimeOffset.MinValue).UtcDateTime; var to = (mdMsg.To ?? DateTimeOffset.MaxValue).UtcDateTime; if (tf.Ticks == 1) request = new TopOfBookHistoricMarketDataRequest(mdMsg.TransactionId, lmaxId, from, to, Format.Csv); else { Resolution resolution; if (tf == TimeSpan.FromMinutes(1)) resolution = Resolution.Minute; else if (tf == TimeSpan.FromDays(1)) resolution = Resolution.Day; else throw new InvalidOperationException(LocalizedStrings.Str3393Params.Put(tf)); request = new AggregateHistoricMarketDataRequest(mdMsg.TransactionId, lmaxId, from, to, resolution, Format.Csv, Option.Bid, Option.Ask); } if (!_isHistoricalSubscribed) { _session.Subscribe(new HistoricMarketDataSubscriptionRequest(), () => { }, CreateErrorHandler("HistoricMarketDataSubscriptionRequest")); _isHistoricalSubscribed = true; } _session.RequestHistoricMarketData(request, () => { }, CreateErrorHandler("RequestHistoricMarketData")); break; } default: { SendOutMarketDataNotSupported(mdMsg.TransactionId); return; } } var result = (MarketDataMessage)mdMsg.Clone(); result.OriginalTransactionId = mdMsg.TransactionId; SendOutMessage(result); }
private void ProcessMarketDataMessage(MarketDataMessage mdMsg) { if (!mdMsg.IsSubscribe) { return; } if (mdMsg.SecurityId.Native == null) { throw new InvalidOperationException(LocalizedStrings.Str3392Params.Put(mdMsg.SecurityId.SecurityCode)); } var lmaxId = (long)mdMsg.SecurityId.Native; switch (mdMsg.DataType) { case MarketDataTypes.Level1: { Session.Subscribe(new OrderBookStatusSubscriptionRequest(lmaxId), () => { }, CreateErrorHandler("OrderBookStatusSubscriptionRequest")); break; } case MarketDataTypes.MarketDepth: { Session.Subscribe(new OrderBookSubscriptionRequest(lmaxId), () => { }, CreateErrorHandler("OrderBookSubscriptionRequest")); break; } case MarketDataTypes.CandleTimeFrame: { IHistoricMarketDataRequest request; var tf = (TimeSpan)mdMsg.Arg; if (tf.Ticks == 1) { request = new TopOfBookHistoricMarketDataRequest(mdMsg.TransactionId, lmaxId, mdMsg.From.UtcDateTime, mdMsg.To.UtcDateTime, Format.Csv); } else { Resolution resolution; if (tf == TimeSpan.FromMinutes(1)) { resolution = Resolution.Minute; } else if (tf == TimeSpan.FromDays(1)) { resolution = Resolution.Day; } else { throw new InvalidOperationException(LocalizedStrings.Str3393Params.Put(tf)); } request = new AggregateHistoricMarketDataRequest(mdMsg.TransactionId, lmaxId, mdMsg.From.UtcDateTime, mdMsg.To.UtcDateTime, resolution, Format.Csv, Option.Bid, Option.Ask); } Session.RequestHistoricMarketData(request, () => { }, CreateErrorHandler("RequestHistoricMarketData")); break; } case MarketDataTypes.Trades: break; default: throw new ArgumentOutOfRangeException("mdMsg", mdMsg.DataType, LocalizedStrings.Str1618); } var result = (MarketDataMessage)mdMsg.Clone(); result.OriginalTransactionId = mdMsg.TransactionId; SendOutMessage(result); }