Рассмотрим пример динамического включения и отключения индикатора для источника BotTabSimple. Данный подход может понадобиться, когда Вы создали для источника множество индикаторов, но фактически используются только некоторые из них. Отключение индикаторов в таком формате позволяет уменьшить нагрузку на робота во время тестирования, оптимизации и реальных торгов.
Если в это свойство передать False и вызвать у индикатора метод Reload(), индикатор перестанет считаться каждое обновление свечи. А также индикатор перестанет прорисовываться на графике.
Код блокировки индикатора на примере скользящей средней будет такой:
КОД
_sma.IsOn = False; _sma.Reload();
КОНЕЦ КОДА
На гитХаб исходник примера находится здесь:
Внутри проекта:
КОД
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"; }
КОНЕЦ КОДА
В картинке:
Создание параметров в конструкторе. Выглядит это так:
КОД
_bollingerIsOn = CreateParameter("Bollinger is ON", true); _smaIsOn = CreateParameter("Sma is ON", true); _atrIsOn = CreateParameter("Atr is ON", true);
КОНЕЦ КОДА
В окне параметров робота это выглядит так:
Для этого в роботе сделан отдельный метод, который называется 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(); } }
КОНЕЦ КОДА
Картинкой:
Удачных алгоритмов!
Комментарии открыты для друзей!
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