Пример #1
0
        public SpotTilesViewModel(IReactiveTrader reactiveTrader,
            Func<ICurrencyPair, SpotTileSubscriptionMode, ISpotTileViewModel> spotTileFactory,
            IConcurrencyService concurrencyService,
            ILoggerFactory loggerFactory)
        {
            _referenceDataRepository = reactiveTrader.ReferenceData;
            _spotTileFactory = spotTileFactory;
            _concurrencyService = concurrencyService;
            _log = loggerFactory.Create(typeof (SpotTilesViewModel));

            SpotTiles = new ObservableCollection<ISpotTileViewModel>();

            _config = spotTileFactory(null, SpotTileSubscriptionMode.Conflate);
            _config.ToConfig();

            SpotTiles.Add(_config);

            _subscriptions.Add(
                _config.Config.ObserveProperty(p => p.SubscriptionMode)
                    .Subscribe(subscriptionMode => SpotTiles.Where(vm => vm.Pricing != null).ForEach(vm => vm.Pricing.SubscriptionMode = subscriptionMode)));

            _subscriptions.Add(
                _config.Config.ObserveProperty(p => p.ExecutionMode)
                    .Subscribe(executionMode => SpotTiles.Where(vm => vm.Pricing != null).ForEach(vm => vm.Pricing.ExecutionMode = executionMode)));

            LoadSpotTiles();
        }
Пример #2
0
        public SpotTilesViewModel(IReactiveTrader reactiveTrader,
                                  Func <ICurrencyPair, SpotTileSubscriptionMode, ISpotTileViewModel> spotTileFactory,
                                  IConcurrencyService concurrencyService,
                                  ILoggerFactory loggerFactory)
        {
            _referenceDataRepository = reactiveTrader.ReferenceData;
            _spotTileFactory         = spotTileFactory;
            _concurrencyService      = concurrencyService;
            _log = loggerFactory.Create(typeof(SpotTilesViewModel));

            SpotTiles = new ObservableCollection <ISpotTileViewModel>();

            _config = spotTileFactory(null, SpotTileSubscriptionMode.Conflate);
            _config.ToConfig();

            SpotTiles.Add(_config);

            _subscriptions.Add(
                _config.Config.ObserveProperty(p => p.SubscriptionMode)
                .Subscribe(subscriptionMode => SpotTiles.Where(vm => vm.Pricing != null).ForEach(vm => vm.Pricing.SubscriptionMode = subscriptionMode)));

            _subscriptions.Add(
                _config.Config.ObserveProperty(p => p.ExecutionMode)
                .Subscribe(executionMode => SpotTiles.Where(vm => vm.Pricing != null).ForEach(vm => vm.Pricing.ExecutionMode = executionMode)));

            LoadSpotTiles();
        }
Пример #3
0
        public SpotTileErrorViewModel(ISpotTileViewModel parent, string message)
        {
            _parent      = parent;
            ErrorMessage = message;

            DismissCommand = new DelegateCommand(Dismiss);
        }
        public SpotTileAffirmationViewModel(ITrade trade, ISpotTileViewModel parent)
        {
            _trade  = trade;
            _parent = parent;

            _dismissCommand = new DelegateCommand(OnDismissExecute);
        }
Пример #5
0
        public SpotTilePricingViewModel(ICurrencyPair currencyPair, SpotTileSubscriptionMode spotTileSubscriptionMode, ISpotTileViewModel parent,
                                        Func <Direction, ISpotTilePricingViewModel, IOneWayPriceViewModel> oneWayPriceFactory,
                                        IReactiveTrader reactiveTrader,
                                        IConcurrencyService concurrencyService,
                                        IConstantRatePump constantRatePump,
                                        ILoggerFactory loggerFactory)
        {
            _currencyPair         = currencyPair;
            _subscriptionMode     = spotTileSubscriptionMode;
            _parent               = parent;
            _priceLatencyRecorder = reactiveTrader.PriceLatencyRecorder;
            _concurrencyService   = concurrencyService;
            _constantRatePump     = constantRatePump;
            _log = loggerFactory.Create(typeof(SpotTilePricingViewModel));

            _priceSubscription = new SerialDisposable();
            Bid           = oneWayPriceFactory(Direction.SELL, this);
            Ask           = oneWayPriceFactory(Direction.BUY, this);
            Notional      = "1000000";
            DealtCurrency = currencyPair.BaseCurrency;
            SpotDate      = "SP";
            IsSubscribing = true;

            SubscribeForPrices();
        }
        public SpotTileAffirmationViewModel(ITrade trade, ISpotTileViewModel parent)
        {
            _trade = trade;
            _parent = parent;

            _dismissCommand = new DelegateCommand(OnDismissExecute);
        }
        public SpotTileErrorViewModel(ISpotTileViewModel parent, string message)
        {
            _parent = parent;
            ErrorMessage = message;

            DismissCommand = new DelegateCommand(Dismiss);
        }
        public SpotTilePricingViewModel(ICurrencyPair currencyPair, SpotTileSubscriptionMode spotTileSubscriptionMode, ISpotTileViewModel parent,
            Func<Direction, ISpotTilePricingViewModel, IOneWayPriceViewModel> oneWayPriceFactory,
            IReactiveTrader reactiveTrader,
            IConcurrencyService concurrencyService,
            IConstantRatePump constantRatePump,
            ILoggerFactory loggerFactory)
        {
            _currencyPair = currencyPair;
            _subscriptionMode = spotTileSubscriptionMode;
            _parent = parent;
            _priceLatencyRecorder = reactiveTrader.PriceLatencyRecorder;
            _concurrencyService = concurrencyService;
            _constantRatePump = constantRatePump;
            _log = loggerFactory.Create(typeof(SpotTilePricingViewModel));

            _priceSubscription = new SerialDisposable();
            Bid = oneWayPriceFactory(Direction.SELL, this);
            Ask = oneWayPriceFactory(Direction.BUY, this);
            Notional = "1000000";
            DealtCurrency = currencyPair.BaseCurrency;
            SpotDate = "SP";
            IsSubscribing = true;

            SubscribeForPrices();
        }
        public void Bind(ISpotTileViewModel spotTileViewModel, IConcurrencyService concurrencyService)
        {
            var stopwatch = new Stopwatch();
            stopwatch.Start();
            _allSubscriptions.Clear();

            int i = 0;

            concurrencyService.Dispatcher.Schedule(() =>
            {
                if (spotTileViewModel.State == TileState.Affirmation)
                {
                    spotTileViewModel.DismissAffirmation();
                }

                Reset();
                CurrencyPairLabel.Text = spotTileViewModel.Pricing.Symbol;
                BidButton.SetDataContext(spotTileViewModel.Pricing.Bid);
                AskButton.SetDataContext(spotTileViewModel.Pricing.Ask);
                SetHistoricPrices(spotTileViewModel.Pricing.HistoricalMid);
            });

            _allSubscriptions.Add(spotTileViewModel.Pricing.Bid
                .ObserveProperty(vm => vm.IsExecuting, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => AskButton.SetEnabledOverride(!s)));

            _allSubscriptions.Add(spotTileViewModel.Pricing.Ask
			                      .ObserveProperty(vm => vm.IsExecuting, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => BidButton.SetEnabledOverride(!s)));

			_allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Spread, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => SpreadLabel.Text = s));

			_allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.DealtCurrency, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => DealtCurrencyLabel.Text = s));

			_allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.SpotDate, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => SpotDateLabel.Text = s));

			_allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Mid, false)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(AddPrice));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.IsStale)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(SetIsStale));

            // two way bind the notional
            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Notional, true)
                .Where(n => n != NotionalTextBox.Text)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(s => NotionalTextBox.Text = s));

            _allSubscriptions.Add(NotionalTextBox
                .TextChangedStream()
                .Where(_ => spotTileViewModel.Pricing.Notional != NotionalTextBox.Text)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(_ =>
                {
                    spotTileViewModel.Pricing.Notional = NotionalTextBox.Text;
                }));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Movement, true)
                .ObserveOn(concurrencyService.Dispatcher)
                .Subscribe(m =>
                {
                    UpArrow.Visibility = m == PriceMovement.Up ? ViewStates.Visible : ViewStates.Invisible;
                    DownArrow.Visibility = m == PriceMovement.Down ? ViewStates.Visible : ViewStates.Invisible;
                }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                .Where(m => m == TileState.Affirmation)
                .SubscribeOn(concurrencyService.TaskPool)
                .Subscribe(async m =>
                {
                    try
                    {
                        _cancelAnimationSource = new CancellationTokenSource();
                        ShowAffirmation(spotTileViewModel.Affirmation);
                        await Task.Delay(4000, _cancelAnimationSource.Token);
                    }
                    catch (TaskCanceledException)
                    {
                        /* Animation was cancelled */
                    }
                    finally
                    {
                        spotTileViewModel.DismissAffirmation();
                    }
                }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                .Where(m => m == TileState.Pricing)
                .SubscribeOn(concurrencyService.TaskPool)
                .Subscribe(_ => ShowPricing()));
        }
Пример #10
0
        public void Bind(ISpotTileViewModel spotTileViewModel, IConcurrencyService concurrencyService)
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            _allSubscriptions.Clear();

            concurrencyService.Dispatcher.Schedule(() =>
            {
                if (spotTileViewModel.State == TileState.Affirmation)
                {
                    spotTileViewModel.DismissAffirmation();
                }

                Reset();
                CurrencyPairLabel.Text = spotTileViewModel.Pricing.Symbol;
                BidButton.SetDataContext(spotTileViewModel.Pricing.Bid);
                AskButton.SetDataContext(spotTileViewModel.Pricing.Ask);
                SetHistoricPrices(spotTileViewModel.Pricing.HistoricalMid);
            });

            _allSubscriptions.Add(spotTileViewModel.Pricing.Bid
                                  .ObserveProperty(vm => vm.IsExecuting, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => AskButton.SetEnabledOverride(!s)));

            _allSubscriptions.Add(spotTileViewModel.Pricing.Ask
                                  .ObserveProperty(vm => vm.IsExecuting, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => BidButton.SetEnabledOverride(!s)));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Spread, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => SpreadLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.DealtCurrency, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => DealtCurrencyLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.SpotDate, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => SpotDateLabel.Text = s));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Mid, false)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(AddPrice));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.IsStale)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(SetIsStale));

            // two way bind the notional
            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Notional, true)
                                  .Where(n => n != NotionalTextBox.Text)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(s => NotionalTextBox.Text = s));

            _allSubscriptions.Add(NotionalTextBox
                                  .TextChangedStream()
                                  .Where(_ => spotTileViewModel.Pricing.Notional != NotionalTextBox.Text)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(_ =>
            {
                spotTileViewModel.Pricing.Notional = NotionalTextBox.Text;
            }));

            _allSubscriptions.Add(spotTileViewModel.Pricing.ObserveProperty(vm => vm.Movement, true)
                                  .ObserveOn(concurrencyService.Dispatcher)
                                  .Subscribe(m =>
            {
                UpArrow.Visibility   = m == PriceMovement.Up ? ViewStates.Visible : ViewStates.Invisible;
                DownArrow.Visibility = m == PriceMovement.Down ? ViewStates.Visible : ViewStates.Invisible;
            }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                                  .Where(m => m == TileState.Affirmation)
                                  .SubscribeOn(concurrencyService.TaskPool)
                                  .Subscribe(async m =>
            {
                try
                {
                    _cancelAnimationSource = new CancellationTokenSource();
                    ShowAffirmation(spotTileViewModel.Affirmation);
                    await Task.Delay(4000, _cancelAnimationSource.Token);
                }
                catch (TaskCanceledException)
                {
                    /* Animation was cancelled */
                }
                finally
                {
                    spotTileViewModel.DismissAffirmation();
                }
            }));

            _allSubscriptions.Add(spotTileViewModel.ObserveProperty(vm => vm.State, true)
                                  .Where(m => m == TileState.Pricing)
                                  .SubscribeOn(concurrencyService.TaskPool)
                                  .Subscribe(_ => ShowPricing()));
        }