Esempio n. 1
0
        /// <summary>
        /// create a new optimization server
        /// создать новый сервер оптимизации
        /// </summary>
        public static OptimizerServer CreateNextOptimizerServer(OptimizerDataStorage storage, int num, decimal portfolioStartVal)
        {
            OptimizerServer serv = new OptimizerServer(storage, num, portfolioStartVal);

            bool isInArray = false;

            if (_servers == null)
            {
                _servers = new List <IServer>();
            }

            for (int i = 0; i < _servers.Count; i++)
            {
                if (_servers[i].ServerType == ServerType.Optimizer)
                {
                    _servers[i] = serv;
                    isInArray   = true;
                }
            }

            if (isInArray == false)
            {
                _servers.Add(serv);
            }

            if (ServerCreateEvent != null)
            {
                ServerCreateEvent(serv);
            }
            return(serv);
        }
Esempio n. 2
0
        // единичный тест

        public BotPanel TestBot(OptimazerFazeReport reportFaze, OptimizerReport reportToBot)
        {
            if (_primeThreadWorker != null)
            {
                return(null);
            }

            string botName = NumberGen.GetNumberDeal(StartProgram.IsOsOptimizer).ToString();

            List <string> names = new List <string> {
                botName
            };

            _asyncBotFactory.CreateNewBots(names, _master.StrategyName, _master.IsScript, StartProgram.IsTester);

            OptimizerServer server = CreateNewServer(reportFaze);

            List <IIStrategyParameter> parametrs = reportToBot.GetParameters();

            BotPanel bot = CreateNewBot(botName,
                                        parametrs, parametrs, server, StartProgram.IsTester);

            DateTime timeStartWaiting = DateTime.Now;

            while (bot.IsConnected == false)
            {
                Thread.Sleep(50);

                if (timeStartWaiting.AddSeconds(20) < DateTime.Now)
                {
                    SendLogMessage(
                        OsLocalization.Optimizer.Message10,
                        LogMessageType.Error);
                    return(null);
                }
            }

            server.TestingStart();

            timeStartWaiting = DateTime.Now;
            while (bot.TabsSimple[0].CandlesAll == null
                   ||
                   bot.TabsSimple[0].TimeServerCurrent.AddHours(1) < reportFaze.Faze.TimeEnd)
            {
                Thread.Sleep(20);
                if (timeStartWaiting.AddSeconds(20) < DateTime.Now)
                {
                    break;
                }
            }

            Thread.Sleep(2000);

            return(bot);
        }
Esempio n. 3
0
        /// <summary>
        /// создать новый сервер оптимизации
        /// </summary>
        public static OptimizerServer CreateNextOptimizerServer(OptimizerDataStorage storage, int num, decimal portfolioStartVal)
        {
            _servers = new List <IServer>();

            OptimizerServer serv = new OptimizerServer(storage, num, portfolioStartVal);

            _servers.Add(serv);

            if (ServerCreateEvent != null)
            {
                ServerCreateEvent();
            }
            return(serv);
        }
Esempio n. 4
0
        /// <summary>
        /// create a new optimization server
        /// создать новый сервер оптимизации
        /// </summary>
        public static OptimizerServer CreateNextOptimizerServer(OptimizerDataStorage storage, int num, decimal portfolioStartVal)
        {
            lock (_optimizerGeneratorLocker)
            {
                OptimizerServer serv = new OptimizerServer(storage, num, portfolioStartVal);

                if (serv == null)
                {
                    return(null);
                }

                bool isInArray = false;

                if (_servers == null)
                {
                    _servers = new List <IServer>();
                }

                for (int i = 0; i < _servers.Count; i++)
                {
                    IServer ser = _servers[i];

                    if (ser == null)
                    {
                        _servers.RemoveAt(i);
                        i--;
                        continue;
                    }

                    if (ser.ServerType == ServerType.Optimizer &&
                        ((OptimizerServer)ser).NumberServer == serv.NumberServer)
                    {
                        _servers[i] = serv;
                        isInArray   = true;
                    }
                }

                if (isInArray == false)
                {
                    _servers.Add(serv);
                }

                if (ServerCreateEvent != null)
                {
                    ServerCreateEvent(serv);
                }
                return(serv);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// launch another robot as part of optimization
        /// запустить ещё одного робота, в рамках оптимизации
        /// </summary>
        /// <param name="parametrs">list of all parameters/список всех параметров</param>
        /// <param name="paramOptimized">brute force options/параметры по которым осуществляется перебор</param>
        /// <param name="report">current optimization phase/текущая фаза оптимизации</param>
        /// <param name="botsInFaze">list of bots already running in the current phase/список ботов уже запущенный в текущей фазе</param>
        /// <param name="botName">the name of the created robot/имя создаваемого робота</param>
        private void StartNewBot(List <IIStrategyParameter> parametrs, List <IIStrategyParameter> paramOptimized,
                                 OptimazerFazeReport report, string botName)
        {
            /*if (!MainWindow.GetDispatcher.CheckAccess())
             * {
             *  MainWindow.GetDispatcher.Invoke(
             *      new Action
             *          <List<IIStrategyParameter>, List<IIStrategyParameter>,
             *              OptimazerFazeReport, string>(StartNewBot),
             *      parametrs, paramOptimized, report, botName);
             *  await Task.Delay(1000);
             *  return;
             * }*/

            OptimizerServer server = CreateNewServer(report);

            try
            {
                decimal num = Convert.ToDecimal(botName[0]);
            }
            catch
            {
                botName = server.NumberServer + botName;
            }

            BotPanel bot = CreateNewBot(botName, parametrs, paramOptimized, server, StartProgram.IsOsOptimizer);

            // wait for the robot to connect to its data server
            // ждём пока робот подключиться к своему серверу данных

            DateTime timeStartWaiting = DateTime.Now;

            while (bot.IsConnected == false)
            {
                Thread.Sleep(20);

                if (timeStartWaiting.AddSeconds(2000) < DateTime.Now)
                {
                    SendLogMessage(
                        OsLocalization.Optimizer.Message10,
                        LogMessageType.Error);
                    return;
                }
            }

            _botsInTest.Add(bot);
            server.TestingStart();
        }
Esempio n. 6
0
 public static void RemoveOptimizerServer(OptimizerServer server)
 {
     for (int i = 0; _servers != null && i < _servers.Count; i++)
     {
         if (_servers[i] == null)
         {
             _servers.RemoveAt(i);
             i--;
         }
         if (_servers[i].ServerType == ServerType.Optimizer &&
             ((OptimizerServer)_servers[i]).NumberServer == server.NumberServer)
         {
             _servers.RemoveAt(i);
             break;
         }
     }
 }
Esempio n. 7
0
        private OptimizerServer CreateNewServer(OptimazerFazeReport report)
        {
            // 1. Create a new server for optimization. And one thread respectively
            // 1. создаём новый сервер для оптимизации. И один поток соответственно
            OptimizerServer server = ServerMaster.CreateNextOptimizerServer(_master.Storage, _serverNum,
                                                                            _master.StartDepozit);

            _serverNum++;
            _servers.Add(server);

            server.TestingEndEvent            += server_TestingEndEvent;
            server.TypeTesterData              = _master.Storage.TypeTesterData;
            server.TestintProgressChangeEvent += server_TestintProgressChangeEvent;

            for (int i = 0; _master.TabsSimpleNamesAndTimeFrames != null &&
                 i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                Security secToStart =
                    _master.Storage.Securities.Find(s => s.Name == _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity);

                server.GetDataToSecurity(secToStart, _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame, report.Faze.TimeStart,
                                         report.Faze.TimeEnd);
            }

            for (int i = 0; _master.TabsIndexNamesAndTimeFrames != null &&
                 i < _master.TabsIndexNamesAndTimeFrames.Count; i++)
            {
                List <string> secNames = _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity;

                for (int i2 = 0; secNames != null && i2 < secNames.Count; i2++)
                {
                    string curSec = secNames[i2];

                    Security secToStart =
                        _master.Storage.Securities.Find(s => s.Name == curSec);

                    server.GetDataToSecurity(secToStart, _master.TabsIndexNamesAndTimeFrames[i].TimeFrame, report.Faze.TimeStart,
                                             report.Faze.TimeEnd);
                }
            }

            return(server);
        }
Esempio n. 8
0
        /// <summary>
        /// launch another robot as part of optimization
        /// запустить ещё одного робота, в рамках оптимизации
        /// </summary>
        /// <param name="parametrs">list of all parameters/список всех параметров</param>
        /// <param name="paramOptimized">brute force options/параметры по которым осуществляется перебор</param>
        /// <param name="report">current optimization phase/текущая фаза оптимизации</param>
        /// <param name="botsInFaze">list of bots already running in the current phase/список ботов уже запущенный в текущей фазе</param>
        /// <param name="botName">the name of the created robot/имя создаваемого робота</param>
        private void StartNewBot(List <IIStrategyParameter> parametrs, List <IIStrategyParameter> paramOptimized,
                                 OptimazerFazeReport report, string botName)
        {
            OptimizerServer server = CreateNewServer(report);

            try
            {
                decimal num = Convert.ToDecimal(botName.Substring(0, 1));
            }
            catch
            {
                botName = server.NumberServer + botName;
            }

            BotPanel bot = CreateNewBot(botName, parametrs, paramOptimized, server, StartProgram.IsOsOptimizer);

            // wait for the robot to connect to its data server
            // ждём пока робот подключиться к своему серверу данных

            DateTime timeStartWaiting = DateTime.Now;

            while (bot.IsConnected == false)
            {
                Thread.Sleep(20);

                if (timeStartWaiting.AddSeconds(2000) < DateTime.Now)
                {
                    SendLogMessage(
                        OsLocalization.Optimizer.Message10,
                        LogMessageType.Error);
                    return;
                }
            }

            _botsInTest.Add(bot);
            server.TestingStart();
        }
Esempio n. 9
0
        /// <summary>
        /// launch another robot as part of optimization
        /// запустить ещё одного робота, в рамках оптимизации
        /// </summary>
        /// <param name="parametrs">list of all parameters/список всех параметров</param>
        /// <param name="paramOptimized">brute force options/параметры по которым осуществляется перебор</param>
        /// <param name="faze">current optimization phase/текущая фаза оптимизации</param>
        /// <param name="botsInFaze">list of bots already running in the current phase/список ботов уже запущенный в текущей фазе</param>
        /// <param name="botName">the name of the created robot/имя создаваемого робота</param>
        private async void StartNewBot(List <IIStrategyParameter> parametrs, List <IIStrategyParameter> paramOptimized,
                                       OptimizerFaze faze, List <BotPanel> botsInFaze, string botName)
        {
            if (!MainWindow.GetDispatcher.CheckAccess())
            {
                MainWindow.GetDispatcher.Invoke(
                    new Action
                    <List <IIStrategyParameter>, List <IIStrategyParameter>,
                     OptimizerFaze, List <BotPanel>, string>(StartNewBot),
                    parametrs, paramOptimized, faze, botsInFaze, botName);
                await Task.Delay(1000);

                return;
            }

            // 1. Create a new server for optimization. And one thread respectively
            // 1. создаём новый сервер для оптимизации. И один поток соответственно
            OptimizerServer server = ServerMaster.CreateNextOptimizerServer(_master.Storage, _serverNum,
                                                                            _master.StartDepozit);

            _serverNum++;
            _servers.Add(server);

            server.TestingEndEvent            += server_TestingEndEvent;
            server.TypeTesterData              = _master.Storage.TypeTesterData;
            server.TestintProgressChangeEvent += server_TestintProgressChangeEvent;

            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                Security secToStart =
                    _master.Storage.Securities.Find(s => s.Name == _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity);

                server.GetDataToSecurity(secToStart, _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame, faze.TimeStart,
                                         faze.TimeEnd);
            }

            // 2. create a new robot and upload it with the appropriate settings and parameters
            // 2. создаём нового робота и прогружаем его соответствующими настройками и параметрами

            BotPanel bot = BotFactory.GetStrategyForName(_master.StrategyName, botName, StartProgram.IsOsOptimizer, _master.IsScript);

            for (int i = 0; i < parametrs.Count; i++)
            {
                IIStrategyParameter par = paramOptimized.Find(p => p.Name == parametrs[i].Name);

                if (par == null)
                {
                    par = parametrs[i];
                }

                if (bot.Parameters[i].Type == StrategyParameterType.Bool)
                {
                    ((StrategyParameterBool)bot.Parameters[i]).ValueBool = ((StrategyParameterBool)par).ValueBool;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.String)
                {
                    ((StrategyParameterString)bot.Parameters[i]).ValueString = ((StrategyParameterString)par).ValueString;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.Int)
                {
                    ((StrategyParameterInt)bot.Parameters[i]).ValueInt = ((StrategyParameterInt)par).ValueInt;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.Decimal)
                {
                    ((StrategyParameterDecimal)bot.Parameters[i]).ValueDecimal = ((StrategyParameterDecimal)par).ValueDecimal;
                }
            }

            // custom tabs
            // настраиваем вкладки
            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                bot.TabsSimple[i].Connector.ServerType    = ServerType.Optimizer;
                bot.TabsSimple[i].Connector.PortfolioName = server.Portfolios[0].Number;
                bot.TabsSimple[i].Connector.NamePaper     = _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity;
                bot.TabsSimple[i].Connector.TimeFrame     =
                    _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame;

                if (server.TypeTesterData == TesterDataType.Candle)
                {
                    bot.TabsSimple[i].Connector.CandleMarketDataType = CandleMarketDataType.Tick;
                }
                else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                         server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                {
                    bot.TabsSimple[i].Connector.CandleMarketDataType =
                        CandleMarketDataType.MarketDepth;
                }
            }

            for (int i = 0; i < _master.TabsIndexNamesAndTimeFrames.Count; i++)
            {
                bot.TabsIndex[i].Tabs.Clear();
                for (int i2 = 0; i2 < _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity.Count; i2++)
                {
                    if (i2 >= bot.TabsIndex[i].Tabs.Count)
                    {
                        bot.TabsIndex[i].CreateNewSecurityConnector();
                    }

                    bot.TabsIndex[i].Tabs[i2].ServerType    = ServerType.Optimizer;
                    bot.TabsIndex[i].Tabs[i2].PortfolioName = server.Portfolios[0].Number;
                    bot.TabsIndex[i].Tabs[i2].NamePaper     = _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity[i2];
                    bot.TabsIndex[i].Tabs[i2].TimeFrame     =
                        _master.TabsIndexNamesAndTimeFrames[i].TimeFrame;

                    if (server.TypeTesterData == TesterDataType.Candle)
                    {
                        bot.TabsIndex[i].Tabs[i2].CandleMarketDataType = CandleMarketDataType.Tick;
                    }
                    else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                             server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                    {
                        bot.TabsIndex[i].Tabs[i2].CandleMarketDataType =
                            CandleMarketDataType.MarketDepth;
                    }
                }
                bot.TabsIndex[i].UserFormula = _master.TabsIndexNamesAndTimeFrames[i].Formula;
            }

            // wait for the robot to connect to its data server
            // ждём пока робот подключиться к своему серверу данных

            DateTime timeStartWaiting = DateTime.Now;

            while (bot.IsConnected == false)
            {
                await Task.Delay(1000);

                if (timeStartWaiting.AddSeconds(20) < DateTime.Now)
                {
                    SendLogMessage(
                        OsLocalization.Optimizer.Message10,
                        LogMessageType.Error);
                    return;
                }
            }

            server.TestingStart();

            botsInFaze.Add(bot);
        }
Esempio n. 10
0
        private BotPanel CreateNewBot(string botName,
                                      List <IIStrategyParameter> parametrs,
                                      List <IIStrategyParameter> paramOptimized,
                                      OptimizerServer server, StartProgram regime)
        {
            BotPanel bot = _asyncBotFactory.GetBot(_master.StrategyName, botName);

            for (int i = 0; i < parametrs.Count; i++)
            {
                IIStrategyParameter par = paramOptimized.Find(p => p.Name == parametrs[i].Name);

                if (par == null)
                {
                    par = parametrs[i];
                }

                if (par.Type == StrategyParameterType.Bool)
                {
                    ((StrategyParameterBool)bot.Parameters[i]).ValueBool = ((StrategyParameterBool)par).ValueBool;
                }
                else if (par.Type == StrategyParameterType.String)
                {
                    ((StrategyParameterString)bot.Parameters[i]).ValueString = ((StrategyParameterString)par).ValueString;
                }
                else if (par.Type == StrategyParameterType.Int)
                {
                    ((StrategyParameterInt)bot.Parameters[i]).ValueInt = ((StrategyParameterInt)par).ValueInt;
                }
                else if (par.Type == StrategyParameterType.Decimal)
                {
                    ((StrategyParameterDecimal)bot.Parameters[i]).ValueDecimal = ((StrategyParameterDecimal)par).ValueDecimal;
                }
                else if (par.Type == StrategyParameterType.TimeOfDay)
                {
                    ((StrategyParameterTimeOfDay)bot.Parameters[i]).Value = ((StrategyParameterTimeOfDay)par).Value;
                }
            }

            // custom tabs
            // настраиваем вкладки
            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                bot.TabsSimple[i].Connector.ServerType    = ServerType.Optimizer;
                bot.TabsSimple[i].Connector.PortfolioName = server.Portfolios[0].Number;
                bot.TabsSimple[i].Connector.NamePaper     = _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity;
                bot.TabsSimple[i].Connector.TimeFrame     =
                    _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame;
                bot.TabsSimple[i].Connector.ServerUid = server.NumberServer;
                bot.TabsSimple[i].ComissionType       = _master.CommissionType;
                bot.TabsSimple[i].ComissionValue      = _master.CommissionValue;

                if (server.TypeTesterData == TesterDataType.Candle)
                {
                    bot.TabsSimple[i].Connector.CandleMarketDataType = CandleMarketDataType.Tick;
                }
                else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                         server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                {
                    bot.TabsSimple[i].Connector.CandleMarketDataType =
                        CandleMarketDataType.MarketDepth;
                }
            }

            for (int i = 0; _master.TabsIndexNamesAndTimeFrames != null &&
                 i < _master.TabsIndexNamesAndTimeFrames.Count; i++)
            {
                bot.TabsIndex[i].Tabs.Clear();
                for (int i2 = 0; i2 < _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity.Count; i2++)
                {
                    if (i2 >= bot.TabsIndex[i].Tabs.Count)
                    {
                        bot.TabsIndex[i].CreateNewSecurityConnector();
                    }

                    bot.TabsIndex[i].Tabs[i2].ServerType    = ServerType.Optimizer;
                    bot.TabsIndex[i].Tabs[i2].PortfolioName = server.Portfolios[0].Number;
                    bot.TabsIndex[i].Tabs[i2].NamePaper     = _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity[i2];
                    bot.TabsIndex[i].Tabs[i2].ServerUid     = server.NumberServer;
                    bot.TabsIndex[i].Tabs[i2].TimeFrame     =
                        _master.TabsIndexNamesAndTimeFrames[i].TimeFrame;

                    if (server.TypeTesterData == TesterDataType.Candle)
                    {
                        bot.TabsIndex[i].Tabs[i2].CandleMarketDataType = CandleMarketDataType.Tick;
                    }
                    else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                             server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                    {
                        bot.TabsIndex[i].Tabs[i2].CandleMarketDataType =
                            CandleMarketDataType.MarketDepth;
                    }
                }
                bot.TabsIndex[i].UserFormula = _master.TabsIndexNamesAndTimeFrames[i].Formula;
            }

            return(bot);
        }
Esempio n. 11
0
        /// <summary>
        /// запустить ещё одного робота, в рамках оптимизации
        /// </summary>
        /// <param name="parametrs">список всех параметров</param>
        /// <param name="paramOptimized">параметры по которым осуществляется перебор</param>
        /// <param name="faze">текущая фаза оптимизации</param>
        /// <param name="botsInFaze">список ботов уже запущенный в текущей фазе</param>
        /// <param name="botName">имя создаваемого робота</param>
        private void StartNewBot(List <IIStrategyParameter> parametrs, List <IIStrategyParameter> paramOptimized,
                                 OptimizerFaze faze, List <BotPanel> botsInFaze, string botName)
        {
            if (!MainWindow.GetDispatcher.CheckAccess())
            {
                MainWindow.GetDispatcher.Invoke(
                    new Action
                    <List <IIStrategyParameter>, List <IIStrategyParameter>,
                     OptimizerFaze, List <BotPanel>, string>(StartNewBot),
                    parametrs, paramOptimized, faze, botsInFaze, botName);
                Thread.Sleep(1000);
                return;
            }

// 1. создаём новый сервер для оптимизации. И один поток соответственно
            OptimizerServer server = ServerMaster.CreateNextOptimizerServer(_master.Storage, _serverNum,
                                                                            _master.StartDepozit);

            _serverNum++;
            _servers.Add(server);

            server.TestingEndEvent            += server_TestingEndEvent;
            server.TypeTesterData              = _master.Storage.TypeTesterData;
            server.TestintProgressChangeEvent += server_TestintProgressChangeEvent;

            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                Security secToStart =
                    _master.Storage.Securities.Find(s => s.Name == _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity);

                server.GetDataToSecurity(secToStart, _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame, faze.TimeStart,
                                         faze.TimeEnd);
            }
// 2. создаём нового робота и прогружаем его соответствующими настройками и параметрами

            BotPanel bot = PanelCreator.GetStrategyForName(_master.StrategyName, botName);

            for (int i = 0; i < parametrs.Count; i++)
            {
                IIStrategyParameter par = paramOptimized.Find(p => p.Name == parametrs[i].Name);

                if (par == null)
                {
                    par = parametrs[i];
                }

                if (bot.Parameters[i].Type == StrategyParameterType.Bool)
                {
                    ((StrategyParameterBool)bot.Parameters[i]).ValueBool = ((StrategyParameterBool)par).ValueBool;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.String)
                {
                    ((StrategyParameterString)bot.Parameters[i]).ValueString = ((StrategyParameterString)par).ValueString;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.Int)
                {
                    ((StrategyParameterInt)bot.Parameters[i]).ValueInt = ((StrategyParameterInt)par).ValueInt;
                }
                else if (bot.Parameters[i].Type == StrategyParameterType.Bool)
                {
                    ((StrategyParameterBool)bot.Parameters[i]).ValueBool = ((StrategyParameterBool)par).ValueBool;
                }
            }
// настраиваем вкладки
            for (int i = 0; i < _master.TabsSimpleNamesAndTimeFrames.Count; i++)
            {
                bot.TabsSimple[i].Connector.ServerType    = ServerType.Optimizer;
                bot.TabsSimple[i].Connector.PortfolioName = server.Portfolios[0].Number;
                bot.TabsSimple[i].Connector.NamePaper     = _master.TabsSimpleNamesAndTimeFrames[i].NameSecurity;
                bot.TabsSimple[i].Connector.TimeFrameBuilder.TimeFrame =
                    _master.TabsSimpleNamesAndTimeFrames[i].TimeFrame;

                if (server.TypeTesterData == TesterDataType.Candle)
                {
                    bot.TabsSimple[i].Connector.TimeFrameBuilder.CandleCreateType = CandleSeriesCreateDataType.Tick;
                }
                else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                         server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                {
                    bot.TabsSimple[i].Connector.TimeFrameBuilder.CandleCreateType =
                        CandleSeriesCreateDataType.MarketDepth;
                }
            }

            for (int i = 0; i < _master.TabsIndexNamesAndTimeFrames.Count; i++)
            {
                bot.TabsIndex[i].Tabs.Clear();
                for (int i2 = 0; i2 < _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity.Count; i2++)
                {
                    if (i2 >= bot.TabsIndex[i].Tabs.Count)
                    {
                        bot.TabsIndex[i].CreateNewSecurityConnector();
                    }

                    bot.TabsIndex[i].Tabs[i2].ServerType    = ServerType.Optimizer;
                    bot.TabsIndex[i].Tabs[i2].PortfolioName = server.Portfolios[0].Number;
                    bot.TabsIndex[i].Tabs[i2].NamePaper     = _master.TabsIndexNamesAndTimeFrames[i].NamesSecurity[i2];
                    bot.TabsIndex[i].Tabs[i2].TimeFrameBuilder.TimeFrame =
                        _master.TabsIndexNamesAndTimeFrames[i].TimeFrame;

                    if (server.TypeTesterData == TesterDataType.Candle)
                    {
                        bot.TabsIndex[i].Tabs[i2].TimeFrameBuilder.CandleCreateType = CandleSeriesCreateDataType.Tick;
                    }
                    else if (server.TypeTesterData == TesterDataType.MarketDepthAllCandleState ||
                             server.TypeTesterData == TesterDataType.MarketDepthOnlyReadyCandle)
                    {
                        bot.TabsIndex[i].Tabs[i2].TimeFrameBuilder.CandleCreateType =
                            CandleSeriesCreateDataType.MarketDepth;
                    }
                }
                bot.TabsIndex[i].UserFormula = _master.TabsIndexNamesAndTimeFrames[i].Formula;
            }

// ждём пока робот подключиться к своему серверу данных

            DateTime timeStartWaiting = DateTime.Now;

            while (bot.IsConnected == false)
            {
                Thread.Sleep(1000);

                if (timeStartWaiting.AddSeconds(20) < DateTime.Now)
                {
                    SendLogMessage(
                        "Слишком долгое ожидание подклчючения робота к серверу данных. Что-то пошло не так!",
                        LogMessageType.Error);
                    return;
                }
            }

            server.TestingStart();

            botsInFaze.Add(bot);
        }