rss

Профиль компании

Финансовые компании

Блог компании Os_Engine | Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18

Рассмотрим пример динамического включения и отключения индикатора для источника BotTabScreener. Данный подход может понадобиться, когда Вы создали для источника множество индикаторов, но фактически используются только некоторые из них. Отключение индикаторов в таком формате позволяет уменьшить нагрузку на робота во время тестирования, оптимизации и реальных торгов.

Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18 

1. Каждый индикатор содержит свойство IsOn, регулировать надо его.

Если в это свойство передать False и вызвать у индикатора метод Reload(), индикатор перестанет считаться каждое обновление свечи, а также индикатор перестанет прорисовываться на графике.

Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18 

Код блокировки индикатора на примере скользящей средней будет такой:

КОД

_sma.IsOn = False;
          _sma.Reload();

КОНЕЦ КОДА

 

2. Где исходники примера? Открываем робота BlockIndicatorsOnScreenerSample.

На гитХаб исходник примера находится здесь:

https://github.com/AlexWan/OsEngine/blob/master/project/OsEngine/Robots/TechSamples/BlockIndicatorsOnScreenerSample.cs

Внутри проекта:

Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18 

 

3. Конструктор и сервисный код.

КОД

private BotTabScreener _screenerSource;

        private StrategyParameterBool _bollingerIsOn;
        private StrategyParameterBool _smaIsOn;
        private StrategyParameterBool _atrIsOn;

        public BlockIndicatorsOnScreenerSample(string name, StartProgram startProgram) : base(name, startProgram)
        {
            TabCreate(BotTabType.Screener);
            _screenerSource = TabsScreener[0];
            _screenerSource.CandleFinishedEvent += _screenerSource_CandleFinishedEvent;

            _screenerSource.CreateCandleIndicator(1, "Bollinger", null, "Prime");
            _screenerSource.CreateCandleIndicator(2, "Sma", null, "Prime");
            _screenerSource.CreateCandleIndicator(3, "ATR", null, "Second");

            _bollingerIsOn = CreateParameter("Bollinger is ON", true);

            _smaIsOn = CreateParameter("Sma is ON", true);

            _atrIsOn = CreateParameter("Atr is ON", true);

            Description = "Example showing the blocking of indicators for calculation on BotTabScreener source";
        }

КОНЕЦ КОДА

В картинке:

Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18

  1. Поле для хранения источника BotTabScreener. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.
  2. Параметры. Чуть позже поговорим про каждый.
  3. Создание источника BotTabScreener. Сохранение источника. Подписка на событие завершения свечи по инструментам скринера.
  4. Создание индикаторов.
  5. Создание параметров.

 

4. Настройки и параметры.

Создание параметров в конструкторе. Выглядит это так:

КОД

_bollingerIsOn = CreateParameter("Bollinger is ON", true);

            _smaIsOn = CreateParameter("Sma is ON", true);

            _atrIsOn = CreateParameter("Atr is ON", true);

КОНЕЦ КОДА

В окне параметров робота это выглядит так:

Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18 

  1. Bollinger is ON – включен ли индикатор Bollinger или выключен. True – Включен.
  2. Sma is ON – включен ли индикатор Sma или выключен. True – Включен.
  3. Atr is ON – включен ли индикатор Atr или выключен. True – Включен.

 

5. Включение и выключение расчёта индикаторов.

Включение выключение происходит на каждом инструменте по отдельности в момент обработки события завершения свечи по инструменту. Т.е. настройки в параметрах начнут работать, когда в робота пойдут данные.

В исходном коде это выглядит так:

КОД

private void _screenerSource_CandleFinishedEvent(List<Candle> candles, BotTabSimple tab)
        {
            Aindicator bollinger = (Aindicator)tab.Indicators[0];
            Aindicator sma = (Aindicator)tab.Indicators[1];
            Aindicator atr = (Aindicator)tab.Indicators[2];

            if (_bollingerIsOn.ValueBool
               != bollinger.IsOn)
           {
               bollinger.IsOn = _bollingerIsOn.ValueBool;
               bollinger.Reload();
           }

           if (_smaIsOn.ValueBool
              != sma.IsOn)
           {
               sma.IsOn = _smaIsOn.ValueBool;
               sma.Reload();
           }

           if (_atrIsOn.ValueBool
               != atr.IsOn)
           {
               atr.IsOn = _atrIsOn.ValueBool;
               atr.Reload();
           }
        }

КОНЕЦ КОДА

Картинкой:

Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18 

  1. Обработчик события завершения свечи по любому инструменту, подключенному в скринер.
  2. Код, в котором мы запрашиваем индикаторы из источника.
  3. Вызов изменения свойства IsOn у индикатора Bollinger. В данном случае вызывается, только если значение не совпадает с параметром, который выбрал пользователь.
  4. Вызов изменения свойства IsOn у индикатора SMA. В данном случае вызывается, только если значение не совпадает с параметром, который выбрал пользователь.
  5. Вызов изменения свойства IsOn у индикатора ATR. В данном случае вызывается, только если значение не совпадает с параметром, который выбрал пользователь.

Удачных алгоритмов!

Комментарии открыты для друзей!

Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18

Гайд: https://smart-lab.ru/company/os_engine/blog/1024149.php

OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support

Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php

Пример динамического включения и отключения индикатора в источнике BotTabScreener. Индикаторы в OsEngine #18


UPDONW
Новый дизайн