Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
                }
            });
        }