/// <summary> /// load parameter settings from file / /// загрузить настройки параметра из файла /// </summary> private void GetValueParameterSaveByUser(IIStrategyParameter parameter) { if (!File.Exists(@"Engine\" + NameStrategyUniq + @"Parametrs.txt")) { return; } try { using (StreamReader reader = new StreamReader(@"Engine\" + NameStrategyUniq + @"Parametrs.txt")) { while (!reader.EndOfStream) { string[] save = reader.ReadLine().Split('#'); if (save[0] == parameter.Name) { parameter.LoadParamFromString(save); } } reader.Close(); } } catch (Exception) { // ignore } }
private DataGridViewRow GetRow(IIStrategyParameter parameter) { DataGridViewRow nRow = new DataGridViewRow(); nRow.Cells.Add(new DataGridViewTextBoxCell()); nRow.Cells[0].Value = parameter.Name; nRow.Cells.Add(new DataGridViewTextBoxCell()); if (parameter.Type == StrategyParameterType.Bool) { nRow.Cells[1].Value = ((StrategyParameterBool)parameter).ValueBool; } if (parameter.Type == StrategyParameterType.Decimal) { nRow.Cells[1].Value = ((StrategyParameterDecimal)parameter).ValueDecimal; } if (parameter.Type == StrategyParameterType.Int) { nRow.Cells[1].Value = ((StrategyParameterInt)parameter).ValueInt; } if (parameter.Type == StrategyParameterType.String) { nRow.Cells[1].Value = ((StrategyParameterString)parameter).ValueString; } if (parameter.Type == StrategyParameterType.TimeOfDay) { nRow.Cells[1].Value = ((StrategyParameterTimeOfDay)parameter).Value.ToString(); } return(nRow); }
private void ButtonSaveInFile_Click(object sender, RoutedEventArgs e) { try { SaveFileDialog myDialog = new SaveFileDialog(); string saveFileName = _master.StrategyName; if (_master.TabsSimpleNamesAndTimeFrames != null && _master.TabsSimpleNamesAndTimeFrames.Count != 0) { saveFileName += "_" + _master.TabsSimpleNamesAndTimeFrames[0].NameSecurity; saveFileName += "_" + _master.TabsSimpleNamesAndTimeFrames[0].TimeFrame; } IIStrategyParameter regime = _master._optimizerExecutor._parameters.Find(p => p.Name == "Regime"); if (regime != null) { saveFileName += "_" + ((StrategyParameterString)regime).ValueString; } saveFileName = saveFileName.Replace(".txt", ""); myDialog.FileName = saveFileName; myDialog.Filter = "*.txt|"; myDialog.ShowDialog(); if (string.IsNullOrEmpty(myDialog.FileName)) { System.Windows.Forms.MessageBox.Show(OsLocalization.Journal.Message1); return; } string fileName = myDialog.FileName; if (fileName.Split('.').Length == 1) { fileName = fileName + ".txt"; } string saveStr = ""; for (int i = 0; i < _reports.Count; i++) { saveStr += _reports[i].GetSaveString() + "\r\n"; } StreamWriter writer = new StreamWriter(fileName); writer.Write(saveStr); writer.Close(); } catch (Exception error) { MessageBox.Show(error.ToString()); } }
/// <summary> /// reset parameter to initial values /// сбросить параметр на начальные значения /// </summary> /// <param name="param">the parameter to be reset/параметр который нужно привести в исходное состояние</param> private void ReloadParam(IIStrategyParameter param) { if (param.Type == StrategyParameterType.Int) { ((StrategyParameterInt)param).ValueInt = ((StrategyParameterInt)param).ValueIntStart; } if (param.Type == StrategyParameterType.Decimal) { ((StrategyParameterDecimal)param).ValueDecimal = ((StrategyParameterDecimal)param).ValueDecimalStart; } }
public List <IIStrategyParameter> GetParameters() { List <IIStrategyParameter> par = new List <IIStrategyParameter>(); for (int i = 0; i < StrategyParameters.Count; i++) { StrategyParameterType type; Enum.TryParse(StrategyParameters[i].Split('$')[0], out type); string name = StrategyParameters[i].Split('$')[2]; IIStrategyParameter param = null; if (type == StrategyParameterType.Bool) { param = new StrategyParameterBool(name, false); param.LoadParamFromString(StrategyParameters[i].Split('$')[1].Split('#')); } else if (type == StrategyParameterType.Decimal) { param = new StrategyParameterDecimal(name, 0, 0, 0, 0); param.LoadParamFromString(StrategyParameters[i].Split('$')[1].Split('#')); } else if (type == StrategyParameterType.Int) { param = new StrategyParameterInt(name, 0, 0, 0, 0); param.LoadParamFromString(StrategyParameters[i].Split('$')[1].Split('#')); } else if (type == StrategyParameterType.String) { param = new StrategyParameterString(name, "", null); param.LoadParamFromString(StrategyParameters[i].Split('$')[1].Split('#')); } else if (type == StrategyParameterType.TimeOfDay) { param = new StrategyParameterTimeOfDay(name, 0, 0, 0, 0); param.LoadParamFromString(StrategyParameters[i].Split('$')[1].Split('#')); } else if (type == StrategyParameterType.Button) { param = new StrategyParameterButton(name); param.LoadParamFromString(StrategyParameters[i].Split('$')[1].Split('#')); } else if (type == StrategyParameterType.Label) { param = new StrategyParameterLabel(name, "", "", 0, 0, System.Drawing.Color.White); param.LoadParamFromString(StrategyParameters[i].Split('$')[1].Split('#')); } par.Add(param); } return(par); }
/// <summary> /// load parameter settings / /// загрузить настройки параметра /// </summary> /// <param name="newParameter">setting parameter you want to load / параметр настройки которого нужно загрузить</param> private IIStrategyParameter LoadParameterValues(IIStrategyParameter newParameter) { if (StartProgram != StartProgram.IsOsOptimizer) { GetValueParameterSaveByUser(newParameter); } newParameter.ValueChange += Parameter_ValueChange; _parameters.Add(newParameter); return(newParameter); }
/// <summary> /// загрузить настройки параметра /// </summary> /// <param name="newParameter">параметр настройки которого нужно загрузить</param> /// <returns></returns> private IIStrategyParameter LoadParameterValues(IIStrategyParameter newParameter) { if (!ServerMaster.IsOsOptimizer) {// запущен тестер или робот, в котором можно менять параметры вручную GetValueParameterSaveByUser(newParameter); } newParameter.ValueChange += Parameter_ValueChange; _parameters.Add(newParameter); return(newParameter); }
/// <summary> /// copy parameter list /// копировать список параметров /// </summary> private List <IIStrategyParameter> CopyParameters(List <IIStrategyParameter> paramsToCopy) { List <IIStrategyParameter> newParameters = new List <IIStrategyParameter>(); for (int i = 0; i < paramsToCopy.Count; i++) { IIStrategyParameter newParam = null; if (paramsToCopy[i].Type == StrategyParameterType.Bool) { newParam = new StrategyParameterBool(paramsToCopy[i].Name, ((StrategyParameterBool)paramsToCopy[i]).ValueBool); } else if (paramsToCopy[i].Type == StrategyParameterType.String) { newParam = new StrategyParameterString(paramsToCopy[i].Name, ((StrategyParameterString)paramsToCopy[i]).ValueString, ((StrategyParameterString)paramsToCopy[i]).ValuesString); } else if (paramsToCopy[i].Type == StrategyParameterType.Int) { newParam = new StrategyParameterInt(paramsToCopy[i].Name, ((StrategyParameterInt)paramsToCopy[i]).ValueIntDefolt, ((StrategyParameterInt)paramsToCopy[i]).ValueIntStart, ((StrategyParameterInt)paramsToCopy[i]).ValueIntStop, ((StrategyParameterInt)paramsToCopy[i]).ValueIntStep); ((StrategyParameterInt)newParam).ValueInt = ((StrategyParameterInt)paramsToCopy[i]).ValueIntStart; } else if (paramsToCopy[i].Type == StrategyParameterType.Decimal) { newParam = new StrategyParameterDecimal(paramsToCopy[i].Name, ((StrategyParameterDecimal)paramsToCopy[i]).ValueDecimalDefolt, ((StrategyParameterDecimal)paramsToCopy[i]).ValueDecimalStart, ((StrategyParameterDecimal)paramsToCopy[i]).ValueDecimalStop, ((StrategyParameterDecimal)paramsToCopy[i]).ValueDecimalStep); ((StrategyParameterDecimal)newParam).ValueDecimal = ((StrategyParameterDecimal)paramsToCopy[i]).ValueDecimalStart; } newParameters.Add(newParam); } return(newParameters); }
/// <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); }