private PositionsViewModel GetVm(
            IMarketDataManager marketDataManager         = null,
            IPositionManager positionManager             = null,
            IContractManager contractManager             = null,
            ITradeRecordingService tradeRecordingService = null)
        {
            var manager = marketDataManager ?? Substitute.For <IMarketDataManager>();

            _accountManager = Substitute.For <IAccountManager>();

            if (positionManager == null)
            {
                positionManager = Substitute.For <IPositionManager>();
                positionManager.RequestOpenOrdersAsync().Returns(Task.FromResult(new List <OpenOrderEventArgs>()));
            }

            if (contractManager == null)
            {
                contractManager = Substitute.For <IContractManager>();
                contractManager.RequestDetailsAsync(Arg.Any <Contract>()).Returns(Task.FromResult(new List <ContractDetails>()));
            }

            var queueProcessor = Substitute.For <IQueueProcessor>();

            queueProcessor
            .When(x => x.Enqueue(Arg.Any <Action>()))
            .Do(x =>
            {
                var action = x.Arg <Action>();
                action.Invoke();
            });

            var dispatcherHelper = Substitute.For <IDispatcherHelper>();

            dispatcherHelper
            .When(x => x.InvokeOnUiThread(Arg.Any <Action>()))
            .Do(x =>
            {
                var action = x.Arg <Action>();
                action.Invoke();
            });

            if (tradeRecordingService == null)
            {
                tradeRecordingService = Substitute.For <ITradeRecordingService>();
            }

            return(new PositionsViewModel(dispatcherHelper, manager, _accountManager, positionManager, contractManager, queueProcessor, tradeRecordingService));
        }
Beispiel #2
0
        public PositionsViewModel(
            IDispatcherHelper dispatcherHelper,
            IMarketDataManager marketDataManager,
            IAccountManager accountManager,
            IPositionManager positionManager,
            IContractManager contractManager,
            IQueueProcessor queueProcessor,
            ITradeRecordingService tradeRecordingService)
            : base(dispatcherHelper, queueProcessor)
        {
            Positions = new ObservableCollectionNoReset <PositionItem>(dispatcherHelper: DispatcherHelper);

            Messenger.Default.Register <ConnectionChangingMessage>(this, HandleConnectionChangingMessage);
            Messenger.Default.Register <OrderStatusChangedMessage>(this, OrderStatusChangedMessage.Tokens.Positions, OnOrderStatusChangedMessage);
            Messenger.Default.Register <BarPriceMessage>(this, HandleBarPriceMessage);

            _marketDataManager     = marketDataManager;
            _accountManager        = accountManager;
            _positionManager       = positionManager;
            _contractManager       = contractManager;
            _queueProcessor        = queueProcessor;
            _tradeRecordingService = tradeRecordingService;
        }
        public MainViewModel(
            IDispatcherHelper dispatcherHelper,
            IConnectionService connectionService,
            IOrderCalculationService orderCalculationService,
            PositionsViewModel positionsViewModel,
            SettingsViewModel settingsViewModel,
            OrdersListViewModel ordersListViewModel,
            IRiskCalculationService riskCalculationService,
            ITradeRecordingService tradeRecordingService)
            : base(dispatcherHelper)
        {
            _connectionService                  = connectionService;
            OrdersListViewModel                 = ordersListViewModel;
            _riskCalculationService             = riskCalculationService;
            _tradeRecordingService              = tradeRecordingService;
            PositionsViewModel                  = positionsViewModel;
            _settingsViewModel                  = settingsViewModel;
            _settingsViewModel.PropertyChanged += OnSettingsViewModelPropertyChanged;
            _orderCalculationService            = orderCalculationService;

            Messenger.Default.Register <ConnectionChangedMessage>(this, HandleConnectionChangedMessage);
            Messenger.Default.Register <DetailsPanelClosedMessage>(this, HandleDetailsPanelClosed);
            Messenger.Default.Register <OrderStatusChangedMessage>(this, OrderStatusChangedMessage.Tokens.Main, HandleOrderStatusChangedMessage);

            _connectionService.ClientError += HandleClientError;
            SetConnectionStatus();
            CreateMenuItems();

            // Load settings on a different thread as it's slow and so that we can show the main window straight away
            Task.Run(() => _settingsViewModel.LoadSettingsAsync())
            .ContinueWith(t =>
            {
                HandleLoadSettingsTaskResult(t);
            })
            .ConfigureAwait(false);
        }
 public MainViewModelBuilder WithTradeRecordingService(ITradeRecordingService tradeRecordingService)
 {
     _tradeRecordingService = tradeRecordingService;
     return(this);
 }