Пример #1
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;
        }
Пример #2
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);
        }