/// <summary>
        /// Выбираем пользователей, которые подписаны на портфель, и отписываем их от портфеля
        /// </summary>
        /// <param name="id">уникальный идентификатор портфеля</param>
        /// <returns></returns>
        private static bool UnsubscribeSubscribersFromPortfolio(int id)
        {
            var errorsUnsubscribe = new List <string>();

            try
            {
                using (var ctx = DatabaseContext.Instance.Make())
                {
                    var logins = ctx.USER_TOP_PORTFOLIO.Where(x => x.Portfolio == id).Select(x => x.PLATFORM_USER.Login);

                    var proxy = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance).proxy;
                    Logger.Info("Начинаем отписывать пользователей от портфеля id = " + id);
                    foreach (var login in logins)
                    {
                        var result = proxy.UnsubscribePortfolio(ProtectedOperationContext.MakeServerSideContext(), login, false, true);
                        if (result != RequestStatus.OK)
                        {
                            errorsUnsubscribe.Add(login);
                        }
                    }
                }
                if (errorsUnsubscribe.Count > 0)
                {
                    Logger.Error(string.Format("От портфеля {0} не удалось отписать следующих пользователей: {1}", id, string.Join(Environment.NewLine, errorsUnsubscribe)));
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                Logger.Error("UnsubscribeOnPortfolio()", ex);
                return(false);
            }
        }
Пример #2
0
        /// <summary>
        /// Отписать пользователя от сигналов
        /// </summary>
        /// <param name="userLogin">Логин потзователя, который больше не хочет быть подписчиком</param>
        /// <param name="serviceId">Сигналы, которые пользователь больше не хочет получать</param>
        /// <returns></returns>
        public string UnSubscribe(string userLogin, int serviceId)
        {
            string errorMessage;

            try
            {
                var         proxy = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance).proxy;
                WalletError walletError;
                var         status = proxy.SubscribeOnService(ProtectedOperationContext.MakeServerSideContext(),
                                                              userLogin, serviceId, false, true, null, out walletError);
                if (!status || walletError != WalletError.OK)
                {
                    errorMessage = Resource.ErrorMessageCampaignAccount;
                    Logger.Error(errorMessage);
                    return(errorMessage);
                }
                return(string.Empty);
            }
            catch (Exception ex)
            {
                errorMessage = Resource.ErrorMessageUnableSignAccount + ": " + ex.Message;
                Logger.Error("AddTopPortfolio", ex);
            }
            return(errorMessage);
        }
Пример #3
0
 public RobotContextLive(TradeSharpServerTrade proxyTrade, Account accountInfo, Func <string> getUserLogin)
 {
     this.proxyTrade   = proxyTrade;
     this.AccountInfo  = accountInfo;
     this.getUserLogin = getUserLogin;
     quotesStorage     = Contract.Util.BL.QuoteStorage.Instance;
 }
Пример #4
0
 public RobotContextLive(TradeSharpServerTrade proxyTrade, Account accountInfo, Func<string> getUserLogin)
 {
     this.proxyTrade = proxyTrade;
     this.AccountInfo = accountInfo;
     this.getUserLogin = getUserLogin;
     quotesStorage = Contract.Util.BL.QuoteStorage.Instance;
 }
Пример #5
0
 public RobotContextLive(TradeSharpServerTrade proxyTrade, Account accountInfo, Func <string> getUserLogin,
                         Func <List <Cortege2 <string, BarSettings> > > getAllUsedTickers)
 {
     this.proxyTrade        = proxyTrade;
     AccountInfo            = accountInfo;
     this.getUserLogin      = getUserLogin;
     this.getAllUsedTickers = getAllUsedTickers;
     quotesStorage          = Contract.Util.BL.QuoteStorage.Instance;
 }
Пример #6
0
 private NewsStorage()
 {
     try
     {
         proxyAccount = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance);
     }
     catch (Exception ex)
     {
         Logger.Error("NewsStorage ctor: ошибка создания proxyAccount", ex);
     }
 }
Пример #7
0
 private NewsStorage()
 {
     try
     {
         proxyAccount = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance);
     }
     catch (Exception ex)
     {
         Logger.Error("NewsStorage ctor: ошибка создания proxyAccount", ex);
     }
 }
        public string SubscribeOnPortfolioOnExistAccount(TopPortfolioItem newTopPortfolio)
        {
            string errorMessage;

            if (!newTopPortfolio.ManagedAccount.HasValue)
            {
                errorMessage = Resource.ErrorMessageCampaignAccount;
                Logger.Error(errorMessage);
                return(errorMessage);
            }

            var ownerUser = userRepository.GetAccountOwner(newTopPortfolio.ManagedAccount.Value);

            if (ownerUser == null)
            {
                errorMessage = Resource.ErrorMessageNotFindUserAccountOwner;
                Logger.Error(errorMessage);
                return(errorMessage);
            }

            var topPortfolio = AddTopPortfolio(newTopPortfolio);

            if (topPortfolio == null)
            {
                errorMessage = Resource.ErrorMessageTopPortfolioUnableAdd;
                Logger.Error(errorMessage);
                return(errorMessage);
            }

            Logger.Info("Новый портфель роботов создан");
            try
            {
                var proxy = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance).proxy;

                var status = proxy.SubscribeOnPortfolio(ProtectedOperationContext.MakeServerSideContext(),
                                                        ownerUser.Login, topPortfolio, null, Utils.GetDefaultPortfolioTradeSettings());
                if (status != RequestStatus.OK)
                {
                    errorMessage = Resource.ErrorMessageCampaignAccount;
                    Logger.Error(errorMessage);
                    return(errorMessage);
                }
                return(string.Empty);
            }
            catch (Exception ex)
            {
                errorMessage = Resource.ErrorMessageUnableSignAccount + ": " + ex.Message;
                Logger.Error("AddTopPortfolio", ex);
            }
            return(errorMessage);
        }
        public string SubscribeOnPortfolioOnNewAccount(TopPortfolioItem newTopPortfolio)
        {
            var accountRepository = DependencyResolver.Current.GetService <IAccountRepository>();

            string errorMessage;

            if (!accountRepository.AddAccount(newTopPortfolio.AddAccountModel))
            {
                errorMessage = Resource.ErrorMessageNotCreateAccountForTopPortfolio + " " + newTopPortfolio.AddAccountModel.UserName;
                Logger.Error("SubscribeOnPortfolioOnNewAccount() - " + errorMessage);
                return(errorMessage);
            }

            newTopPortfolio.ManagedAccount = accountRepository.GetAccountId(newTopPortfolio.AddAccountModel.UserLogin);

            var topPortfolio = AddTopPortfolio(newTopPortfolio);

            if (topPortfolio == null)
            {
                errorMessage = Resource.ErrorMessageTopPortfolioUnableAdd;
                Logger.Error(errorMessage);
                return(errorMessage);
            }

            Logger.Info("Новый портфель роботов создан");
            try
            {
                var proxy  = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance).proxy;
                var status = proxy.SubscribeOnPortfolio(ProtectedOperationContext.MakeServerSideContext(),
                                                        newTopPortfolio.AddAccountModel.UserLogin, topPortfolio, null, Utils.GetDefaultPortfolioTradeSettings());
                if (status != RequestStatus.OK)
                {
                    errorMessage = Resource.ErrorMessageUnableSignAccount;
                    Logger.Error(errorMessage);
                    return(errorMessage);
                }
                return(string.Empty);
            }
            catch (Exception ex)
            {
                errorMessage = Resource.ErrorMessageUnableSignAccount + ": " + ex.Message;
                Logger.Error("AddTopPortfolio", ex);
            }
            return(errorMessage);
        }
Пример #10
0
 public static string CheckCredentials(FarmAccountArg e)
 {
     try
     {
         var proxyTrade = new TradeSharpServerTrade(new TradeServerCallbackProcessor());
         var localTime  = DateTime.Now.Ticks;
         var hash       = CredentialsHash.MakeCredentialsHash(e.Login, e.Password, localTime);
         int sessionTag;
         var response = proxyTrade.proxy.Authenticate(e.Login, hash, "robot_farm",
                                                      TestTerminalId, localTime, out sessionTag);
         if (response != AuthenticationResponse.OK)
         {
             return(EnumFriendlyName <AuthenticationResponse> .GetString(response));
         }
         Account account;
         var     status = TradeSharpAccount.Instance.proxy.GetAccountInfo(e.AccountId, false, out account);
         // !! logout here
         return(EnumFriendlyName <RequestStatus> .GetString(status));
     }
     catch (Exception ex)
     {
         return(ex.Message);
     }
 }
Пример #11
0
        public bool SetupLiveContext()
        {
            context          = null;
            protectedContext = new CurrentProtectedContext();

            try
            {
                protectedContext.Initialize(TerminalId);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка инициализации защищенного контекста", ex);
                throw;
            }

            // создать объект proxy
            try
            {
                if (proxyTrade == null)
                {
                    proxyTrade = new TradeSharpServerTrade(callbackProcessor);
                }
            }
            catch (Exception ex)
            {
                RobotFarm.Instance.AppendLogMessage("Ошибка создания TradeSharpServerTrade: " + ex);
                return(false);
            }

            // залогиниться и
            // получить актуальную информацию по счету
            Account account;

            try
            {
                var localTime = DateTime.Now.Ticks;
                var hash      = CredentialsHash.MakeCredentialsHash(UserLogin, UserPassword, localTime);
                int sessionTag;
                var response = proxyTrade.proxy.Authenticate(UserLogin, hash,
                                                             TerminalVersionString, TerminalId, localTime, out sessionTag);
                if (response != AuthenticationResponse.OK)
                {
                    protectedContext.OnAuthenticateFaulted();
                    RobotFarm.Instance.AppendLogMessage(string.Format("Ошибка аутентификации ({0}-{1}): {2}",
                                                                      UserLogin, UserPassword, response));
                    return(false);
                }
                protectedContext.OnAuthenticated(sessionTag);

                var opRst = TradeSharpAccount.Instance.proxy.GetAccountInfo(AccountId, false, out account);
                if (account == null)
                {
                    RobotFarm.Instance.AppendLogMessage(string.Format("Невозможно получить информацию по счету {0}: {1}",
                                                                      AccountId, opRst));
                    return(false);
                }
                Logger.InfoFormat("User {0} authenticated on #{1}", UserLogin, AccountId);
            }
            catch (Exception ex)
            {
                RobotFarm.Instance.AppendLogMessage(
                    string.Format("Ошибка аутентификации ({0}-{1}): {2}",
                                  UserLogin, UserPassword, ex));
                return(false);
            }

            // инициализировать киборгов
            var countSuccess = robots == null ? 0 : robots.Count;

            if (robots != null && robots.Count > 0)
            {
                // контекст для роботов
                context = new RobotContextLiveFarm(proxyTrade, account, () => UserLogin, accountData,
                                                   () =>
                {
                    return(robots.SelectMany(r => r.Graphics).Distinct().ToList());
                })
                {
                    robotContextMode = RobotContext.ContextMode.Realtime
                };
                context.OnRobotMessage += (robot, time, messages) =>
                {
                    foreach (var msg in messages)
                    {
                        RobotFarm.Instance.AppendLogMessage(
                            "#" + AccountId + ": [" +
                            robot.GetUniqueName() + "] said \"" + msg + "\"");
                    }
                };

                // включить каждого робота в контекст
                foreach (var robot in robots)
                {
                    try
                    {
                        robot.Initialize(context, protectedContext);
                        context.SubscribeRobot(robot);
                    }
                    catch (Exception ex)
                    {
                        countSuccess--;
                        RobotFarm.Instance.AppendLogMessage("Ошибка инициализации робота " +
                                                            robot.GetUniqueName() + ": " + ex);
                    }
                }
            }

            // создать объект - обработчик торговых сигалов
            callbackProcessor.SignalProcessor = new TradeSignalProcessor(
                () => accountData.GetActualAccount(true),
                s => RobotFarm.Instance.AppendLogMessage(s),
                () => accountData.GetActualOrderList(),
                () => VolumeRoundType.Ближайшее,
                proxyTrade.proxy, protectedContext, this);

            return((robots == null || robots.Count <= 0) || countSuccess > 0);
        }
 public TerminalLiveRobotContext(TradeSharpServerTrade proxyTrade, Account accountInfo, Func <string> getUserLogin)
     : base(proxyTrade, accountInfo, getUserLogin)
 {
 }
Пример #13
0
        public void Initialize(Action closeHandler,
            TradeSharpServerTrade serverProxyAccount,
            Action<TradeSignalUpdate> signalUpdateSelected,
            Func<Account> getActualAccountData,
            Func<string> getUserLogin,
            Action<PerformerStat> investInPAMM,
            SavePerformersGridSelectedColumnsDel savePerformersGridSelectedColumns,
            LoadPerformersGridSelectedColumnsDel loadPerformersGridSelectedColumns,
            Func<ActionOnSignal> getActionOnSignal,
            Action<ActionOnSignal> setActionOnSignal,
            ChatControlBackEnd chat)
        {
            var gr = CreateGraphics();

            this.closeHandler = closeHandler;
            this.chat = chat;
            AccountModel.Instance.Initialize(getActualAccountData, getUserLogin, investInPAMM, serverProxyAccount.proxy, chat);
            SubscriptionModel.Instance.getActionOnSignal = getActionOnSignal;
            SubscriptionModel.Instance.setActionOnSignal = setActionOnSignal;
            subscriptionGrid.ShowTopPortfolio += portfolio =>
                {
                    LoadPortfolioSubscribers(portfolio);
                    Page = ActivePage.Performers;
                };

            // strategies
            var criterias = PerformerCriteriaFunctionCollection.Instance.criterias;
            var criteriaTitles = criterias.Select(c => c.Description).ToList();
            criteriaComboBox.Items.AddRange(criteriaTitles.Select(c => c as object).ToArray());
            criteriaComboBox.DropDownWidth = criteriaTitles.Max(c => gr.MeasureString(c, Font).ToSize().Width);
            criteriaComboBox.Width = criteriaComboBox.DropDownWidth + SystemInformation.VerticalScrollBarWidth;

            var indexInCombo = countComboBox.Items.Cast<string>().IndexOf("50");
            countComboBox.SelectedIndex = indexInCombo < 0 ? 0 : indexInCombo;

            sortOrderComboBox.Items.AddRange(EnumItem<PerformerSortOrder>.items.Cast<object>().ToArray());

            SetupSortCombos(gr);

            criteriaComboBox.SelectedIndex = criterias.IndexOf(PerformerCriteriaFunctionCollection.Instance.SelectedFunction);

            //topFilterControl.SortOrder = sortOrderComboBox.SelectedIndex == 0 ? SortOrder.Ascending : SortOrder.Descending;
            topFilterControl.PerformerCriteriaFunctionCollectionChanged += OnPerformerCriteriaFunctionCollectionChanged;
            topFilterControl.PerformerCriteriaFunctionChanged += OnPerformerCriteriaFunctionChanged;
            topFilterControl.CollapseButtonClicked += CollapseTopFilterControlButtonClick;
            topFilterControl.RefreshButtonClicked += RefreshButtonClick;
            topFilterControl.CreatePortfolioButtonClicked += CreatePortfolioButtonClick;

            IsExtendedPanelVisible = false;

            performersWorker.DoWork += GetPerformers;
            performersWorker.RunWorkerCompleted += GetPerformersCompleted;

            performerFilterWorker.DoWork += GetPerformersByFilters;
            performerFilterWorker.RunWorkerCompleted += GetPerformersByFiltersCompleted;

            // 4 refresh button
            refreshButtonColors = new[]
                {
                    refreshButton.BackColor,
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.8f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                    refreshButton.BackColor,
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.2f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f)
                };
            topFilterControl.RefreshButtonEnabled = false;
            refreshButton.Enabled = false;

            performerGridCtrl.LoadPerformersGridSelectedColumns = loadPerformersGridSelectedColumns;
            performerGridCtrl.SavePerformersGridSelectedColumns = savePerformersGridSelectedColumns;
            performerGridCtrl.EnterRoomRequested += OnEnterRoomRequested;
            performerGridCtrl.PageTargeted += page => Page = page;
            performerGridCtrl.SetupGrid();

            signalFastGrid.SignalUpdateSelected += signalUpdateSelected;

            // company top portfolios
            portfoliosWorker.DoWork += GetPortfoloios;
            portfoliosWorker.RunWorkerCompleted += GetPortfoloiosCompleted;

            // my top
            myPortfoliosWorker.DoWork += GetMyPortfolio;
            myPortfoliosWorker.RunWorkerCompleted += GetMyPortfolioCompleted;

            signalsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
            pammsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
        }
Пример #14
0
 public static string CheckCredentials(FarmAccountArg e)
 {
     try
     {
         var proxyTrade = new TradeSharpServerTrade(new TradeServerCallbackProcessor());
         var localTime = DateTime.Now.Ticks;
         var hash = CredentialsHash.MakeCredentialsHash(e.Login, e.Password, localTime);
         int sessionTag;
         var response = proxyTrade.proxy.Authenticate(e.Login, hash, "robot_farm",
             TestTerminalId, localTime, out sessionTag);
         if (response != AuthenticationResponse.OK)
             return EnumFriendlyName<AuthenticationResponse>.GetString(response);
         Account account;
         var status = TradeSharpAccount.Instance.proxy.GetAccountInfo(e.AccountId, false, out account);
         // !! logout here
         return EnumFriendlyName<RequestStatus>.GetString(status);
     }
     catch (Exception ex)
     {
         return ex.Message;
     }
 }
Пример #15
0
        public bool SetupLiveContext()
        {
            context = null;
            protectedContext = new CurrentProtectedContext();

            try
            {
                protectedContext.Initialize(TerminalId);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка инициализации защищенного контекста", ex);
                throw;
            }

            // создать объект proxy
            try
            {
                if (proxyTrade == null)
                    proxyTrade = new TradeSharpServerTrade(callbackProcessor);
            }
            catch (Exception ex)
            {
                RobotFarm.Instance.AppendLogMessage("Ошибка создания TradeSharpServerTrade: " + ex);
                return false;
            }

            // залогиниться и
            // получить актуальную информацию по счету
            Account account;
            try
            {
                var localTime = DateTime.Now.Ticks;
                var hash = CredentialsHash.MakeCredentialsHash(UserLogin, UserPassword, localTime);
                int sessionTag;
                var response = proxyTrade.proxy.Authenticate(UserLogin, hash,
                    TerminalVersionString, TerminalId, localTime, out sessionTag);
                if (response != AuthenticationResponse.OK)
                {
                    protectedContext.OnAuthenticateFaulted();
                    RobotFarm.Instance.AppendLogMessage(string.Format("Ошибка аутентификации ({0}-{1}): {2}",
                        UserLogin, UserPassword, response));
                    return false;
                }
                protectedContext.OnAuthenticated(sessionTag);

                var opRst = TradeSharpAccount.Instance.proxy.GetAccountInfo(AccountId, false, out account);
                if (account == null)
                {
                    RobotFarm.Instance.AppendLogMessage(string.Format("Невозможно получить информацию по счету {0}: {1}",
                        AccountId, opRst));
                    return false;
                }
                Logger.InfoFormat("User {0} authenticated on #{1}", UserLogin, AccountId);
            }
            catch (Exception ex)
            {
                RobotFarm.Instance.AppendLogMessage(
                    string.Format("Ошибка аутентификации ({0}-{1}): {2}",
                        UserLogin, UserPassword, ex));
                return false;
            }

            // инициализировать киборгов
            var countSuccess = robots == null ? 0 : robots.Count;
            if (robots != null && robots.Count > 0)
            {
                // контекст для роботов
                context = new RobotContextLiveFarm(proxyTrade, account, () => UserLogin, accountData)
                {
                    robotContextMode = RobotContext.ContextMode.Realtime
                };
                context.OnRobotMessage += (robot, time, messages) =>
                {
                    foreach (var msg in messages)
                        RobotFarm.Instance.AppendLogMessage(
                            "#" + AccountId + ": [" +
                            robot.GetUniqueName() + "] said \"" + msg + "\"");
                };

                // включить каждого робота в контекст
                foreach (var robot in robots)
                {
                    try
                    {
                        robot.Initialize(context, protectedContext);
                        context.SubscribeRobot(robot);
                    }
                    catch (Exception ex)
                    {
                        countSuccess--;
                        RobotFarm.Instance.AppendLogMessage("Ошибка инициализации робота " +
                                                            robot.GetUniqueName() + ": " + ex);
                    }
                }
            }

            // создать объект - обработчик торговых сигалов
            callbackProcessor.SignalProcessor = new TradeSignalProcessor(
                () => accountData.GetActualAccount(true),
                s => RobotFarm.Instance.AppendLogMessage(s),
                () => accountData.GetActualOrderList(),
                () => VolumeRoundType.Ближайшее,
                proxyTrade.proxy, protectedContext, this);

            return (robots == null || robots.Count <= 0) || countSuccess > 0;
        }
Пример #16
0
 public RobotContextLiveFarm(TradeSharpServerTrade proxyTrade, Account accountInfo, Func<string> getUserLogin,
     ActualAccountData accountData)
     : base(proxyTrade, accountInfo, getUserLogin)
 {
     this.accountData = accountData;
 }
        public string SubscribeOnPortfolioOnExistAccount(TopPortfolioItem newTopPortfolio)
        {
            string errorMessage;
            if (!newTopPortfolio.ManagedAccount.HasValue)
            {
                errorMessage = Resource.ErrorMessageCampaignAccount;
                Logger.Error(errorMessage);
                return errorMessage;
            }

            var ownerUser = userRepository.GetAccountOwner(newTopPortfolio.ManagedAccount.Value);
            if (ownerUser == null)
            {
                errorMessage = Resource.ErrorMessageNotFindUserAccountOwner;
                Logger.Error(errorMessage);
                return errorMessage;
            }

            var topPortfolio = AddTopPortfolio(newTopPortfolio);
            if (topPortfolio == null)
            {
                errorMessage = Resource.ErrorMessageTopPortfolioUnableAdd;
                Logger.Error(errorMessage);
                return errorMessage;
            }

            Logger.Info("Новый портфель роботов создан");
            try
            {
                var proxy = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance).proxy;

                var status = proxy.SubscribeOnPortfolio(ProtectedOperationContext.MakeServerSideContext(),
                                                        ownerUser.Login, topPortfolio, null, Utils.GetDefaultPortfolioTradeSettings());
                if (status != RequestStatus.OK)
                {
                    errorMessage = Resource.ErrorMessageCampaignAccount;
                    Logger.Error(errorMessage);
                    return errorMessage;
                }
                return string.Empty;
            }
            catch (Exception ex)
            {
                errorMessage = Resource.ErrorMessageUnableSignAccount + ": " + ex.Message;
                Logger.Error("AddTopPortfolio", ex);
            }
            return errorMessage;
        }
        public string SubscribeOnPortfolioOnNewAccount(TopPortfolioItem newTopPortfolio)
        {
            var accountRepository = DependencyResolver.Current.GetService<IAccountRepository>();

            string errorMessage;
            if (!accountRepository.AddAccount(newTopPortfolio.AddAccountModel))
            {
                errorMessage = Resource.ErrorMessageNotCreateAccountForTopPortfolio + " " + newTopPortfolio.AddAccountModel.UserName;
                Logger.Error("SubscribeOnPortfolioOnNewAccount() - " + errorMessage);
                return errorMessage;
            }

            newTopPortfolio.ManagedAccount = accountRepository.GetAccountId(newTopPortfolio.AddAccountModel.UserLogin);

            var topPortfolio = AddTopPortfolio(newTopPortfolio);
            if (topPortfolio == null)
            {
                errorMessage = Resource.ErrorMessageTopPortfolioUnableAdd;
                Logger.Error(errorMessage);
                return errorMessage;
            }

            Logger.Info("Новый портфель роботов создан");
            try
            {
                var proxy = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance).proxy;
                var status = proxy.SubscribeOnPortfolio(ProtectedOperationContext.MakeServerSideContext(),
                    newTopPortfolio.AddAccountModel.UserLogin, topPortfolio, null, Utils.GetDefaultPortfolioTradeSettings());
                if (status != RequestStatus.OK)
                {
                    errorMessage = Resource.ErrorMessageUnableSignAccount;
                    Logger.Error(errorMessage);
                    return errorMessage;
                }
                return string.Empty;
            }
            catch (Exception ex)
            {
                errorMessage = Resource.ErrorMessageUnableSignAccount + ": " + ex.Message;
                Logger.Error("AddTopPortfolio", ex);
            }
            return errorMessage;
        }
Пример #19
0
        private void ResumeConnectionWithServer()
        {
            try
            {
                serverProxyTrade = new TradeSharpServerTrade(this);
            }
            catch (Exception ex)
            {
                Logger.Error("Ошибка подключения к серверу МТС.Live (Trade)", ex);
            }
            SubscriptionModel.Instance.ServerProxy = serverProxyTrade.proxy;

            try
            {
                newsProxy = new NewsStorageProxy("INewsStorageBinding");
            }
            catch (Exception)
            {
                Logger.Error("Связь с сервером (INewsStorageBinding) не установлена");
            }
        }
 public TerminalLiveRobotContext(TradeSharpServerTrade proxyTrade, Account accountInfo, Func<string> getUserLogin)
     : base(proxyTrade, accountInfo, getUserLogin)
 {
 }
        /// <summary>
        /// Выбираем пользователей, которые подписаны на портфель, и отписываем их от портфеля
        /// </summary>
        /// <param name="id">уникальный идентификатор портфеля</param>
        /// <returns></returns>
        private static bool UnsubscribeSubscribersFromPortfolio(int id)
        {
            var errorsUnsubscribe = new List<string>();
            try
            {
                using (var ctx = DatabaseContext.Instance.Make())
                {
                    var logins = ctx.USER_TOP_PORTFOLIO.Where(x => x.Portfolio == id).Select(x => x.PLATFORM_USER.Login);

                    var proxy = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance).proxy;
                    Logger.Info("Начинаем отписывать пользователей от портфеля id = " + id);
                    foreach (var login in logins)
                    {
                        var result = proxy.UnsubscribePortfolio(ProtectedOperationContext.MakeServerSideContext(), login, false, true);
                        if (result != RequestStatus.OK) errorsUnsubscribe.Add(login);
                    }
                }
                if (errorsUnsubscribe.Count > 0)
                {
                    Logger.Error(string.Format("От портфеля {0} не удалось отписать следующих пользователей: {1}", id, string.Join(Environment.NewLine, errorsUnsubscribe)));
                    return false;
                }
                return true;
            }
            catch (Exception ex)
            {
                Logger.Error("UnsubscribeOnPortfolio()", ex);
                return false;
            }
        }
Пример #22
0
 public RobotContextLiveFarm(TradeSharpServerTrade proxyTrade, Account accountInfo, Func <string> getUserLogin,
                             ActualAccountData accountData) :
     base(proxyTrade, accountInfo, getUserLogin)
 {
     this.accountData = accountData;
 }
Пример #23
0
 public TerminalLiveRobotContext(TradeSharpServerTrade proxyTrade, Account accountInfo, Func <string> getUserLogin,
                                 Func <List <Cortege2 <string, BarSettings> > > getAllUsedTickers)
     : base(proxyTrade, accountInfo, getUserLogin, getAllUsedTickers)
 {
 }
Пример #24
0
 /// <summary>
 /// Отписать пользователя от сигналов
 /// </summary>
 /// <param name="userLogin">Логин потзователя, который больше не хочет быть подписчиком</param>
 /// <param name="serviceId">Сигналы, которые пользователь больше не хочет получать</param>
 /// <returns></returns>
 public string UnSubscribe(string userLogin, int serviceId)
 {
     string errorMessage;
     try
     {
         var proxy = new TradeSharpServerTrade(EmptyTradeSharpCallbackReceiver.Instance).proxy;
         WalletError walletError;
         var status = proxy.SubscribeOnService(ProtectedOperationContext.MakeServerSideContext(),
                                                 userLogin, serviceId, false, true, null, out walletError);
         if (!status || walletError != WalletError.OK)
         {
             errorMessage = Resource.ErrorMessageCampaignAccount;
             Logger.Error(errorMessage);
             return errorMessage;
         }
         return string.Empty;
     }
     catch (Exception ex)
     {
         errorMessage = Resource.ErrorMessageUnableSignAccount + ": " + ex.Message;
         Logger.Error("AddTopPortfolio", ex);
     }
     return errorMessage;
 }
Пример #25
0
 public RobotContextLiveFarm(TradeSharpServerTrade proxyTrade, Account accountInfo, Func <string> getUserLogin,
                             ActualAccountData accountData, Func <List <Cortege2 <string, BarSettings> > > getAllUsedTickers) :
     base(proxyTrade, accountInfo, getUserLogin, getAllUsedTickers)
 {
     this.accountData = accountData;
 }
Пример #26
0
        public void Initialize(Action closeHandler,
                               TradeSharpServerTrade serverProxyAccount,
                               Action <TradeSignalUpdate> signalUpdateSelected,
                               Func <Account> getActualAccountData,
                               Func <string> getUserLogin,
                               Action <PerformerStat> investInPAMM,
                               SavePerformersGridSelectedColumnsDel savePerformersGridSelectedColumns,
                               LoadPerformersGridSelectedColumnsDel loadPerformersGridSelectedColumns,
                               Func <ActionOnSignal> getActionOnSignal,
                               Action <ActionOnSignal> setActionOnSignal,
                               ChatControlBackEnd chat)
        {
            var gr = CreateGraphics();

            this.closeHandler = closeHandler;
            this.chat         = chat;
            AccountModel.Instance.Initialize(getActualAccountData, getUserLogin, investInPAMM, serverProxyAccount.proxy, chat);
            SubscriptionModel.Instance.getActionOnSignal = getActionOnSignal;
            SubscriptionModel.Instance.setActionOnSignal = setActionOnSignal;
            subscriptionGrid.ShowTopPortfolio           += portfolio =>
            {
                LoadPortfolioSubscribers(portfolio);
                Page = ActivePage.Performers;
            };

            // strategies
            var criterias      = PerformerCriteriaFunctionCollection.Instance.criterias;
            var criteriaTitles = criterias.Select(c => c.Description).ToList();

            criteriaComboBox.Items.AddRange(criteriaTitles.Select(c => c as object).ToArray());
            criteriaComboBox.DropDownWidth = criteriaTitles.Max(c => gr.MeasureString(c, Font).ToSize().Width);
            criteriaComboBox.Width         = criteriaComboBox.DropDownWidth + SystemInformation.VerticalScrollBarWidth;

            var indexInCombo = countComboBox.Items.Cast <string>().IndexOf("50");

            countComboBox.SelectedIndex = indexInCombo < 0 ? 0 : indexInCombo;

            sortOrderComboBox.Items.AddRange(EnumItem <PerformerSortOrder> .items.Cast <object>().ToArray());

            SetupSortCombos(gr);

            criteriaComboBox.SelectedIndex = criterias.IndexOf(PerformerCriteriaFunctionCollection.Instance.SelectedFunction);

            //topFilterControl.SortOrder = sortOrderComboBox.SelectedIndex == 0 ? SortOrder.Ascending : SortOrder.Descending;
            topFilterControl.PerformerCriteriaFunctionCollectionChanged += OnPerformerCriteriaFunctionCollectionChanged;
            topFilterControl.PerformerCriteriaFunctionChanged           += OnPerformerCriteriaFunctionChanged;
            topFilterControl.CollapseButtonClicked        += CollapseTopFilterControlButtonClick;
            topFilterControl.RefreshButtonClicked         += RefreshButtonClick;
            topFilterControl.CreatePortfolioButtonClicked += CreatePortfolioButtonClick;

            IsExtendedPanelVisible = false;

            performersWorker.DoWork             += GetPerformers;
            performersWorker.RunWorkerCompleted += GetPerformersCompleted;

            performerFilterWorker.DoWork             += GetPerformersByFilters;
            performerFilterWorker.RunWorkerCompleted += GetPerformersByFiltersCompleted;

            // 4 refresh button
            refreshButtonColors = new[]
            {
                refreshButton.BackColor,
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.8f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                refreshButton.BackColor,
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.2f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f)
            };
            topFilterControl.RefreshButtonEnabled = false;
            refreshButton.Enabled = false;

            performerGridCtrl.LoadPerformersGridSelectedColumns = loadPerformersGridSelectedColumns;
            performerGridCtrl.SavePerformersGridSelectedColumns = savePerformersGridSelectedColumns;
            performerGridCtrl.EnterRoomRequested += OnEnterRoomRequested;
            performerGridCtrl.PageTargeted       += page => Page = page;
            performerGridCtrl.SetupGrid();

            signalFastGrid.SignalUpdateSelected += signalUpdateSelected;

            // company top portfolios
            portfoliosWorker.DoWork             += GetPortfoloios;
            portfoliosWorker.RunWorkerCompleted += GetPortfoloiosCompleted;

            // my top
            myPortfoliosWorker.DoWork             += GetMyPortfolio;
            myPortfoliosWorker.RunWorkerCompleted += GetMyPortfolioCompleted;

            signalsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
            pammsToolStripMenuItem.CheckedChanged   += ParametersContextMenuStripItemClicked;
        }