public AlligatorTrend(string name, StartProgram startProgram) : base(name, startProgram)
        {
            _startProgram = startProgram;

            // создаем вкладку робота
            TabCreate(BotTabType.Simple);
            _tab = TabsSimple[0];

            // создаем настроечные параметры робота
            Regime = CreateParameter("Режим работы бота", "Off", new[] { "On", "Off", "OnlyClosePosition", "OnlyShort", "OnlyLong" });
            AlligatorFastLenght   = CreateParameter("Длина быстрого алигатора", 100, 50, 200, 10);
            AlligatorMiddleLenght = CreateParameter("Длина среднего алигатора", 100, 50, 200, 10);
            AlligatorSlowLenght   = CreateParameter("Длина медленного алигатора", 100, 50, 200, 10);
            Volume           = CreateParameter("Объем входа в позицию", 1.0m, 1.0m, 100.0m, 1.0m);
            MaxPositionCount = CreateParameter("Максимальное количество позиций", 2, 1, 10, 1);
            Slippage         = CreateParameter("Проскальзывание (в шагах цены)", 350, 1, 500, 50);

            // создаем индикаторы на вкладке робота и задаем для них параметры


            _alligator = IndicatorsFactory.CreateIndicatorByName("Alligator", name + "Alligator", false);
            _alligator = (Aindicator)_tab.CreateCandleIndicator(_alligator, "Prime");
            _alligator.ParametersDigit[0].Value = AlligatorSlowLenght.ValueInt;
            _alligator.ParametersDigit[1].Value = AlligatorFastLenght.ValueInt;
            _alligator.ParametersDigit[2].Value = AlligatorMiddleLenght.ValueInt;
            _alligator.Save();

            // подписываемся на события
            _tab.CandleFinishedEvent += _tab_CandleFinishedEvent;
            ParametrsChangeByUser    += AlligatorTrend_ParametrsChangeByUser;
        }
Exemple #2
0
        private StrategyParameterInt size_comma_lot;                                      // допустимое количество знаков лота после запятой

        public Frank_2(string name, StartProgram startProgram) : base(name, startProgram) // конструктор
        {
            TabCreate(BotTabType.Simple);                                                 // создание простой вкладки
            _tab       = TabsSimple[0];                                                   // записываем первую вкладку в поле
            kvot_name  = "USDT";                                                          // тут надо указать - инициализировать название квотируемой валюты (деньги)
            tovar_name = "ETH";                                                           // тут надо указать - инициализировать название товара

            vkl_Robota            = CreateParameter("РОБОТ Включен?", false);
            slippage              = CreateParameter("Велич. проскаль.у ордеров", 1m, 1m, 200m, 5m);
            profit                = CreateParameter("ТЭЙКПРОФИТ от рынка На ", 20, 5, 50, 5);
            greed                 = CreateParameter("Сколько минимум прибыли ожидать в сделке на каждые 100$ ", 0.55m, 0.25m, 5.5m, 0.05m);  // жадность
            greed_max             = CreateParameter("Сколько Максимум прибыли ожидать в сделке на каждые 100$ ", 1.25m, 0.25m, 5.5m, 0.05m); // жадность
            velich_usrednen       = CreateParameter("Усред.уваелич в раз ", 0.01m, 0.01m, 0.5m, 0.01m);
            do_piram              = CreateParameter(" РАСТ. до Пирамиды", 20m, 5m, 200m, 5m);
            turbo_shift           = CreateParameter(" Turbo добавлять", 50m, 5m, 200m, 5m);
            pir_of                = CreateParameter(" ОТКлючить  Пирамиду при % товара", 10m, 5m, 100m, 5m);
            vkl_piramid           = CreateParameter("Пирамида включена?", false);
            prof_on               = CreateParameter("Забирать профит с % ", 10m, 5m, 100m, 5m);
            ckok_profit_stop      = CreateParameter("Сколько ПРИБЫЛИ закрывать стоп ордером? ", 0.5m, 0.01m, 10m, 0.01m);
            vkl_stopa             = CreateParameter("Стоп Включен?", true);
            deltaUsredn           = CreateParameter("УСРЕДнять через", 20m, 5m, 50m, 5m);
            start_per_depo        = CreateParameter("СТАРТОВАТЬ со ? % депо)", 5, 5, 20, 5);
            min_sum               = CreateParameter("МИН сумма орд.на бирже($)", 10.1m, 10.1m, 10.1m, 10.1m);
            komis_birgi           = CreateParameter("КОМ биржи в %", 0.2m, 0, 0.1m, 0.1m);
            uchet_blok_sred_vkl   = CreateParameter("Учитывать блокир. средства?", false);
            n_min                 = CreateParameter("зависание снимать через N минут ", 1, 1, 20, 1);
            volum_alarm           = CreateParameter("АВАРИЙНЫЙ ОБЪЕМ ПРОДАЖ", 555, 150, 1000, 50);
            kpit_sum              = CreateParameter("Закр. Позицию с УБЫТОКОМ от ", -1m, 10.1m, 10.1m, 10.1m);
            vkl_met_fix_loss_time = CreateParameter("Закрываться в убыток по времени? ", true);
            vkl_alarm_volum       = CreateParameter("Убыток по ОБЪЕМАМ Закрывать ? ", false);
            Itogo                 = CreateParameter("Итого Заработано ", 0m, 0m, 0m, 0m);
            n_min_lesion          = CreateParameter("Закрывать убыток через N минут ", 120, 30, 360, 20);
            sprint                = CreateParameter("Большие объемы это когда больше = ", 101, 50, 200, 50);
            alarn_persent         = CreateParameter("% купленного можно сливать = ", 5, 50, 100, 1);
            size_comma_lot        = CreateParameter("Допустимое знак после запятой", 6, 1, 6, 1);

            block_in = true;  // инициализируем значение блокировки

            _ma_short        = new MovingAverage(name + "Ma5", false);
            _ma_short        = (MovingAverage)_tab.CreateCandleIndicator(_ma_short, "Prime");
            _ma_short.Lenght = 5; // присвоение значения
            _ma_short.Save();

            _ma_long        = new MovingAverage(name + "Ma20", false);
            _ma_long        = (MovingAverage)_tab.CreateCandleIndicator(_ma_long, "Prime");
            _ma_long.Lenght = 20; // присвоение значения
            _ma_long.Save();

            _vol = new Volume(name + "Volum", false);
            _vol = (Volume)_tab.CreateCandleIndicator(_vol, "nameArea");
            _vol.Save();

            _tab.BestBidAskChangeEvent        += _tab_BestBidAskChangeEvent;        // событие изменения лучших цен
            _tab.OrderUpdateEvent             += _tab_OrderUpdateEvent;             // событие обновления ордеров
            _tab.MarketDepthUpdateEvent       += _tab_MarketDepthUpdateEvent;       // пришел новый стакан
            _tab.PositionNetVolumeChangeEvent += _tab_PositionNetVolumeChangeEvent; // у позиции изменился объем
            _tab.PositionClosingSuccesEvent   += _tab_PositionClosingSuccesEvent;   // позиция успешно закрыта
            _tab.NewTickEvent += _tab_NewTickEvent;                                 // событие новых тиков
        } // конструктор
Exemple #3
0
        /// <summary>
        /// создать параметр типа Decimal
        /// </summary>
        /// <param name="name">Имя параметра</param>
        /// <param name="value">Значение по умолчанию</param>
        /// <param name="start">Первое значение при оптимизации</param>
        /// <param name="stop">Последнее значение при оптимизации</param>
        /// <param name="step">Шаг изменения при оптимизации</param>
        public StrategyParameterDecimal CreateParameter(string name, decimal value, decimal start, decimal stop, decimal step)
        {
            StrategyParameterDecimal newParameter = new StrategyParameterDecimal(name, value, start, stop, step);

            if (_parameters.Find(p => p.Name == name) != null)
            {
                throw new Exception("Ахтунг! Параметр с таким именем уже существует!");
            }

            return((StrategyParameterDecimal)LoadParameterValues(newParameter));
        }
Exemple #4
0
        /// <summary>
        /// create a Decimal type parameter /
        /// создать параметр типа Decimal
        /// </summary>
        /// <param name="name">param name / Имя параметра</param>
        /// <param name="value">default value / Значение по умолчанию</param>
        /// <param name="start">first value / Первое значение при оптимизации</param>
        /// <param name="stop">last value / Последнее значение при оптимизации</param>
        /// <param name="step">value step / Шаг изменения при оптимизации</param>
        public StrategyParameterDecimal CreateParameter(string name, decimal value, decimal start, decimal stop, decimal step)
        {
            StrategyParameterDecimal newParameter = new StrategyParameterDecimal(name, value, start, stop, step);

            if (_parameters.Find(p => p.Name == name) != null)
            {
                throw new Exception(OsLocalization.Trader.Label52);
            }

            return((StrategyParameterDecimal)LoadParameterValues(newParameter));
        }
        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);
        }
Exemple #6
0
        public decimal _min_lot;                                                           // поле хранящее величину минимального лота для биржи

        public MyBlanks(string name, StartProgram startProgram) : base(name, startProgram) // конструктор робота тут
        {
            // инициализация переменных и параметров
            price = 1;
            _kom  = 0;

            kvot_val  = CreateParameter("КвотВалюта-Инструмент", "USDT");
            tovar_val = CreateParameter("Базовая Валюта-Товар", "BTC");

            komis_birgi = CreateParameter("КОМ биржи в %", 0.2m, 0, 0.1m, 0.1m);

            TabCreate(BotTabType.Simple); // создание простой вкладки
            _tab = TabsSimple[0];         // записываем первую вкладку в поле

            _tab.MarketDepthUpdateEvent += _tab_MarketDepthUpdateEvent;
        }
        public event Action <MarketFaze> MarketFazeChangeEvent; // событие изменения фазы рынка

        #endregion

        /// <summary>
        /// Конструктор класса робота
        /// </summary>
        /// <param name="name">имя робота</param>
        /// <param name="startProgram">программа, которая запустила робота</param>
        public OneLegArbitrageMy(string name, StartProgram startProgram) : base(name, startProgram)
        {
            //Запоминаем имя программы, которая запустила бота
            //Это может быть тестер, оптимизатор, терминал
            _startProgram = startProgram;

            //Создаем вкладки бота
            TabCreate(BotTabType.Simple);
            TabCreate(BotTabType.Index);

            _tabSec   = TabsSimple[0];
            _tabIndex = TabsIndex[0];

            // создаем настроечные параметры робота
            LenghtMa           = CreateParameter("Lenght MA", 100, 50, 200, 10);
            LenghtBollinger    = CreateParameter("Lenght Bollinger", 100, 50, 200, 10);
            DeviationBollinger = CreateParameter("Deviation Bollinger", 1, 0.5m, 2.5m, 0.5m);
            LenghtAtr          = CreateParameter("Lenght ATR", 20, 20, 100, 10);
            MultiplyAtr        = CreateParameter("Multiplay ATR", 1, 1, 5, 0.5m);

            // cоздаем индикаторы
            _ma        = new MovingAverage(name + "MA", false);
            _ma        = (MovingAverage)_tabIndex.CreateCandleIndicator(_ma, "Prime");
            _ma.Lenght = LenghtMa.ValueInt;
            _ma.Save();

            _bollinger           = new Bollinger(name + "Bollinger", false);
            _bollinger           = (Bollinger)_tabIndex.CreateCandleIndicator(_bollinger, "Prime");
            _bollinger.Lenght    = LenghtBollinger.ValueInt;
            _bollinger.Deviation = DeviationBollinger.ValueDecimal;
            _bollinger.Save();

            _atr        = new Atr(name + "ATR", false);
            _atr        = (Atr)_tabIndex.CreateCandleIndicator(_atr, "Second");
            _atr.Lenght = LenghtAtr.ValueInt;
            _atr.Save();

            // загружаем настроечные параметры робота
            Load();

            // подписываемся на события
            _tabIndex.SpreadChangeEvent += TabIndex_SpreadChangeEvent;
            _tabSec.CandleFinishedEvent += TabSec_CandleFinishedEvent;
            ParametrsChangeByUser       += OneLegArbitrage_ParametrsChangeByUser;
            DeleteEvent += OneLegArbitrage_DeleteEvent;
            //todo доработать OneLegArbitrage_DeleteEvent, чтобы удалялись все файлы робота
        }
Exemple #8
0
        /// <summary>
        /// Конструктор класса робота
        /// </summary>
        /// <param name="name">Имя робота</param>
        /// <param name="startProgram">Имя программы, запустившей робота</param>
        public PairArbitrage(string name, StartProgram startProgram) : base(name, startProgram)
        {
            // сохраняем программу, которая запустила робота
            // это может быть тестер, оптимизатор, терминал
            _startProgram = StartProgram;

            // создаем вкладки
            TabCreate(BotTabType.Simple);
            TabCreate(BotTabType.Simple);
            TabCreate(BotTabType.Index);
            _tab1     = TabsSimple[0];
            _tab2     = TabsSimple[1];
            _tabIndex = TabsIndex[0];

            // создаем оптимизируемые параметры
            LenghtMA             = CreateParameter("LenghtMA", 60, 60, 200, 20);
            LenghtIvashovMA      = CreateParameter("LenghtIvashovMA", 100, 60, 200, 20);
            LenghtIvashovAverage = CreateParameter("LenghtIvashovAverage", 100, 60, 200, 20);
            Multiply             = CreateParameter("Multiply", 1.0m, 0.6m, 2, 0.2m);

            // создаем индикаторы
            _ma        = new MovingAverage(name + "ma", false);
            _ma        = (MovingAverage)_tabIndex.CreateCandleIndicator(_ma, "Prime");
            _ma.Lenght = LenghtMA.ValueInt;
            _ma.Save();

            _ivashov = new IvashovRange(name + "ivashov", false);
            _ivashov = (IvashovRange)_tabIndex.CreateCandleIndicator(_ivashov, "Second");
            _ivashov.LenghtAverage = LenghtIvashovAverage.ValueInt;
            _ivashov.LenghtMa      = LenghtIvashovMA.ValueInt;
            _ivashov.Save();

            // загружаем настроечные параметры бота
            Load();

            // подписка на событие обновление индекса
            _tabIndex.SpreadChangeEvent += _tabIndex_SpreadChangeEvent;

            // подписка на событие успешного открытия сделки по вкладкам
            _tab1.PositionOpeningSuccesEvent += _tab1_PositionOpeningSuccesEvent;
            _tab2.PositionOpeningSuccesEvent += _tab2_PositionOpeningSuccesEvent;

            // подписка на сервисные события
            ParametrsChangeByUser += PairArbitrage_ParametrsChangeByUser;
            DeleteEvent           += Strategy_DeleteEvent;
        }
Exemple #9
0
        public decimal price;                                  // записываем текущую цену рынка

        public Depozit(string name, StartProgram startProgram) // конструктор робота
            : base(name, startProgram)
        {
            // инициализация переменных содержащих параметры стратегий
            vkl_Robota       = CreateParameter("РОБОТ Включен?", false);
            slippage         = CreateParameter("Велич. проскаль.у ордеров", 1m, 1m, 50m, 5m);
            profit           = CreateParameter("ТЭЙКПРОФИТ от рынка На ", 15, 5, 50, 5);
            vkl_profit       = CreateParameter("ТЕЙКПРОФИТ включен ЛИ ?", true);
            veli4_usrednen   = CreateParameter("Усред.уваелич в раз ", 0.3m, 1m, 5m, 0.1m);
            vkl_usrednen     = CreateParameter("УСРЕДНЕНИЕ включено ЛИ?", true);
            deltaUsredn      = CreateParameter("УСРЕДнять через", 10m, 5m, 50m, 5m);
            dola_depa        = CreateParameter("Часть депозита на вход", 10, 5, 100, 1);
            vkl_piramid      = CreateParameter("ПИРАМИДА Включена ЛИ?", false);
            deltaVerx        = CreateParameter("ПИРАМИДИТЬСЯ через ", 10m, 5m, 50m, 5m);
            vkl_stop_los     = CreateParameter("Включен ЛИ СТОПЛОС ?", true);
            zn_stop_los      = CreateParameter("СТОП после скок УСРЕД ", 10, 5, 50, 5);
            stop             = CreateParameter("СТОПЛОС ниже на", 25, 5, 100, 5);
            vel_ma           = CreateParameter("MA", 7, 3, 50, 1); // записываем в переменную параметры
            komis_birgi      = CreateParameter("Биржа ЕСТ % учесть", 0.2m, 1m, 1m, 1m);
            min_lot          = CreateParameter("МИН объ.орд у биржи(базовой)", 0.001m, 0.001m, 0.05m, 0.001m);
            vkl_vol_trade    = CreateParameter("СЧИТАТЬ ЛИ объем торгов", true);
            n_min            = CreateParameter("скок минут считать объем", 1, 1, 20, 1);
            count_candels_hi = CreateParameter("Скок.Хаев.св.читать(вход)", 2, 1, 50, 1);
            volum_alarm      = CreateParameter("АВАРИЙНЫЙ ОБЪЕМ ПРОДАЖ", 450, 150, 1000, 50);
            volum_piramid    = CreateParameter("Объем покуп.для ПИрамиды", 350, 150, 550, 50);


            TabCreate(BotTabType.Simple); // создание простой вкладки
            _vklad = TabsSimple[0];       // записываем первую вкладку в поле

            // создание и инициализация индикатора МА
            _ma        = new MovingAverage(name + "Ma", false);
            _ma        = (MovingAverage)_vklad.CreateCandleIndicator(_ma, "Prime");
            _ma.Lenght = vel_ma.ValueInt; // присвоение значения
            _ma.Save();

            _vklad.CandleFinishedEvent          += _vklad_CandleFinishedEvent;          // подписались на событие завершения новой свечи
            _vklad.NewTickEvent                 += _vklad_NewTickEvent;                 // тики
            _vklad.MarketDepthUpdateEvent       += _vklad_MarketDepthUpdateEvent;       // событие пришел стакан
            _vklad.PositionOpeningSuccesEvent   += _vklad_PositionOpeningSuccesEvent;   // событие успешного закрытия позиции
            _vklad.PositionNetVolumeChangeEvent += _vklad_PositionNetVolumeChangeEvent; // изменился объем в позиции
        }
Exemple #10
0
        /// <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);
        }
Exemple #11
0
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="name">Имя робота</param>
        /// <param name="startProgram">Программа, в которой запущен робот</param>
        public BollingerTrend(string name, StartProgram startProgram) : base(name, startProgram)
        {
            _startProgram = startProgram;

            // создаем вкладку робота Simple
            TabCreate(BotTabType.Simple);
            _tab = TabsSimple[0];

            // создаем настроечные параметры робота
            Regime                   = CreateParameter("Режим работы бота", "Off", new[] { "On", "Off", "OnlyClosePosition", "OnlyShort", "OnlyLong" });
            OnDebug                  = CreateParameter("Включить отладку", false);
            OnDepositFixed           = CreateParameter("Включить режим фикс. депозита", false);
            DepositFixedSize         = CreateParameter("Размер фикс. депозита", 100, 100.0m, 100, 100);
            DepositNameCode          = CreateParameter("Код инструмента, в котором депозит", "USDT", new[] { "USDT", "" });
            VolumePercent            = CreateParameter("Объем входа в позицию (%)", 50, 40, 300, 10);
            BollingerPeriod          = CreateParameter("Длина болинжера", 100, 50, 200, 10);
            BollingerDeviation       = CreateParameter("Отклонение болинжера", 1.5m, 1.0m, 3.0m, 0.2m);
            MethodOutOfPosition      = CreateParameter("Метод выхода из позиции", "ChannelBoundary", new[] { "ChannelBoundary", "ChannelCenter" });
            OnStopForBreakeven       = CreateParameter("Вкл. стоп для перевода в безубытк", true);
            MinProfitOnStopBreakeven = CreateParameter("Мин. профит для перевода в безубытк (%)", 7, 5, 20, 1);
            Slippage                 = CreateParameter("Проскальзывание (в шагах цены)", 350, 1, 500, 50);
            VolumeDecimals           = CreateParameter("Кол. знаков после запятой для объема", 4, 4, 10, 1);
            ShiftTimeExchange        = CreateParameter("Разница времени с биржей", 5, -10, 10, 1);

            // создаем индикаторы на вкладке робота и задаем для них параметры
            _bollinger = IndicatorsFactory.CreateIndicatorByName("Bollinger", name + "Bollinger", false);
            _bollinger = (Aindicator)_tab.CreateCandleIndicator(_bollinger, "Prime");
            _bollinger.ParametersDigit[0].Value = BollingerPeriod.ValueInt;
            _bollinger.ParametersDigit[1].Value = BollingerDeviation.ValueDecimal;
            _bollinger.Save();

            // подписываемся на события
            _tab.CandleFinishedEvent        += Tab_CandleFinishedEvent;
            _tab.PositionClosingFailEvent   += Tab_PositionClosingFailEvent;
            _tab.PositionClosingSuccesEvent += Tab_PositionClosingSuccesEvent;
            _tab.PositionOpeningFailEvent   += Tab_PositionOpeningFailEvent;
            _tab.MarketDepthUpdateEvent     += Tab_MarketDepthUpdateEvent;
            ParametrsChangeByUser           += BollingerTrend_ParametrsChangeByUser;
        }
Exemple #12
0
        public Storog(string name, StartProgram startProgram) : base(name, startProgram) // конструктор робота тут
        {
            TabCreate(BotTabType.Simple);                                                // создание простой вкладки
            _tab = TabsSimple[0];                                                        // записываем первую вкладку в поле

            // инициализация переменных и параметров
            price       = 1;
            _kom        = 0;
            zakritie    = 0; //последняя позиция закрылась по цене
            vkl_Robota  = CreateParameter("РОБОТ Включен?", false);
            vkl_stopa   = CreateParameter("Стоп Включен?", true);
            do_stopa    = CreateParameter(" РАСТ. до СТОПА", 10m, 5m, 100m, 5m);
            _uroven     = CreateParameter("УРОВЕНЬ Работы", 10000m, 100m, 1000m, 50m);
            slippage    = CreateParameter("Велич. проскаль.у ордеров", 1m, 1m, 50m, 5m);
            part_tovara = CreateParameter("ИСПОЛЬЗ Товара Часть(1/?)", 2, 2, 50, 1);
            do_piram    = CreateParameter(" РАСТ. до Пирамиды", 10m, 5m, 100m, 5m);
            profit      = CreateParameter("ПРОФИТ от рынка На ", 3, 5, 200, 5);
            dvig        = CreateParameter("Движение верх забрать ", 130, 5, 200, 5);
            ot_rinka    = CreateParameter(" Держаться от рынка", 110, 10, 150, 10);
            //part_depo = CreateParameter("ИСПОЛЬЗ Часть ДЕПО(1/?)", 10, 2, 50, 1);
            komis_birgi = CreateParameter("КОМ биржи в %", 0.2m, 0, 0.1m, 0.1m);
            min_lot     = CreateParameter("МИН объ.орд у биржи(базовой)", 0.001m, 0.001m, 0.05m, 0.001m);
            vel_ma      = CreateParameter("MA", 2, 3, 50, 1); // записываем в переменную параметры

            // создание и инициализация индикатора МА
            _ma        = new MovingAverage(name + "Ma", true);
            _ma        = (MovingAverage)_tab.CreateCandleIndicator(_ma, "Prime");
            _ma.Lenght = vel_ma.ValueInt; // присвоение значения
            _ma.Save();

            _tab.CandleFinishedEvent        += _tab_CandleFinishedEvent;        // подписались на событие завершения новой свечи
            _tab.NewTickEvent               += _tab_NewTickEvent;               // тики
            _tab.MarketDepthUpdateEvent     += _tab_MarketDepthUpdateEvent;     // событие пришел стакан
            _tab.PositionOpeningSuccesEvent += _tab_PositionOpeningSuccesEvent; // событие успешного открытия позиции
            _tab.PositionClosingSuccesEvent += _tab_PositionClosingSuccesEvent; // событие успешного закрытия позиции
        }
Exemple #13
0
        /// <summary>
        /// place of work flow responsible for optimization
        /// место работы потока отвечающего за оптимизацию
        /// </summary>
        private async void PrimeThreadWorkerPlace()
        {
            List <IIStrategyParameter> allParam = _parameters;

            for (int i = 0; i < _parameters.Count; i++)
            {
                if (allParam[i].Type == StrategyParameterType.Int)
                {
                    ((StrategyParameterInt)allParam[i]).ValueInt = ((StrategyParameterInt)allParam[i]).ValueIntStart;
                }
                if (allParam[i].Type == StrategyParameterType.Decimal)
                {
                    ((StrategyParameterDecimal)allParam[i]).ValueDecimal = ((StrategyParameterDecimal)allParam[i]).ValueDecimalStart;
                }
            }

            List <bool> allOptimezedParam = _parametersOn;


            // 1 consider how many passes we need to do in the first phase/1 считаем сколько проходов нам нужно сделать в первой фазе

            List <IIStrategyParameter> optimizedParamToCheckCount = new List <IIStrategyParameter>();

            for (int i = 0; i < allParam.Count; i++)
            {
                if (allOptimezedParam[i])
                {
                    optimizedParamToCheckCount.Add(allParam[i]);
                    ReloadParam(allParam[i]);
                }
            }

            optimizedParamToCheckCount = CopyParameters(optimizedParamToCheckCount);

            int countBots = 0;

            bool isStart = true;

            while (true)
            {
                bool isAndOfFaze = false; // all parameters passed/все параметры пройдены

                for (int i2 = 0; i2 < optimizedParamToCheckCount.Count + 1; i2++)
                {
                    if (i2 == optimizedParamToCheckCount.Count)
                    {
                        isAndOfFaze = true;
                        break;
                    }

                    if (isStart)
                    {
                        countBots++;
                        isStart = false;
                        break;
                    }

                    if (optimizedParamToCheckCount[i2].Type == StrategyParameterType.Int)
                    {
                        StrategyParameterInt parameter = (StrategyParameterInt)optimizedParamToCheckCount[i2];

                        if (parameter.ValueInt < parameter.ValueIntStop)
                        {
                            // the current index can increment the value
                            // по текущему индексу можно приращивать значение
                            parameter.ValueInt = parameter.ValueInt + parameter.ValueIntStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // reset all previous parameters to zero
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(optimizedParamToCheckCount[i3]);
                                }
                            }
                            countBots++;
                            break;
                        }
                    }
                    else if (optimizedParamToCheckCount[i2].Type == StrategyParameterType.Decimal
                             )
                    {
                        StrategyParameterDecimal parameter = (StrategyParameterDecimal)optimizedParamToCheckCount[i2];

                        if (parameter.ValueDecimal < parameter.ValueDecimalStop)
                        {
                            // at the current index you can increment the value
                            // по текущему индексу можно приращивать значение
                            parameter.ValueDecimal = parameter.ValueDecimal + parameter.ValueDecimalStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // reset all previous parameters to zero
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(optimizedParamToCheckCount[i3]);
                                }
                            }
                            countBots++;
                            break;
                        }
                    }
                }

                if (isAndOfFaze)
                {
                    break;
                }
            }


            _countAllServersMax = countBots;

            SendLogMessage(OsLocalization.Optimizer.Message4 + countBots, LogMessageType.System);

            // 2 pass the first phase when you need to bypass all the options
            // 2 проходим первую фазу, когда нужно обойти все варианты

            List <IIStrategyParameter> optimizedParam = new List <IIStrategyParameter>();

            for (int i = 0; i < allParam.Count; i++)
            {
                if (allOptimezedParam[i])
                {
                    optimizedParam.Add(allParam[i]);
                }
            }

            List <OptimizerFaze> fazes = _master.Fazes;

            List <IIStrategyParameter> currentParam = CopyParameters(optimizedParam);

            for (int i2 = 0; i2 < optimizedParam.Count; i2++)
            {
                ReloadParam(currentParam[i2]);
            }

            List <BotPanel> botsInFaze = new List <BotPanel>();

            isStart = true;


            bool neadToReloadParam = false;

            while (true)
            {
                bool isAndOfFaze = false; // all parameters passed/все параметры пройдены

                for (int i2 = 0; i2 < currentParam.Count + 1; i2++)
                {
                    if (i2 == currentParam.Count)
                    {
                        isAndOfFaze = true;
                        break;
                    }

                    if (isStart)
                    {
                        isStart = false;
                        break;
                    }

                    if (currentParam[i2].Type == StrategyParameterType.Int)
                    {
                        StrategyParameterInt parameter = (StrategyParameterInt)currentParam[i2];

                        if (parameter.ValueInt < parameter.ValueIntStop)
                        {
                            // at the current index you can increment the value
                            // по текущему индексу можно приращивать значение
                            parameter.ValueInt = parameter.ValueInt + parameter.ValueIntStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // reset all previous parameters to zero
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(currentParam[i3]);
                                }
                            }

                            break;
                        }
                    }
                    else if (currentParam[i2].Type == StrategyParameterType.Decimal
                             )
                    {
                        StrategyParameterDecimal parameter = (StrategyParameterDecimal)currentParam[i2];

                        if (parameter.ValueDecimal < parameter.ValueDecimalStop)
                        {
                            // at the current index you can increment the value
                            // по текущему индексу можно приращивать значение
                            parameter.ValueDecimal = parameter.ValueDecimal + parameter.ValueDecimalStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // reset all previous parameters to zero
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(currentParam[i3]);
                                }
                            }
                            break;
                        }
                    }
                }

                if (isAndOfFaze)
                {
                    break;
                }

                while (_servers.Count >= _master.ThreadsCount)
                {
                    await Task.Delay(2000);
                }

                if (_neadToStop)
                {
                    while (true)
                    {
                        await Task.Delay(1000);

                        if (_servers.Count == 0)
                        {
                            break;
                        }
                    }

                    for (int i = 0; i < botsInFaze.Count; i++)
                    {
                        botsInFaze[i].Delete();
                    }
                    if (TestReadyEvent != null)
                    {
                        TestReadyEvent(botsInFaze, null);
                    }
                    _primeThreadWorker = null;
                    return;
                }

                StartNewBot(allParam, currentParam, fazes[0], botsInFaze, _serverNum.ToString() + " InSample");
            } // while enumerating parameters/while по перебору параметров

            while (true)
            {
                await Task.Delay(1000);

                if (_servers.Count == 0)
                {
                    break;
                }
            }

            for (int i = 0; i < botsInFaze.Count; i++)
            {
                botsInFaze[i].Delete();
            }

            SendLogMessage(OsLocalization.Optimizer.Message5, LogMessageType.System);

            // 3 filter/3 фильтруем

            List <BotPanel> botsToOutOfSample = new List <BotPanel>();

            EndOfFazeFiltration(botsInFaze, fazes[0], botsToOutOfSample);

            // 4 do forwards/4 делаем форварды

            SendLogMessage(OsLocalization.Optimizer.Message6, LogMessageType.System);

            List <BotPanel> botsOutOfSample = new List <BotPanel>();

            for (int i = 0; i < botsToOutOfSample.Count; i++)
            {
                while (_servers.Count >= _master.ThreadsCount)
                {
                    await Task.Delay(2000);
                }

                if (_neadToStop)
                {
                    while (true)
                    {
                        await Task.Delay(1000);

                        if (_servers.Count == 0)
                        {
                            break;
                        }
                    }
                    for (int i2 = 0; i2 < botsOutOfSample.Count; i2++)
                    {
                        botsOutOfSample[i2].Delete();
                    }
                    if (TestReadyEvent != null)
                    {
                        TestReadyEvent(botsToOutOfSample, botsOutOfSample);
                    }
                    _primeThreadWorker = null;
                    return;
                }

                StartNewBot(botsToOutOfSample[i].Parameters, new List <IIStrategyParameter>(), fazes[1], botsOutOfSample,
                            botsToOutOfSample[i].NameStrategyUniq.Replace(" InSample", "") + " OutOfSample");
            }

            while (true)
            {
                await Task.Delay(1000);

                if (_servers.Count == 0)
                {
                    break;
                }
            }

            for (int i = 0; i < botsOutOfSample.Count; i++)
            {
                botsOutOfSample[i].Delete();
            }

            SendLogMessage(OsLocalization.Optimizer.Message7, LogMessageType.System);

            if (TestReadyEvent != null)
            {
                TestReadyEvent(botsInFaze, botsOutOfSample);
            }
            _primeThreadWorker = null;
        }
Exemple #14
0
        private async void StartOptimazeFazeInSample(OptimizerFaze faze, OptimazerFazeReport report,
                                                     List <IIStrategyParameter> allParameters, List <bool> parametersToOptimization)
        {
            ReloadAllParam(allParameters);

            // 2 проходим первую фазу, когда нужно обойти все варианты

            List <IIStrategyParameter> optimizedParamStart = new List <IIStrategyParameter>();

            for (int i = 0; i < allParameters.Count; i++)
            {
                if (parametersToOptimization[i])
                {
                    optimizedParamStart.Add(allParameters[i]);
                }
            }

            List <IIStrategyParameter> optimizeParamCurrent = CopyParameters(optimizedParamStart);

            ReloadAllParam(optimizeParamCurrent);

            bool isStart = true;

            while (true)
            {
                bool isAndOfFaze = false; // all parameters passed/все параметры пройдены

                for (int i2 = 0; i2 < optimizeParamCurrent.Count + 1; i2++)
                {
                    if (i2 == optimizeParamCurrent.Count)
                    {
                        isAndOfFaze = true;
                        break;
                    }

                    if (isStart)
                    {
                        isStart = false;
                        break;
                    }

                    if (optimizeParamCurrent[i2].Type == StrategyParameterType.Int)
                    {
                        StrategyParameterInt parameter = (StrategyParameterInt)optimizeParamCurrent[i2];

                        if (parameter.ValueInt < parameter.ValueIntStop)
                        {
                            // at the current index you can increment the value
                            // по текущему индексу можно приращивать значение
                            parameter.ValueInt = parameter.ValueInt + parameter.ValueIntStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // reset all previous parameters to zero
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(optimizeParamCurrent[i3]);
                                }
                            }

                            break;
                        }
                    }
                    else if (optimizeParamCurrent[i2].Type == StrategyParameterType.Decimal
                             )
                    {
                        StrategyParameterDecimal parameter = (StrategyParameterDecimal)optimizeParamCurrent[i2];

                        if (parameter.ValueDecimal < parameter.ValueDecimalStop)
                        {
                            // at the current index you can increment the value
                            // по текущему индексу можно приращивать значение
                            parameter.ValueDecimal = parameter.ValueDecimal + parameter.ValueDecimalStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // reset all previous parameters to zero
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(optimizeParamCurrent[i3]);
                                }
                            }
                            break;
                        }
                    }
                }

                if (isAndOfFaze)
                {
                    break;
                }

                while (_servers.Count >= _master.ThreadsCount)
                {
                    Thread.Sleep(50);
                }

                if (_neadToStop)
                {
                    while (true)
                    {
                        Thread.Sleep(50);
                        if (_servers.Count == 0)
                        {
                            break;
                        }
                    }

                    TestReadyEvent?.Invoke(ReportsToFazes);
                    _primeThreadWorker = null;
                    return;
                }

                while (_botsInTest.Count >= _master.ThreadsCount)
                {
                    Thread.Sleep(50);
                }

                //SendLogMessage("BotInSample" ,LogMessageType.System);

                StartNewBot(_parameters, optimizeParamCurrent, report, " InSample");
            }

            while (true)
            {
                Thread.Sleep(50);
                if (_servers.Count == 0)
                //   || _botsInTest.Count == 0)
                {
                    break;
                }
            }

            SendLogMessage(OsLocalization.Optimizer.Message5, LogMessageType.System);
        }
Exemple #15
0
        public int BotCountOneFaze(List <IIStrategyParameter> param, List <bool> paramsOn)
        {
            List <IIStrategyParameter> allParam = param;

            for (int i = 0; i < allParam.Count; i++)
            {
                if (allParam[i].Type == StrategyParameterType.Int)
                {
                    ((StrategyParameterInt)allParam[i]).ValueInt = ((StrategyParameterInt)allParam[i]).ValueIntStart;
                }
                if (allParam[i].Type == StrategyParameterType.Decimal)
                {
                    ((StrategyParameterDecimal)allParam[i]).ValueDecimal = ((StrategyParameterDecimal)allParam[i]).ValueDecimalStart;
                }
            }

            List <bool> allOptimezedParam = paramsOn;


            // 1 consider how many passes we need to do in the first phase/
            // 1 считаем сколько проходов нам нужно сделать в первой фазе

            List <IIStrategyParameter> optimizedParamToCheckCount = new List <IIStrategyParameter>();

            for (int i = 0; i < allParam.Count; i++)
            {
                if (allOptimezedParam[i])
                {
                    optimizedParamToCheckCount.Add(allParam[i]);
                    ReloadParam(allParam[i]);
                }
            }

            optimizedParamToCheckCount = CopyParameters(optimizedParamToCheckCount);

            int countBots = 0;

            bool isStart = true;

            while (true)
            {
                bool isAndOfFaze = false; // all parameters passed/все параметры пройдены

                for (int i2 = 0; i2 < optimizedParamToCheckCount.Count + 1; i2++)
                {
                    if (i2 == optimizedParamToCheckCount.Count)
                    {
                        isAndOfFaze = true;
                        break;
                    }

                    if (isStart)
                    {
                        countBots++;
                        isStart = false;
                        break;
                    }

                    if (optimizedParamToCheckCount[i2].Type == StrategyParameterType.Int)
                    {
                        StrategyParameterInt parameter = (StrategyParameterInt)optimizedParamToCheckCount[i2];

                        if (parameter.ValueInt < parameter.ValueIntStop)
                        {
                            // the current index can increment the value
                            // по текущему индексу можно приращивать значение
                            parameter.ValueInt = parameter.ValueInt + parameter.ValueIntStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // reset all previous parameters to zero
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(optimizedParamToCheckCount[i3]);
                                }
                            }
                            countBots++;
                            break;
                        }
                    }
                    else if (optimizedParamToCheckCount[i2].Type == StrategyParameterType.Decimal
                             )
                    {
                        StrategyParameterDecimal parameter = (StrategyParameterDecimal)optimizedParamToCheckCount[i2];

                        if (parameter.ValueDecimal < parameter.ValueDecimalStop)
                        {
                            // at the current index you can increment the value
                            // по текущему индексу можно приращивать значение
                            parameter.ValueDecimal = parameter.ValueDecimal + parameter.ValueDecimalStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // reset all previous parameters to zero
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(optimizedParamToCheckCount[i3]);
                                }
                            }
                            countBots++;
                            break;
                        }
                    }
                }

                if (isAndOfFaze)
                {
                    break;
                }
            }

            return(countBots * (_master.IterationCount * 2));
        }
Exemple #16
0
        public PriceLavelBot(string name, StartProgram startProgram)
            : base(name, startProgram)
        {
            this.ParametrsChangeByUser += PriceLavelBot_ParametrsChangeByUser;

            TabCreate(BotTabType.Simple);
            _tab = TabsSimple[0];

            SessionAsia = CreateParameter("Торговать Азию", false);
            SessionEU   = CreateParameter("Торговать Европу", false);
            SessionUSA  = CreateParameter("Торговать Америку", false);
            SessionRUS  = CreateParameter("Торговать Россию", false);
            SessionDay  = CreateParameter("Круглосуточно", false);


            _TradeSessions = new TradeSessions(name + "_TradeSessions", false, GetListSessionTypes());
            _TradeSessions = (TradeSessions)_tab.CreateCandleIndicator(_TradeSessions, "Prime");
            _TradeSessions.Save();

            PriceLevleLine         = new PriceLevleLine(name + "_PriceLevleLine", false);
            PriceLevleLine         = (PriceLevleLine)_tab.CreateCandleIndicator(PriceLevleLine, "Prime");
            PriceLevleLine.PaintOn = false;
            PriceLevleLine.Save();

            maLenth         = CreateParameter("maLenth", 24, 24, 48, 1);
            maVolume        = new MovingAverage(name + "_maVolume", false);
            maVolume        = (MovingAverage)_tab.CreateCandleIndicator(maVolume, "New1");
            maVolume.Lenght = maLenth.ValueInt;
            maVolume.TypeCalculationAverage = MovingAverageTypeCalculation.Exponential;
            maVolume.TypePointsToSearch     = PriceTypePoints.Volume;
            maVolume.Save();

            maVolumeSlow           = new MovingAverage(name + "maVolumeSlow", false);
            maVolumeSlow           = (MovingAverage)_tab.CreateCandleIndicator(maVolumeSlow, "New1");
            maVolumeSlow.ColorBase = System.Drawing.Color.Green;
            maVolumeSlow.Lenght    = 48;
            maVolumeSlow.TypeCalculationAverage = MovingAverageTypeCalculation.Simple;
            maVolumeSlow.TypePointsToSearch     = PriceTypePoints.Volume;
            maVolumeSlow.Save();

            mA = new MovingAverage(name + "mA", false)
            {
                Lenght = 9
            };
            mA = (MovingAverage)_tab.CreateCandleIndicator(mA, "Prime");
            mA.Save();

            Regime           = CreateParameter("Regime", "Off", new[] { "Off", "On" });
            UseSafe          = CreateParameter("Использовать сейф", true);
            _Volume          = CreateParameter("Volume", 1, 0.00m, 100, 1);
            MinProfitTraling = CreateParameter("Минимальный профит для трэйлинга", 0.2m, 0.2m, 2, 0.1m);

            MaxStop = CreateParameter("MaxStop", 1, 1, 10, 0.1m);

            _Slipage  = CreateParameter("_Slipage", 1, 1, 50, 1);
            leverage  = CreateParameter("Маржинальное плечо", 1, 1, 10, 1);
            StepCount = CreateParameter("Ордеров в лесенке", 1, 1, 10, 1);

            DepoCurrency = CreateParameter("DepoCurrency", "Currency2", new[] { "Currency1", "Currency2" });

            isContract = CreateParameter("Торгуем контрактами", false);

            PaintLevels = CreateParameter("Отрисовывать уровни", true);

            Breakeven     = CreateParameter("Использовать безубыток", true);
            NeedBreakeven = Breakeven.ValueBool;

            DeltaSizeK = CreateParameter("Делитель основного ТФ", 6, 1, 40, 1);

            _tab.CandleFinishedEvent        += _tab_CandleFinishedEvent;
            _tab.CandleUpdateEvent          += _tab_CandleUpdateEvent;
            _tab.PositionOpeningSuccesEvent += _tab_PositionOpeningSuccesEvent;
            _tab.NewTickEvent               += _tab_NewTickEvent;
            _tab.FirstTickToDayEvent        += _tab_FirstTickToDayEvent;
            _tab.PositionClosingSuccesEvent += _tab_PositionClosingSuccesEvent;


            //Младший тайм фрейм
            TabCreate(BotTabType.Simple);
            _tab_pattern = TabsSimple[1];

            _tab_pattern.CandleFinishedEvent += _tab_pattern_CandleFinishedEvent;

            delta_pattern = new Delta(name + "_delta", false);
            delta_pattern = (Delta)_tab_pattern.CreateCandleIndicator(delta_pattern, "New1");
            delta_pattern.Save();

            Volume_pattern = new Volume(name + "_Volume", false);
            Volume_pattern = (Volume)_tab_pattern.CreateCandleIndicator(Volume_pattern, "New2");
            Volume_pattern.Save();


            //график Дельты
            TabCreate(BotTabType.Simple);
            _tab_delta = TabsSimple[2];

            _tab_delta.CandleFinishedEvent += _tab_delta_CandleFinishedEvent;;

            delta_delta = new Delta(name + "delta_delta", false);
            delta_delta = (Delta)_tab_delta.CreateCandleIndicator(delta_delta, "New1");
            delta_delta.Save();

            Volume_delta = new Volume(name + "delta_Volume", false);
            Volume_delta = (Volume)_tab_delta.CreateCandleIndicator(Volume_delta, "New2");
            Volume_delta.Save();



            //    lines = new List<LineHorisontal>();

            Thread closerThread = new Thread(CloseFailPosition);

            closerThread.IsBackground = true;
            closerThread.Start();
        }
Exemple #17
0
        /// <summary>
        /// место работы потока отвечающего за оптимизацию
        /// </summary>
        private void PrimeThreadWorkerPlace()
        {
            List <IIStrategyParameter> allParam = _parameters;

            for (int i = 0; i < _parameters.Count; i++)
            {
                if (allParam[i].Type == StrategyParameterType.Int)
                {
                    ((StrategyParameterInt)allParam[i]).ValueInt = ((StrategyParameterInt)allParam[i]).ValueIntStart;
                }
                if (allParam[i].Type == StrategyParameterType.Decimal)
                {
                    ((StrategyParameterDecimal)allParam[i]).ValueDecimal = ((StrategyParameterDecimal)allParam[i]).ValueDecimalStart;
                }
            }

            List <bool> allOptimezedParam = _parametersOn;


// 1 считаем сколько проходов нам нужно сделать в первой фазе

            List <IIStrategyParameter> optimizedParamToCheckCount = new List <IIStrategyParameter>();

            for (int i = 0; i < allParam.Count; i++)
            {
                if (allOptimezedParam[i])
                {
                    optimizedParamToCheckCount.Add(allParam[i]);
                    ReloadParam(allParam[i]);
                }
            }

            optimizedParamToCheckCount = CopyParameters(optimizedParamToCheckCount);

            int countBots = 0;

            bool isStart = true;

            while (true)
            {
                bool isAndOfFaze = false; // все параметры пройдены

                for (int i2 = 0; i2 < optimizedParamToCheckCount.Count + 1; i2++)
                {
                    if (i2 == optimizedParamToCheckCount.Count)
                    {
                        isAndOfFaze = true;
                        break;
                    }

                    if (isStart)
                    {
                        countBots++;
                        isStart = false;
                        break;
                    }

                    if (optimizedParamToCheckCount[i2].Type == StrategyParameterType.Int)
                    {
                        StrategyParameterInt parameter = (StrategyParameterInt)optimizedParamToCheckCount[i2];

                        if (parameter.ValueInt < parameter.ValueIntStop)
                        {
                            // по текущему индексу можно приращивать значение
                            parameter.ValueInt = parameter.ValueInt + parameter.ValueIntStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(optimizedParamToCheckCount[i3]);
                                }
                            }
                            countBots++;
                            break;
                        }
                    }
                    else if (optimizedParamToCheckCount[i2].Type == StrategyParameterType.Decimal
                             )
                    {
                        StrategyParameterDecimal parameter = (StrategyParameterDecimal)optimizedParamToCheckCount[i2];

                        if (parameter.ValueDecimal < parameter.ValueDecimalStop)
                        {
                            // по текущему индексу можно приращивать значение
                            parameter.ValueDecimal = parameter.ValueDecimal + parameter.ValueDecimalStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(optimizedParamToCheckCount[i3]);
                                }
                            }
                            countBots++;
                            break;
                        }
                    }
                }

                if (isAndOfFaze)
                {
                    break;
                }
            }


            _countAllServersMax = countBots;

            SendLogMessage("Количество ботов для обхода: " + countBots, LogMessageType.System);

// 2 проходим первую фазу, когда нужно обойти все варианты

            List <IIStrategyParameter> optimizedParam = new List <IIStrategyParameter>();

            for (int i = 0; i < allParam.Count; i++)
            {
                if (allOptimezedParam[i])
                {
                    optimizedParam.Add(allParam[i]);
                }
            }

            List <OptimizerFaze> fazes = _master.Fazes;

            List <IIStrategyParameter> currentParam = CopyParameters(optimizedParam);

            for (int i2 = 0; i2 < optimizedParam.Count; i2++)
            {
                ReloadParam(currentParam[i2]);
            }

            List <BotPanel> botsInFaze = new List <BotPanel>();

            isStart = true;


            bool neadToReloadParam = false;

            while (true)
            {
                bool isAndOfFaze = false; // все параметры пройдены

                for (int i2 = 0; i2 < currentParam.Count + 1; i2++)
                {
                    if (i2 == currentParam.Count)
                    {
                        isAndOfFaze = true;
                        break;
                    }

                    if (isStart)
                    {
                        isStart = false;
                        break;
                    }

                    if (currentParam[i2].Type == StrategyParameterType.Int)
                    {
                        StrategyParameterInt parameter = (StrategyParameterInt)currentParam[i2];

                        if (parameter.ValueInt < parameter.ValueIntStop)
                        {
                            // по текущему индексу можно приращивать значение
                            parameter.ValueInt = parameter.ValueInt + parameter.ValueIntStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(currentParam[i3]);
                                }
                            }

                            break;
                        }
                    }
                    else if (currentParam[i2].Type == StrategyParameterType.Decimal
                             )
                    {
                        StrategyParameterDecimal parameter = (StrategyParameterDecimal)currentParam[i2];

                        if (parameter.ValueDecimal < parameter.ValueDecimalStop)
                        {
                            // по текущему индексу можно приращивать значение
                            parameter.ValueDecimal = parameter.ValueDecimal + parameter.ValueDecimalStep;
                            if (i2 > 0)
                            {
                                for (int i3 = 0; i3 < i2; i3++)
                                {
                                    // сбрасываем все предыдущие параметры в ноль
                                    ReloadParam(currentParam[i3]);
                                }
                            }
                            break;
                        }
                    }
                }

                if (isAndOfFaze)
                {
                    break;
                }

                while (_servers.Count >= _master.ThreadsCount)
                {
                    Thread.Sleep(2000);
                }

                if (_neadToStop)
                {
                    while (true)
                    {
                        Thread.Sleep(1000);
                        if (_servers.Count == 0)
                        {
                            break;
                        }
                    }

                    for (int i = 0; i < botsInFaze.Count; i++)
                    {
                        botsInFaze[i].Delete();
                    }
                    if (TestReadyEvent != null)
                    {
                        TestReadyEvent(botsInFaze, null);
                    }
                    _primeThreadWorker = null;
                    return;
                }

                StartNewBot(allParam, currentParam, fazes[0], botsInFaze, _serverNum.ToString() + " InSample");
            } // while по перебору параметров

            while (true)
            {
                Thread.Sleep(1000);
                if (_servers.Count == 0)
                {
                    break;
                }
            }

            for (int i = 0; i < botsInFaze.Count; i++)
            {
                botsInFaze[i].Delete();
            }

            SendLogMessage("InSample этап закончен. Фильтруем данные...", LogMessageType.System);

// 3 фильтруем

            List <BotPanel> botsToOutOfSample = new List <BotPanel>();

            EndOfFazeFiltration(botsInFaze, fazes[0], botsToOutOfSample);

// 4 делаем форварды

            SendLogMessage("Фильтрация окончена. Делаем форвардные тесты...", LogMessageType.System);

            List <BotPanel> botsOutOfSample = new List <BotPanel>();

            for (int i = 0; i < botsToOutOfSample.Count; i++)
            {
                while (_servers.Count >= _master.ThreadsCount)
                {
                    Thread.Sleep(2000);
                }

                if (_neadToStop)
                {
                    while (true)
                    {
                        Thread.Sleep(1000);
                        if (_servers.Count == 0)
                        {
                            break;
                        }
                    }
                    for (int i2 = 0; i2 < botsOutOfSample.Count; i2++)
                    {
                        botsOutOfSample[i2].Delete();
                    }
                    if (TestReadyEvent != null)
                    {
                        TestReadyEvent(botsToOutOfSample, botsOutOfSample);
                    }
                    _primeThreadWorker = null;
                    return;
                }

                StartNewBot(botsToOutOfSample[i].Parameters, new List <IIStrategyParameter>(), fazes[1], botsOutOfSample,
                            botsToOutOfSample[i].NameStrategyUniq.Replace(" InSample", "") + " OutOfSample");
            }

            while (true)
            {
                Thread.Sleep(1000);
                if (_servers.Count == 0)
                {
                    break;
                }
            }

            for (int i = 0; i < botsOutOfSample.Count; i++)
            {
                botsOutOfSample[i].Delete();
            }

            SendLogMessage("Оптимизация закончена.", LogMessageType.System);

            if (TestReadyEvent != null)
            {
                TestReadyEvent(botsInFaze, botsOutOfSample);
            }
            _primeThreadWorker = null;
        }