Exemplo n.º 1
0
        void Fix_loss() // метод выхода из позиции с убытком
        {
            List <Position> positions = _tab.PositionsOpenAll;

            if (positions.Count != 0)
            {
                if (vkl_alarm_volum.ValueBool == false) // закрываться с убытком при больших объёмах продаж на рынке?
                {
                    return;
                }

                if (percent_tovara > alarn_persent.ValueInt && // если товара куплено больше % alarn_persent.ValueInt
                    ask_vol_tr > _tmpArarm)                    // если объемы продаж выше аварийных
                {
                    _tab.CloseAllAtMarket();
                    Console.WriteLine(" АВАРийные объемы продаж были  " + ask_vol_tr);
                    Console.WriteLine(" Закрыли сделку! товара было на  " + percent_tovara + " %");
                    Thread.Sleep(1500);
                    Payment_profit();
                    Console.WriteLine(" АВАРИЯ! закрылись с убытком " + temp_profit);
                    vkl_Robota.ValueBool = false; // выключаем работу
                }
                if (ask_vol_tr > _tmpArarm)       // если объемы продаж выше аварийных
                {
                    block_in = true;              // включаем блокировку усреднения и старта
                    Console.WriteLine("АВАРийный объем продаж!!!! " + ask_vol_tr + " БЛОКИРОВАЛИ усреднение и старт робота ");
                    vkl_Robota.ValueBool = false; // выключаем работу
                }

                int ups = _tab.PositionsLast.MyTrades.Count;
                if (ups <= 1)
                {
                    return;
                }
                if (vkl_met_fix_loss_time.ValueBool == false)
                {
                    return;
                }
                decimal  loss             = _tab.PositionsLast.ProfitPortfolioPunkt;          // смотрим есть ли убыток
                DateTime last_tred_time   = _tab.PositionsLast.MyTrades[ups - 1].Time;        // берем время последнего трейда позиции
                DateTime time_expectation = last_tred_time.AddMinutes(n_min_lesion.ValueInt); // добавляем время ожидания
                if (time_expectation < real_time &&                                           // если вышло время ожидания
                    percent_tovara > alarn_persent.ValueInt &&                                // если товара куплено > alarn_persent %
                    loss > kpit_sum.ValueDecimal &&                                           // если убыток меньше критического
                    loss < kpit_sum.ValueDecimal / 2)                                         // но убыток больше  половины критического
                {
                    _tab.CloseAllAtMarket();                                                  // тогда закрываемся
                    Payment_profit();
                    Console.WriteLine("Закрылись с убытком!!! " + temp_profit);
                    Console.WriteLine("Время позиции в убытке дольше " + n_min_lesion.ValueInt + " минут");
                    Console.WriteLine(" товара было на  " + percent_tovara + " %");
                    Thread.Sleep(1500);
                }
            }
        }
Exemplo n.º 2
0
        private void TradeLogic(List <Candle> candles)
        {
            if (candles.Count < 5)
            {
                return;
            }

            // если уже есть открытые позиции - закрываем и выходим
            if (_tab.PositionsOpenAll != null && _tab.PositionsOpenAll.Count != 0)
            {
                _tab.CloseAllAtMarket();
                return;
            }

            // если закрытие последней свечи выше закрытия предыд - покупаем
            if (candles[candles.Count - 1].Close > candles[candles.Count - 2].Close)
            {
                _tab.BuyAtMarket(1);
            }

            // если закрытие последней свечи ниже закрытия предыд - продаем
            if (candles[candles.Count - 1].Close < candles[candles.Count - 2].Close)
            {
                _tab.SellAtMarket(1);
            }
        }
Exemplo n.º 3
0
        private void _vkl_MarketDepthUpdateEvent(MarketDepth marketDepth) // начинается работа с этого метода
        {
            if (count < _machka.Lenght)
            {
                return;
            }
            List <Position> positions = _vkl.PositionsOpenAll;

            volum_ma = _machka.Values[_machka.Values.Count - 1];
            Percent_birgi();                                                        // расчет величины в пунктах  процента биржи
            if (_vkl.PositionsOpenAll.Count != 0)                                   //
            {
                if (_vkl.MarketDepth.Bids[0].Price > _vkl.PositionsLast.EntryPrice) // цена выше закупки профитимся
                {
                    Save_prifit();
                    Piramida();
                }
                if (_vkl.MarketDepth.Asks[0].Price < _vkl.PositionsLast.EntryPrice) //цена ниже закупки усредняемся
                {
                    Usrednenie();
                    StopLoss();
                }
            }
            if (Vkl == false) // выключение работает как закрытие открытой позиции
                              //с наименьшим убытком (проценты биржи) и не дает возможности открыть новую
            {
                if (_vkl.PositionsOpenAll.Count != 0)
                {
                    if (_vkl.MarketDepth.Bids[0].Price > _vkl.PositionsLast.EntryPrice)
                    {
                        if (_vkl.PositionsLast.ProfitPortfolioPunkt > 0.1m)
                        {
                            _vkl.CloseAllAtMarket();
                        }
                    }
                    Thread.Sleep(5000);
                }
                return;
            }
            if (_vkl.PositionsOpenAll.Count == 0)                       // если  не в рынке, открываемся по рынку
            {
                if (volum_ma < _vkl.MarketDepth.Asks[0].Price)          // если цена выше уровня машки
                {
                    if (last_hi_candl < _vkl.MarketDepth.Asks[0].Price) // если цена выше последнего хая
                    {
                        _mnog     = 1;                                  // начальная инициализация  для вычисления количества входов Piramida
                        dola_depa = old_vol_dv;                         //при отсутствие позиции присваивается значение взятое при старте  оса (из файла)
                        ZaprosBalahca();
                        Rac4et_baz_bal();
                        if (tek_bal_potfela / dola_depa > 10.1m)
                        {
                            _vkl.BuyAtMarket(Okreglenie(Depo / dola_depa));
                            Kol_Trad();
                            _vkl_PositionNetVolumeChangeEvent(positions[0]);
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        void Fix_loss() // метод выхода из позиции с убытком
        {
            List <Position> positions = _tab.PositionsOpenAll;

            if (positions.Count != 0)
            {
                decimal loss = _tab.PositionsLast.ProfitPortfolioPunkt; // смотрим есть ли убыток
                Percent_tovara();
                if (loss < kpit_sum.ValueDecimal &&                     // если убыток достиг kpit_sum.ValueDecimal
                    percent_tovara > alarn_persent.ValueInt &&          // если товара куплено больше %
                    ask_vol_tr > volum_alarm.ValueInt)                  // если объемы продаж выше аварийных
                {
                    _tab.CloseAllAtMarket();
                    Payment_profit();
                    Console.WriteLine(" АВАРИЯ ! закрылись с убытком " + temp_profit);
                    Console.WriteLine(" АВАРийные объемы продаж были  " + ask_vol_tr);
                    Console.WriteLine(" товара было на  " + percent_tovara + " %");
                    Thread.Sleep(1500);
                    //vkl_Robota.ValueBool = false;
                    //Console.WriteLine("РОБОТ ВЫКЛЮЧЕН ! ");
                }
                int ups = _tab.PositionsLast.MyTrades.Count;
                if (ups <= 1)
                {
                    return;
                }
                if (vkl_met_fix_loss.ValueBool == false)
                {
                    return;
                }
                DateTime last_tred_time   = _tab.PositionsLast.MyTrades[ups - 1].Time;        // берем время последнего трейда позиции
                DateTime time_expectation = last_tred_time.AddMinutes(n_min_lesion.ValueInt); // добавляем время ожидания
                if (time_expectation < real_time &&                                           // если вышло время ожидания
                    percent_tovara > alarn_persent.ValueInt &&                                // если товара куплено > alarn_persent %
                    loss > kpit_sum.ValueDecimal &&                                           // если убыток меньше критического
                    loss < kpit_sum.ValueDecimal / 2)                                         // но убыток больше  половины критического
                {
                    _tab.CloseAllAtMarket();                                                  // тогда закрываемся
                    Payment_profit();
                    Console.WriteLine("Закрылись с убытком!!! " + temp_profit);
                    Console.WriteLine("Время позиции в убытке дольше " + n_min_lesion.ValueInt + " минут");
                    Console.WriteLine(" товара было на  " + percent_tovara + " %");
                    Thread.Sleep(1500);
                }
            }
        }
Exemplo n.º 5
0
        // логика

        /// <summary>
        /// событие завершения свечи
        /// </summary>
        private void Strateg_CandleFinishedEvent(List <Candle> candles)
        {
            if (Regime == BotTradeRegime.Off)
            {
                ClearLines();
                return;
            }

            if (candles.Count < 2)
            {
                return;
            }

            // распределяем логику в зависимости от текущей позиции

            List <Position> openPosition = _tab.PositionsOpenAll;

            if (candles[candles.Count - 1].TimeStart.DayOfWeek == DayOfWeek.Friday &&
                candles[candles.Count - 1].TimeStart.Hour >= 18)
            {// если у нас пятница вечер
                if (openPosition != null && openPosition.Count != 0)
                {
                    _tab.CloseAllAtMarket();
                }
                return;
            }

            if (_lastReloadLineTime == DateTime.MinValue ||
                candles[candles.Count - 1].TimeStart.DayOfWeek == DayOfWeek.Monday &&
                candles[candles.Count - 1].TimeStart.Hour < 11 &&
                _lastReloadLineTime.Day != candles[candles.Count - 1].TimeStart.Day)
            {// если у нас понедельник утро
                _lastReloadLineTime = candles[candles.Count - 1].TimeStart;
                ReloadLines(candles);
            }

            if (PaintOn)
            {
                RepaintLines();
            }
            else
            {
                ClearLines();
            }

            if (Regime == BotTradeRegime.OnlyClosePosition)
            {
                // если у бота включен режим "только закрытие"
                return;
            }

            LogicOpenPosition(candles);
        }
Exemplo n.º 6
0
        // logic / логика

        /// <summary>
        /// candle completion event /
        /// событие завершения свечи
        /// </summary>
        private void Strateg_CandleFinishedEvent(List <Candle> candles)
        {
            if (Regime == BotTradeRegime.Off)
            {
                ClearLines();
                return;
            }

            if (candles.Count < 2)
            {
                return;
            }

            List <Position> openPosition = _tab.PositionsOpenAll;

            if (candles[candles.Count - 1].TimeStart.DayOfWeek == DayOfWeek.Friday &&
                candles[candles.Count - 1].TimeStart.Hour >= 18)
            {//if we have friday evening  если у нас пятница вечер
                if (openPosition != null && openPosition.Count != 0)
                {
                    _tab.CloseAllAtMarket();
                }
                return;
            }

            if (_lastReloadLineTime == DateTime.MinValue ||
                candles[candles.Count - 1].TimeStart.DayOfWeek == DayOfWeek.Monday &&
                candles[candles.Count - 1].TimeStart.Hour < 11 &&
                _lastReloadLineTime.Day != candles[candles.Count - 1].TimeStart.Day)
            {//if we have monday morning если у нас понедельник утро
                _lastReloadLineTime = candles[candles.Count - 1].TimeStart;
                ReloadLines(candles);
            }

            if (PaintOn)
            {
                RepaintLines();
            }
            else
            {
                ClearLines();
            }

            if (Regime == BotTradeRegime.OnlyClosePosition)
            {
                // if the bot has the "close only" mode enabled
                // если у бота включен режим "только закрытие"
                return;
            }

            LogicOpenPosition(candles);
        }
Exemplo n.º 7
0
        /// <summary>
        /// экстренное закрытие всех позиций
        /// </summary>
        public void CloseAndOffAllToMarket()
        {
            try
            {
                string message = "Риск менеджер предупреждает о превышении дневного лимита убытков! Дальнейшие торги остановлены! Робот: " + NameStrategyUniq;
                ShowMessageInNewThread(message);

                for (int i = 0; i < _botTabs.Count; i++)
                {
                    if (_botTabs[i].GetType().Name == "BotTabSimple")
                    {
                        BotTabSimple bot = (BotTabSimple)_botTabs[i];
                        bot.CloseAllAtMarket();
                        bot.Portfolio = null;
                    }
                }
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// emergency closing of all positions /
        /// экстренное закрытие всех позиций
        /// </summary>
        public void CloseAndOffAllToMarket()
        {
            try
            {
                string message = OsLocalization.Trader.Label54 + NameStrategyUniq;
                ShowMessageInNewThread(message);

                for (int i = 0; i < _botTabs.Count; i++)
                {
                    if (_botTabs[i].GetType().Name == "BotTabSimple")
                    {
                        BotTabSimple bot = (BotTabSimple)_botTabs[i];
                        bot.CloseAllAtMarket();
                        bot.Portfolio = null;
                    }
                }
            }
            catch (Exception error)
            {
                SendNewLogMessage(error.ToString(), LogMessageType.Error);
            }
        }