/// <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); }
// единичный тест 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); }
/// <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); }
/// <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); } }
/// <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(); }
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; } } }
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); }
/// <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(); }
/// <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); }
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); }
/// <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); }