Q Bot
Q Bot личный блог
22 октября 2021, 13:44

Робот CounterStrike. Приходится раздавать бесплатно

Ну что же, я смотрю, что народ на сайте все же опытный, его на мякине не проведешь. Никто не пожелал купить у меня робота за 10 руб. со скидкой 99% от стандартной цены в 1000 руб. Чувствуют все-таки, что 34% прибыльных сделок и серии аж из 17 убыточных сделок подряд — это липа. А ведь бывало и много хуже. Ладно, придется склепать вам что-нибудь по-настоящему дельное. Ну и предложение по цене придется улучшать, конечно. Раз по 1 тыс. руб. за бота — дорого, то этого отдам бесплатно, уж так и быть. Но это крайнее предложение! Какие там еще могут быть варианты получше? Я вам что ли должен приплачивать, чтоб вы моих роботов попробовали?!

 

Алгоритм

В этот раз будем торговать контр-тренд. Используем два индикатора: ATR (Average True Range) – биржевой технический индикатор, отражающий волатильность движения актива, а также по-прежнему будем использовать MA (Moving Average) — индикатор Скользящая Средняя. Однако, в этот раз будем торговать не от МА, а к ней. В конце концов «покупай дешево, продавай дорого». Покупаем ниже МА, закрываем покупку на МА. Продаем выше МА, закрываем на МА. Если дают цену получше — пользуемся счастливым случаем, покупаем или продаем еще, усредняемся. Некоторые злые языки говорят, что усредняться нехорошо, но так мы много-то и не будем. Будем входить в сделку только при отклонениях на 1 ATR, 2 ATR и 3 ATR.

Пожалуй, еще момент. В прошлых тестах мы выяснили, что шорты работают гораздо хуже лонгов. Многие рынки — растущие по своей природе. Компании зарабатывают какую-то прибыль, растут. Кроме того, имеется инфляция, переоценка фондов и т. п. Да и ради бесплатного робота перетруждать себя не хочется. В общем, будем торговать только в лонг. Возьмем самое сладкое. Кто желает и в шорт тоже — персонально вам доделаю, но платно ;-) Как бы еще напакостить? А, я не выложу полные результаты тестов, не буду никак оптимизировать бота и не буду отвечать на вопросы и комментарии к этому посту. Ни на один не отвечу. Может, отдельным постом попозже…

 

Тесты

Тестировал на эфире к доллару за весь 2021 год. Брал минутки. В предыдущих сериях мы выяснили, что на мелких тайм-фреймах много рыночного шума и плохо с трендами. Что плохо для трендового бота, то хорошо для контр-трендового. Набьем себе карманы за счет этого рыночного шума!

Робот CounterStrike. Приходится раздавать бесплатно
Начало торгов. Лонги на падающем рынке. Большинство явно в профит.
 
Робот CounterStrike. Приходится раздавать бесплатно


Робот CounterStrike. Приходится раздавать бесплатно


Как видите, на этот раз число прибыльных сделок превышает 81%! Обращу также ваше внимание на число прибыльных сделок подряд. 74 прибыльных подряд, Карл!!! Потрясающие показатели. Это определенно фурор! Всех поздравляю! Всем профита!



Исходник

using System;
using System.Collections.Generic;
using OsEngine.Entity;
using OsEngine.Indicators;
using OsEngine.OsTrader.Panels;
using OsEngine.OsTrader.Panels.Attributes;
using OsEngine.OsTrader.Panels.Tab;

// Алгоритм контр-трендовый с усреднением. Торгуем к МА, входим 3 раза по отклонению на ATR, 2 * ATR и 3 * ATR.
// Закрываем все позиции, если достигли МА


namespace OsEngine.Robots.CounterTrend
{
    [Bot("CounterStrike")]

    public class CounterStrike : BotPanel
    {
        public CounterStrike(string name, StartProgram startProgram) : base(name, startProgram)
        {
            TabCreate(BotTabType.Simple);
            _tab = TabsSimple[0];

            _tab.CandleFinishedEvent += _tab_CandleFinishedEvent;

            SmaLength = CreateParameter("SMA Length", 50, 10, 50, 10);
            LengthAtr = CreateParameter("ATR Length", 20, 10, 50, 10);
            Volume = CreateParameter("Volume", 3, 1, 10, 1.0m);

            _atr = IndicatorsFactory.CreateIndicatorByName("ATR", name + "ATR", false);
            _atr = (Aindicator)_tab.CreateCandleIndicator(_atr, "Second");
            _atr.ParametersDigit[0].Value = LengthAtr.ValueInt;
            _atr.Save();
            _sma = IndicatorsFactory.CreateIndicatorByName("Sma", name + "Sma", false);
            _sma = (Aindicator)_tab.CreateCandleIndicator(_sma, "Prime");
            _sma.ParametersDigit[0].Value = SmaLength.ValueInt;
            _sma.Save();
            ParametrsChangeByUser += MyTrend_ParametrsChangeByUser;
        }

        private void MyTrend_ParametrsChangeByUser()
        {
            _atr.ParametersDigit[0].Value = LengthAtr.ValueInt;
            _atr.Reload();
            _sma.ParametersDigit[0].Value = SmaLength.ValueInt;
            _sma.Reload();
        }


        public StrategyParameterInt SmaLength;          // сколько свечек нужно для расчета бегущей средней SMA
        public StrategyParameterInt LengthAtr;          // сколько свечек нужно для расчета ATR
        public StrategyParameterDecimal Volume;         // объём для входа
        private BotTabSimple _tab;
        private Aindicator _atr;
        private Aindicator _sma;


        public override string GetNameStrategyType()
        {
            return "CounterStrike";
        }

        public override void ShowIndividualSettingsDialog()
        {

        }

        private void _tab_CandleFinishedEvent(List<Candle> candles)
        {
            if (_atr == null || _sma == null || _atr.DataSeries == null || _sma.DataSeries == null) return;

            decimal smaValue = _sma.DataSeries[0].Last;
            decimal atrValue = _atr.DataSeries[0].Last;
            if (smaValue == 0 || atrValue == 0) return;

            List<Position> positions = _tab.PositionsOpenAll;

            // нет позиций вообще - пытаемся купить в точке 1
            if (positions == null || positions.Count == 0)
            {
                _tab.BuyAtLimit(Volume.ValueDecimal, smaValue - atrValue);
                return;
            }
            // здесь у нас уже точно есть какие-то позиции


            // если находимся выше МА, закрываем все позиции
            if (_tab.PriceBestBid > smaValue)
            {
                for (int p = positions.Count - 1; p >= 0; p--)
                {
                    // налитая позиция
                    if (positions[p].State == PositionStateType.Open)
                    {
                        _tab.CloseAtMarket(positions[p], Volume.ValueDecimal);
                        continue;
                    }
                    if (positions[p].State == PositionStateType.Opening)
                    {
                        if (positions[p].WaitVolume == Volume.ValueDecimal)
                        {   // не налитая позиция
                            _tab.CloseAllOrderToPosition(positions[p]);
                            continue;
                        } 
                        else
                        {   // частично налитая позиция
                            _tab.CloseAtMarket(positions[p], positions[p].OpenVolume);
                            continue;
                        }
                    }
                }
            }

            // сравниваем число открытых позиций с числом налитых позиций
            int openPositionsCount = 0;
            foreach (Position p in positions)
            {
                if (p.State == PositionStateType.Open)
                {
                    ++openPositionsCount;
                }
            }

            // если число открытых позиций = число налитых позиций, не открыть ли нам очередную позицию?
            if (positions.Count == openPositionsCount)
            {
                if (openPositionsCount == 1)
                {
                    _tab.BuyAtLimit(Volume.ValueDecimal, smaValue - 2 * atrValue);
                    return;
                }
                else if (openPositionsCount == 2)
                {
                    _tab.BuyAtLimit(Volume.ValueDecimal, smaValue - 3 * atrValue);
                    return;
                }
            }

        }   // _tab_CandleFinishedEvent()
    }
}

 

Как воспользоваться всем этим счастьем? Код написан на C# под платформу OS Engine. Если вы забанены в Гугле и Яндексе, не можете сами откомпилировать робота, обратитесь в чат сообщества OS Engine в Телеграм: https://t.me/o_s_a_chat

 

Сайт самой платформы OS Engine: https://o-s-a.net/

 

15 Комментариев
  • Laukar
    22 октября 2021, 13:48
    А что все замазал-то? Непонятно че раздаешь)  Какая годовая доходность?
  • svgr
    22 октября 2021, 13:54
    Занимайся.
    Пока не добьёшься не более 6 убыточных подряд.
  • Kotcher
    22 октября 2021, 14:14
    Интересно, какой бы был результат, если бы торговля была с самого начала графика на скрине.
  • GoodBargains
    22 октября 2021, 14:24
    Какая то навязчивая реклама
    • GOLD
      22 октября 2021, 14:43
      GoodBargains,  автор недавно переехал из Новосибирска в Краснодар… а юг РФ — это огромная силосная яма, на дне которой бултыхается горячий, густой навар из вранья, хитрости, чванства, лени и покуизма))

      горячее солнце вредно для мозга серверян))
  • Sprite
    22 октября 2021, 14:27
    «Я вам что ли должен приплачивать, чтоб вы моих роботов попробовали?!»
    Именно так! Гонять примитивных роботов на истории вы научились, теперь хотите чтобы мы забесплатно их на реале пробовали?
  • Diamond
    22 октября 2021, 14:37
    Тоже тестил эту систему, только отношение профит/лосс было не айс. Возможно, по этой причине теперь её бесплатно раздаёшь.
  • Без стопов? Рано или поздно будет что-то типа такого:




  • ака Tуземец
    22 октября 2021, 15:06
     и не буду отвечать на вопросы и комментарии к этому посту

    а и не надо )) и бота такого тоже не надо.ни за деньги ни бесплатно
  • bocha
    22 октября 2021, 15:10
    Правильно!
    Стопы — зло, тренды — графический обман.
    Только мартин, только хардкор!
    • ака Tуземец
      22 октября 2021, 15:18
      bocha, точно, тренды -графический обман ))



  • Павел
    22 октября 2021, 15:49
    Минутки в крипте? Пфффф… комиссию учитвали? Там будет если не убыток по итогу, то в лучшем случае 0
  • Пафос Респектыч
    22 октября 2021, 17:21
    Я вам что ли должен приплачивать, чтоб вы моих роботов попробовали?!

    Не приплачивать, а нормально так платить я бы сказал 
  • master1
    23 октября 2021, 11:42
    Вопрос. Почему так напали на человека?
  • ezomm
    25 октября 2021, 00:23
    Интересно потестить аллигатора Вильямса Б.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн