protected async override void OnDisposing()
        {
            if (disposed)
            {
                return;
            }

            await DisconnectSocketAsync(false).ConfigureAwait(true);

            symbolsSubscription.Dispose();
            accountSubscription.Dispose();
            parametersSubscription.Dispose();

            AccountViewModel.Dispose();
            SymbolsViewModel.Dispose();
            StrategyParametersViewModel.Dispose();
            serverMonitorCacheSubscription.Dispose();

            if (StrategyDisplayViewModel != null)
            {
                strategySubscription.Dispose();
                StrategyDisplayViewModel.Dispose();
            }

            strategyAssemblyManager.Dispose();

            commandVisibilitySemaphoreSlim.Dispose();

            disposed = true;
        }
Esempio n. 2
0
        protected async override void OnDisposing()
        {
            if (disposed)
            {
                return;
            }

            await DisconnectSocketAsync(false);

            symbolsSubscription.Dispose();
            accountSubscription.Dispose();
            ordersSubscription.Dispose();
            parametersSubscription.Dispose();

            AccountViewModel.Dispose();
            SymbolsViewModel.Dispose();
            OrdersViewModel.Dispose();
            StrategyParametersViewModel.Dispose();
            strategyAssemblyManager.Dispose();
            serverMonitorCacheSubscription.Dispose();

            if (StrategyDisplayViewModel != null)
            {
                strategySubscription.Dispose();
                StrategyDisplayViewModel.Dispose();
            }

            disposed = true;
        }
        protected async override void OnPublished(object data)
        {
            IsBusy = true;

            try
            {
                Strategy = await strategyService.GetStrategy(Title).ConfigureAwait(true);

                strategyAssemblyManager.Activate(Strategy, ViewModelContext.UiDispatcher, Logger);
                StrategyDisplayViewModel = (StrategyDisplayViewModelBase)strategyAssemblyManager.StrategyDisplayViewModel;

                ObserveStrategy();

                RaiseStrategyDisplayEvent();

                AccountViewModel.Dispatcher            = ViewModelContext.UiDispatcher;
                SymbolsViewModel.Dispatcher            = ViewModelContext.UiDispatcher;
                StrategyParametersViewModel.Dispatcher = ViewModelContext.UiDispatcher;

                StrategyParametersViewModel.Strategy = Strategy;

                var account = new Account(new CoreModel.AccountInfo {
                    User = new CoreModel.User()
                });

                if (Strategy.StrategySubscriptions.Any())
                {
                    var strategySubscription = Strategy.StrategySubscriptions.First();

                    account.AccountName   = strategySubscription.AccountName;
                    account.ApiKey        = strategySubscription.ApiKey;
                    account.ApiSecret     = strategySubscription.SecretKey;
                    account.ApiPassPhrase = strategySubscription.ApiPassPhrase;
                    account.Exchange      = strategySubscription.Exchange;
                }

                GetServerMonitors();

                await Task.WhenAll(SymbolsViewModel.GetStrategySymbols(Strategy), AccountViewModel.Login(account)).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                Logger.Log($"OnPublished {ex.Message}", Prism.Logging.Category.Exception, Prism.Logging.Priority.High);

                ShowMessage(new Message {
                    MessageType = MessageType.Error, Text = $"Strategy load error. Check configuration. {ex.Message}"
                });
            }
            finally
            {
                IsBusy = false;
            }
        }
Esempio n. 4
0
        public StrategyRunnerViewModel(
            ViewModelContext viewModelContext,
            AccountViewModel accountViewModel,
            SymbolsViewModel symbolsViewModel,
            OrdersViewModel ordersViewModel,
            StrategyParametersViewModel strategyParametersViewModel,
            IStrategyService strategyService,
            IServerMonitorCache serverMonitorCache,
            IStrategyAssemblyManager strategyAssemblyManager)
            : base(viewModelContext)
        {
            this.strategyService         = strategyService;
            this.serverMonitorCache      = serverMonitorCache;
            this.strategyAssemblyManager = strategyAssemblyManager;

            AccountViewModel            = accountViewModel;
            SymbolsViewModel            = symbolsViewModel;
            OrdersViewModel             = ordersViewModel;
            StrategyParametersViewModel = strategyParametersViewModel;

            CanRun       = false;
            CanMonitor   = false;
            IsConnected  = false;
            IsConnecting = false;

            Notifications = new ObservableCollection <Message>();

            RunCommand                = new ViewModelCommand(RunStrategy);
            MonitorCommand            = new ViewModelCommand(MonitorStrategy);
            DisconnectCommand         = new ViewModelCommand(Disconnect);
            StopCommand               = new ViewModelCommand(StopStrategy);
            ClearNotificationsCommand = new ViewModelCommand(ClearNotifications);

            ObserveOrders();
            ObserveSymbols();
            ObserveAccount();
            ObserveParameters();
            ObserveServerMonitorCache();
        }