private void SubscribeToTicks(IObservable <ITick> ticks) { // Display error messages, if any. ticks.Subscribe(m => { }, async exception => await SyncMessageBox.Show(exception.Message)); var bidAskTicks = ticks.ToBidAskTicks(); bidAskTicks.Select(y => y.Spread()).Subscribe(Spread); var bidPrices = bidAskTicks.Select(tick => tick.BidPrice); bidPrices.Subscribe(BidPrice); bidPrices.Change().Subscribe(BidPriceChange); var askPrices = bidAskTicks.Select(tick => tick.AskPrice); askPrices.Subscribe(AskPrice); askPrices.Change().Subscribe(AskPriceChange); var sizeTicks = ticks.OfType <TickSize>(); sizeTicks.Where(x => x.TickType == TickType.BidSize).Select(x => x.Size).Subscribe(BidSize); sizeTicks.Where(x => x.TickType == TickType.AskSize).Select(x => x.Size).Subscribe(AskSize); var realtimeTicks = ticks.OfType <TickRealtimeVolume>(); var prices = realtimeTicks.Select(tick => tick.Price); prices.Subscribe(LastPrice); prices.Change().Subscribe(LastPriceChange); realtimeTicks.Select(tick => tick.Size).Subscribe(LastSize); realtimeTicks.Select(m => m.Volume).Subscribe(Volume); realtimeTicks.Select(m => m.Instant).Subscribe(LastInstant); }
public async void Init() { Observable.Timer(DateTimeOffset.Now, TimeSpan.FromSeconds(1)).Subscribe(x => Date.Value = DateTime.Now); IInterReactClient interReactClient; try { interReactClient = await new InterReactClientBuilder().BuildAsync(); } catch (Exception exception) { await SyncMessageBox.Show(exception.Message, terminate : true); return; } CoreApplication.Suspending += (x, y) => { interReactClient.Dispose(); }; // TickRedundantRealtimeVolumeFilter removes redundant messages (LastPrice, LastSize, Volume and Time ticks). // Display a message box for any errors. Write messages to the Debug window. interReactClient.Response .Subscribe(async message => { Debug.WriteLine(message.Stringify()); if (message is Alert alert && (alert.AlertType == AlertType.ConnectionLost || alert.AlertType == AlertType.ConnectionRestored)) { await SyncMessageBox.Show(alert.Message); } }, async exception => await SyncMessageBox.Show(exception.Message, terminate: true)); // Note that Symbol is an observable. Symbol.Throttle(TimeSpan.FromSeconds(1)) .DistinctUntilChanged() .Subscribe(async symbol => { try { await FindContract(symbol, interReactClient); } catch (Exception exception) { await SyncMessageBox.Show(exception.Message); } }); }