Рассмотрим пример динамического включения и отключения индикатора для источника BotTabScreener. Данный подход может понадобиться, когда Вы создали для источника множество индикаторов, но фактически используются только некоторые из них. Отключение индикаторов в таком формате позволяет уменьшить нагрузку на робота во время тестирования, оптимизации и реальных торгов.
1. Каждый индикатор содержит свойство IsOn, регулировать надо его.
Если в это свойство передать False и вызвать у индикатора метод Reload(), индикатор перестанет считаться каждое обновление свечи, а также индикатор перестанет прорисовываться на графике.
Код блокировки индикатора на примере скользящей средней будет такой:
КОД
_sma.IsOn = False;
_sma.Reload();
КОНЕЦ КОДА
2. Где исходники примера? Открываем робота BlockIndicatorsOnScreenerSample.
На гитХаб исходник примера находится здесь:
Внутри проекта:
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. В это поле потом мы положим объект источника и сможем обращаться к нему из любой части робота. Так удобнее.
- Параметры. Чуть позже поговорим про каждый.
- Создание источника BotTabScreener. Сохранение источника. Подписка на событие завершения свечи по инструментам скринера.
- Создание индикаторов.
- Создание параметров.
4. Настройки и параметры.
Создание параметров в конструкторе. Выглядит это так:
КОД
_bollingerIsOn = CreateParameter("Bollinger is ON", true);
_smaIsOn = CreateParameter("Sma is ON", true);
_atrIsOn = CreateParameter("Atr is ON", true);КОНЕЦ КОДА
В окне параметров робота это выглядит так:
- Bollinger is ON – включен ли индикатор Bollinger или выключен. True – Включен.
- Sma is ON – включен ли индикатор Sma или выключен. True – Включен.
- Atr is ON – включен ли индикатор Atr или выключен. True – Включен.
5. Включение и выключение расчёта индикаторов.
Включение выключение происходит на каждом инструменте по отдельности в момент обработки события завершения свечи по инструменту. Т.е. настройки в параметрах начнут работать, когда в робота пойдут данные.
В исходном коде это выглядит так:
КОД
private void _screenerSource_CandleFinishedEvent(Listcandles, 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();
}
}
КОНЕЦ КОДА
Картинкой:
- Обработчик события завершения свечи по любому инструменту, подключенному в скринер.
- Код, в котором мы запрашиваем индикаторы из источника.
- Вызов изменения свойства IsOn у индикатора Bollinger. В данном случае вызывается, только если значение не совпадает с параметром, который выбрал пользователь.
- Вызов изменения свойства IsOn у индикатора SMA. В данном случае вызывается, только если значение не совпадает с параметром, который выбрал пользователь.
- Вызов изменения свойства IsOn у индикатора ATR. В данном случае вызывается, только если значение не совпадает с параметром, который выбрал пользователь.
Удачных алгоритмов!
Комментарии открыты для друзей!
Гайд: 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
Подробнее https://smart-lab.ru/compan...







