Изображение блога
OS_Engine_team
OS_Engine_team Блог компании Os_Engine
18 апреля 2025, 19:21

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

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

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

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

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

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

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

КОД

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

КОНЕЦ КОДА

 

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

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

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

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

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

 

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

КОД

private BotTabSimple _tab;

  private Aindicator _bollinger;
  private Aindicator _sma;
  private Aindicator _atr;

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

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

      _bollinger = IndicatorsFactory.CreateIndicatorByName("Bollinger", name + "Bollinger", false);
      _bollinger = (Aindicator)_tab.CreateCandleIndicator(_bollinger, "Prime");

      _sma = IndicatorsFactory.CreateIndicatorByName("Sma", name + "sma", false);
      _sma = (Aindicator)_tab.CreateCandleIndicator(_sma, "Prime");

      _atr = IndicatorsFactory.CreateIndicatorByName("ATR", name + "atr", false);
      _atr = (Aindicator)_tab.CreateCandleIndicator(_atr, "AtrArea");

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

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

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

      StopOrActivateIndicators();

      ParametrsChangeByUser += BlockIndicatorsSample_ParametrsChangeByUser;

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

КОНЕЦ КОДА

В картинке:

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

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

 

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

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

КОД

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

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

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

КОНЕЦ КОДА

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

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

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

 

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

Для этого в роботе сделан отдельный метод, который называется StopOrActivateIndicators.

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

КОД

private void StopOrActivateIndicators()
        {
            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();
            }
        }

КОНЕЦ КОДА

Картинкой:

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

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

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

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

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

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

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

0 Комментариев

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

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