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

1. Каждый индикатор содержит свойство IsOn – регулировать надо его.
Если в это свойство передать 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