Пример #1
0
        private static BotPanel Serialize(string path, string nameClass, string name, StartProgram startProgram)
        {
            try
            {
                BotPanel result = null;

                string fileStr = ReadFile(path);

                //Объявляем провайдер кода С#
                CSharpCodeProvider prov = new CSharpCodeProvider();

                var assemblies = AppDomain.CurrentDomain.GetAssemblies();

                var res = Array.ConvertAll <Assembly, string>(assemblies, (x) =>
                {
                    if (!x.IsDynamic)
                    {
                        return(x.Location);
                    }

                    return(null);
                });

                CompilerParameters cp = new CompilerParameters(res);

                // Помечаем сборку, как временную
                cp.GenerateInMemory        = true;
                cp.IncludeDebugInformation = true;


                // Обрабатываем CSC компилятором
                CompilerResults results = prov.CompileAssemblyFromSource(cp, fileStr);

                if (results.Errors != null && results.Errors.Count != 0)
                {
                    string errorString = "Error! Robot script runTime compilation problem! \n";
                    errorString += "Path to indicator: " + path + " \n";

                    int errorNum = 1;

                    foreach (var error in results.Errors)
                    {
                        errorString += "Error Number: " + errorNum + " \n";
                        errorString += error.ToString() + "\n";
                        errorNum++;
                    }

                    throw new Exception(errorString);
                }
                //string name, StartProgram startProgram)

                List <object> param = new List <object>();
                param.Add(name);
                param.Add(startProgram);

                result = (BotPanel)results.CompiledAssembly.CreateInstance(
                    results.CompiledAssembly.DefinedTypes.ElementAt(0).FullName, false, BindingFlags.Default, null,
                    param.ToArray(), CultureInfo.CurrentCulture, null);

                if (result == null)
                {
                    string errorString = "Error! Robot script runTime compilation problem! \n";
                    errorString += "Path to indicator: " + path + " \n";

                    int errorNum = 1;

                    foreach (var error in results.Errors)
                    {
                        errorString += "Error Number: " + errorNum + " \n";
                        errorString += error.ToString() + "\n";
                        errorNum++;
                    }

                    throw new Exception(errorString);
                }

                return(result);
            }
            catch (Exception e)
            {
                string errorString = e.ToString();
                throw new Exception(errorString);
            }
        }
Пример #2
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.Decimal)
                {
                    ((StrategyParameterDecimal)bot.Parameters[i]).ValueDecimal = ((StrategyParameterDecimal)par).ValueDecimal;
                }
            }
// настраиваем вкладки
            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);
        }
Пример #3
0
        /// <summary>
        /// create robot
        /// создать робота
        /// </summary>
        public static BotPanel GetStrategyForName(string nameClass, string name, StartProgram startProgram, bool isScript)
        {
            BotPanel bot = null;

            // примеры и бесплатные боты

            if (isScript)
            {
                bot = CreateScriptStrategyByName(nameClass, name, startProgram);
                return(bot);
            }


            if (nameClass == "TimeOfDayBot")
            {
                bot = new TimeOfDayBot(name, startProgram);
            }
            if (nameClass == "Fisher")
            {
                bot = new Fisher(name, startProgram);
            }
            if (nameClass == "FundBalanceDivergenceBot")
            {
                bot = new FundBalanceDivergenceBot(name, startProgram);
            }
            if (nameClass == "BbPowerTrade")
            {
                bot = new BbPowerTrade(name, startProgram);
            }
            if (nameClass == "BollingerRevers")
            {
                bot = new BollingerRevers(name, startProgram);
            }
            if (nameClass == "BollingerTrailing")
            {
                bot = new BollingerTrailing(name, startProgram);
            }
            if (nameClass == "CciTrade")
            {
                bot = new CciTrade(name, startProgram);
            }
            if (nameClass == "MacdRevers")
            {
                bot = new MacdRevers(name, startProgram);
            }
            if (nameClass == "MacdTrail")
            {
                bot = new MacdTrail(name, startProgram);
            }
            if (nameClass == "OneLegArbitrage")
            {
                bot = new OneLegArbitrage(name, startProgram);
            }
            if (nameClass == "PairRsiTrade")
            {
                bot = new PairRsiTrade(name, startProgram);
            }
            if (nameClass == "PriceChannelBreak")
            {
                bot = new PriceChannelBreak(name, startProgram);
            }
            if (nameClass == "PriceChannelVolatility")
            {
                bot = new PriceChannelVolatility(name, startProgram);
            }
            if (nameClass == "RsiTrade")
            {
                bot = new RsiTrade(name, startProgram);
            }
            if (nameClass == "RviTrade")
            {
                bot = new RviTrade(name, startProgram);
            }

            if (nameClass == "MomentumMACD")
            {
                bot = new MomentumMacd(name, startProgram);
            }

            if (nameClass == "Engine")
            {
                bot = new CandleEngine(name, startProgram);
            }
            if (nameClass == "ClusterEngine")
            {
                bot = new ClusterEngine(name, startProgram);
            }

            if (nameClass == "PairTraderSimple")
            {
                bot = new PairTraderSimple(name, startProgram);
            }
            if (nameClass == "EnvelopTrend")
            {
                bot = new EnvelopTrend(name, startProgram);
            }
            if (nameClass == "ClusterCountertrend")
            {
                bot = new ClusterCountertrend(name, startProgram);
            }
            if (nameClass == "PatternTrader")
            {
                bot = new PatternTrader(name, startProgram);
            }
            if (nameClass == "HighFrequencyTrader")
            {
                bot = new HighFrequencyTrader(name, startProgram);
            }
            if (nameClass == "PivotPointsRobot")
            {
                bot = new PivotPointsRobot(name, startProgram);
            }
            if (nameClass == "Williams Band")
            {
                bot = new StrategyBillWilliams(name, startProgram);
            }
            if (nameClass == "MarketMakerBot")
            {
                bot = new MarketMakerBot(name, startProgram);
            }
            if (nameClass == "Bollinger")
            {
                bot = new StrategyBollinger(name, startProgram);
            }
            if (nameClass == "ParabolicSarTrade")
            {
                bot = new ParabolicSarTrade(name, startProgram);
            }
            if (nameClass == "PriceChannelTrade")
            {
                bot = new PriceChannelTrade(name, startProgram);
            }
            if (nameClass == "WilliamsRangeTrade")
            {
                bot = new WilliamsRangeTrade(name, startProgram);
            }
            if (nameClass == "SmaStochastic")
            {
                bot = new SmaStochastic(name, startProgram);
            }
            if (nameClass == "PinBarTrade")
            {
                bot = new PinBarTrade(name, startProgram);
            }
            if (nameClass == "TwoLegArbitrage")
            {
                bot = new TwoLegArbitrage(name, startProgram);
            }
            if (nameClass == "ThreeSoldier")
            {
                bot = new ThreeSoldier(name, startProgram);
            }
            if (nameClass == "RsiContrtrend")
            {
                bot = new RsiContrtrend(name, startProgram);
            }
            if (nameClass == "PairTraderSpreadSma")
            {
                bot = new PairTraderSpreadSma(name, startProgram);
            }


            return(bot);
        }
Пример #4
0
        /// <summary>
        /// create bot
        /// создать бота
        /// </summary>
        public void CreateNewBot()
        {
            try
            {
                BotCreateUi ui = new BotCreateUi(BotFactory.GetNamesStrategy(),
                                                 BotFactory.GetScriptsNamesStrategy(), StartProgram.IsOsTrader);

                ui.ShowDialog();

                if (ui.IsAccepted == false)
                {
                    return;
                }

                if (ui.NameStrategy == "Martingale")
                {
                    if (ui.NameBot.Split('h').Length != 1)
                    {
                        MessageBox.Show(OsLocalization.Trader.Label6);
                        return;
                    }
                    if (ui.NameBot.Split('l').Length != 1)
                    {
                        MessageBox.Show(OsLocalization.Trader.Label7);
                        return;
                    }
                }

                if (File.Exists(@"Engine\" + @"SettingsRealKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsRealKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show(OsLocalization.Trader.Label8);
                                return;
                            }
                        }
                    }
                }

                if (File.Exists(@"Engine\" + @"SettingsTesterKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsTesterKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show(OsLocalization.Trader.Label8);
                                return;
                            }
                        }
                    }
                }

                BotPanel newRobot = BotFactory.GetStrategyForName(ui.NameStrategy, ui.NameBot, _startProgram, ui.IsScript);

                if (_panelsArray == null)
                {
                    _panelsArray = new List <BotPanel>();
                }
                _panelsArray.Add(newRobot);

                SendNewLogMessage(OsLocalization.Trader.Label9 + newRobot.NameStrategyUniq, LogMessageType.System);

                ReloadActivBot(newRobot);
                Save();

                ReloadRiskJournals();
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Пример #5
0
 /// <summary>
 /// start listening to the bot panel
 /// начать прослушку панели робота
 /// </summary>
 public void Listen(BotPanel panel)
 {
     panel.LogMessageEvent += ProcessMessage;
 }
Пример #6
0
 /// <summary>
 /// начать прослушку панели робота
 /// </summary>
 public void Listen(BotPanel panel)
 {
     panel.LogMessageEvent += LogMessageEvent;
 }
Пример #7
0
        /// <summary>
        /// load robots with saved names
        /// загрузить роботов по сохранённым именам
        /// </summary>
        private void Load()
        {
            if (!File.Exists(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            { // if there is no file we need. Just go out
              // если нет нужного нам файла. Просто выходим
                return;
            }


            int botCount = 0;

            using (StreamReader reader = new StreamReader(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            {
                while (!reader.EndOfStream)
                {
                    if (!string.IsNullOrWhiteSpace(reader.ReadLine()))
                    {
                        botCount++;
                    }
                }
            }

            if (botCount == 0)
            {
                return;
            }

            _panelsArray = new List <BotPanel>();

            int botIterator = 0;

            using (StreamReader reader = new StreamReader(@"Engine\Settings" + _typeWorkKeeper + "Keeper.txt"))
            {
                while (!reader.EndOfStream)
                {
                    string[] names = reader.ReadLine().Split('@');

                    BotPanel bot = null;

                    if (names.Length > 2)
                    {
                        try
                        {
                            bot = BotFactory.GetStrategyForName(names[1], names[0], _startProgram, Convert.ToBoolean(names[2]));
                        }
                        catch (Exception e)
                        {
                            SendNewLogMessage(e.ToString(), LogMessageType.Error);
                        }
                    }
                    else
                    {
                        bot = BotFactory.GetStrategyForName(names[1], names[0], _startProgram, false);
                    }

                    if (bot != null)
                    {
                        _panelsArray.Add(bot);
                        _tabBotNames.Items.Add(" " + _panelsArray[botIterator].NameStrategyUniq + " ");
                        SendNewLogMessage(OsLocalization.Trader.Label2 + _panelsArray[botIterator].NameStrategyUniq,
                                          LogMessageType.System);
                        botIterator++;
                    }
                }
            }
            if (_panelsArray.Count != 0)
            {
                ReloadActivBot(_panelsArray[0]);
            }
        }
Пример #8
0
        private BotPanel CreateNewBot(string botName,
                                      List <IIStrategyParameter> parametrs,
                                      List <IIStrategyParameter> paramOptimized,
                                      OptimizerServer server, StartProgram regime)
        {
            BotPanel bot = BotFactory.GetStrategyForName(_master.StrategyName, botName, regime, _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 (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);
        }
Пример #9
0
        /// <summary>
        /// create robot
        /// создать робота
        /// </summary>
        public static BotPanel GetStrategyForName(string nameClass, string name, StartProgram startProgram)
        {
            BotPanel bot = null;

            // примеры и бесплатные боты

            if (nameClass == "ClusterCountertrend")
            {
                bot = new ClusterCountertrend(name, startProgram);
            }
            if (nameClass == "PatternTrader")
            {
                bot = new PatternTrader(name, startProgram);
            }
            if (nameClass == "HighFrequencyTrader")
            {
                bot = new HighFrequencyTrader(name, startProgram);
            }
            if (nameClass == "PivotPointsRobot")
            {
                bot = new PivotPointsRobot(name, startProgram);
            }
            if (nameClass == "Williams Band")
            {
                bot = new StrategyBillWilliams(name, startProgram);
            }
            if (nameClass == "MarketMakerBot")
            {
                bot = new MarketMakerBot(name, startProgram);
            }
            if (nameClass == "Bollinger")
            {
                bot = new StrategyBollinger(name, startProgram);
            }
            if (nameClass == "ParabolicSarTrade")
            {
                bot = new ParabolicSarTrade(name, startProgram);
            }
            if (nameClass == "PriceChannelTrade")
            {
                bot = new PriceChannelTrade(name, startProgram);
            }
            if (nameClass == "WilliamsRangeTrade")
            {
                bot = new WilliamsRangeTrade(name, startProgram);
            }
            if (nameClass == "SmaStochastic")
            {
                bot = new SmaStochastic(name, startProgram);
            }
            if (nameClass == "PinBarTrade")
            {
                bot = new PinBarTrade(name, startProgram);
            }
            if (nameClass == "TwoLegArbitrage")
            {
                bot = new TwoLegArbitrage(name, startProgram);
            }
            if (nameClass == "ThreeSoldier")
            {
                bot = new ThreeSoldier(name, startProgram);
            }
            if (nameClass == "RsiContrtrend")
            {
                bot = new RsiContrtrend(name, startProgram);
            }
            if (nameClass == "PairTraderSpreadSma")
            {
                bot = new PairTraderSpreadSma(name, startProgram);
            }


            return(bot);
        }
Пример #10
0
        /// <summary>
        /// создать бота
        /// </summary>
        public void CreateNewBot()
        {
            try
            {
                // 1 вызываем диалог для выбора имени робота
                PanelCreateUi ui = new PanelCreateUi();
                ui.ShowDialog();

                if (ui.IsAccepted == false)
                {
                    return;
                }

                if (ui.NameStrategy == "Martingale")
                {
                    if (ui.NameBot.Split('h').Length != 1)
                    {
                        MessageBox.Show("Невозможно завершить создание робота. Символ h зарезервирован для ситсемы");
                        return;
                    }
                    if (ui.NameBot.Split('l').Length != 1)
                    {
                        MessageBox.Show("Невозможно завершить создание робота. Символ l зарезервирован для ситсемы");
                        return;
                    }
                }

                // 2 проверяем, что имя робота не нарушает никаких правил

                if (File.Exists(@"Engine\" + @"SettingsRealKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsRealKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show("Не возможно завершить создание робота. Робот с таким именем уже существует.");
                                return;
                            }
                        }
                    }
                }

                if (File.Exists(@"Engine\" + @"SettingsTesterKeeper.txt"))
                {
                    using (StreamReader reader = new StreamReader(@"Engine\" + @"SettingsTesterKeeper.txt"))
                    {
                        while (!reader.EndOfStream)
                        {
                            string[] str = reader.ReadLine().Split('@');

                            if (str[0] == ui.NameBot)
                            {
                                MessageBox.Show("Не возможно завершить создание робота. Робот с таким именем уже существует.");
                                return;
                            }
                        }
                    }
                }

                // 3 создаём робота и сохраняем

                BotPanel newRobot = PanelCreator.GetStrategyForName(ui.NameStrategy, ui.NameBot);

                if (_panelsArray == null)
                {
                    _panelsArray = new List <BotPanel>();
                }
                _panelsArray.Add(newRobot);

                SendNewLogMessage("Создан новый бот " + newRobot.NameStrategyUniq, LogMessageType.System);

                ReloadActivBot(newRobot);
                Save();

                // перегружаем риск менеджер
                ReloadRiskJournals();
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Пример #11
0
        /// <summary>
        /// Вычитать из бота на форму
        /// </summary>
        private void SetComboBoxItemByTab(int index)
        {
            setByActiveTab  = true;
            setByActiveTab2 = true;
            setByActiveTab3 = true;
            if (_strategyKeeper.PanelsArray.Count > 0 & index != -1)
            {
                BotPanel master = _strategyKeeper.PanelsArray[index];

                if (master.TabsHandy.Count > 0)
                {
                    BotTabHandy tab = master.TabsHandy[0];

                    DataContext = this;

                    ////Combobox Clasters
                    cbItems.Clear();

                    //Выберем группы и их признак "печать по умолчанию"
                    var grpDict = tab._indicatorOnTheFlyClaster.commonList.GroupBy(p => p.group,
                                                                                   p => p.itsForPlot ? 1 : 0,
                                                                                   (key, g) => new { Groups = key, Bools = g.Max() });
                    foreach (var kvp in grpDict)
                    {
                        var cbItem = new ComboBoxItem {
                            Content = kvp.Groups
                        };

                        if (kvp.Bools == 1)
                        {
                            cbItem.IsSelected = true;
                            SelectedcbItem    = cbItem;
                        }

                        cbItems.Add(cbItem);
                    }

                    ////Combobox Candle
                    cbItems2.Clear();

                    //Выберем группы и их признак "печать по умолчанию"
                    var grpDict2 = tab._indicatorOnTheFlyPrime.commonList.GroupBy(p => p.group,
                                                                                  p => p.itsForPlot ? 1 : 0,
                                                                                  (key, g) => new { Groups = key, Bools = g.Max() });
                    foreach (var kvp in grpDict2)
                    {
                        var cbItem = new ComboBoxItem {
                            Content = kvp.Groups
                        };

                        if (kvp.Bools == 1)
                        {
                            cbItem.IsSelected = true;
                            SelectedcbItem2   = cbItem;
                        }

                        cbItems2.Add(cbItem);
                    }

                    ////Combobox Secondary
                    cbItems3.Clear();

                    //Выберем группы и их признак "печать по умолчанию"
                    var grpDict3 = tab._indicatorOnTheFlySecondary.commonList.GroupBy(p => p.group,
                                                                                      p => p.itsForPlot ? 1 : 0,
                                                                                      (key, g) => new { Groups = key, Bools = g.Max() });
                    foreach (var kvp in grpDict3)
                    {
                        var cbItem = new ComboBoxItem {
                            Content = kvp.Groups
                        };

                        if (kvp.Bools == 1)
                        {
                            cbItem.IsSelected = true;
                            SelectedcbItem3   = cbItem;
                        }

                        cbItems3.Add(cbItem);
                    }
                }
            }

            setByActiveTab  = false;
            setByActiveTab2 = false;
            setByActiveTab3 = false;
        }
Пример #12
0
        public void LoadState(BotPanel bot)
        {
            BotName = bot.NameStrategyUniq;
            // фасуем отчёты по вкладкам

            List <Position> allPositionsForAllTabs = new List <Position>();

            for (int i = 0; i < bot.TabsSimple.Count; i++)
            {
                OptimizerReportTab tab       = new OptimizerReportTab();
                List <Position>    positions =
                    bot.TabsSimple[i].GetJournal().AllPosition.FindAll(
                        pos => pos.State != PositionStateType.OpeningFail);

                if (positions.Count == 0)
                {
                    continue;
                }

                allPositionsForAllTabs.AddRange(positions);

                Position[] posesArray = positions.ToArray();

                tab.SecurityName   = bot.TabsSimple[i].Securiti.Name;
                tab.PositionsCount = positions.Count;
                tab.TotalProfit    = PositionStaticticGenerator.GetAllProfitInPunkt(posesArray);
                tab.MaxDrowDawn    = PositionStaticticGenerator.GetMaxDownPersent(posesArray);

                tab.AverageProfit = tab.TotalProfit / (posesArray.Length + 1);

                tab.AverageProfitPercent = PositionStaticticGenerator.GetMidleProfitInPersent(posesArray);

                tab.ProfitFactor = PositionStaticticGenerator.GetProfitFactor(posesArray);
                tab.Recovery     = PositionStaticticGenerator.GetRecovery(posesArray);
                tab.PayOffRatio  = PositionStaticticGenerator.GetPayOffRatio(posesArray);
                tab.TabType      = bot.TabsSimple[i].GetType().Name;

                TabsReports.Add(tab);
            }

            if (TabsReports.Count == 0)
            {
                return;
            }

            // формируем общие данные по отчёту

            if (TabsReports.Count == 1)
            {
                PositionsCount       = TabsReports[0].PositionsCount;
                TotalProfit          = TabsReports[0].TotalProfit;
                MaxDrowDawn          = TabsReports[0].MaxDrowDawn;
                AverageProfit        = TabsReports[0].AverageProfit;
                AverageProfitPercent = TabsReports[0].AverageProfitPercent;

                ProfitFactor = TabsReports[0].ProfitFactor;
                Recovery     = TabsReports[0].Recovery;
                PayOffRatio  = TabsReports[0].PayOffRatio;
            }
            else
            {
                allPositionsForAllTabs = PositionStaticticGenerator.SortByTime(allPositionsForAllTabs);

                Position[] posesArray = allPositionsForAllTabs.ToArray();

                PositionsCount       = allPositionsForAllTabs.Count;
                TotalProfit          = PositionStaticticGenerator.GetAllProfitInPunkt(posesArray);
                MaxDrowDawn          = PositionStaticticGenerator.GetMaxDownPersent(posesArray);
                AverageProfit        = PositionStaticticGenerator.GetMidleProfitInPunkt(posesArray);
                AverageProfitPercent = PositionStaticticGenerator.GetMidleProfitInPersent(posesArray);
                ProfitFactor         = PositionStaticticGenerator.GetProfitFactor(posesArray);
                Recovery             = PositionStaticticGenerator.GetRecovery(posesArray);
                PayOffRatio          = PositionStaticticGenerator.GetPayOffRatio(posesArray);
            }
        }