Перейти к содержанию

Как использовать индикаторы в сиБотах

В этой статье и соответствующем видео мы продемонстрируем, как вы можете ссылаться на пользовательские индикаторы и использовать их в своих сиБотах. Для этого мы разработаем торговый алгоритм, который использует выходные данные примера пользовательского индикатора для выполнения торговых операций.

Создайте нового сиБота

Чтобы увидеть все пользовательские индикаторы, установленные на вашем компьютере в данный момент, переключитесь в приложение Algo и перейдите на вкладку Индикаторы.

Если вы видите здесь один или несколько пользовательских индикаторов, это означает, что вы можете свободно использовать их в любых других своих алгоритмах. Для этого руководства мы будем использовать индикатор Sample SMA и разработаем сиБота, который торгует на основе направления простой скользящей средней.

Сначала мы создадим нового сиБота и переименуем его во что-то информативное, например "SMA Robot". Наш сиБот будет открывать сделку на покупку, когда SMA становится восходящей, и открывать сделку на продажу, когда SMA становится нисходящей. Наш сиБот не будет хеджировать свои позиции, что означает, что противоположные позиции будут закрываться при каждом новом сигнале.

Инициализация индикатора

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

  1. Нажмите кнопку Управление ссылками.
  2. Найдите индикатор, на который вы хотите сослаться, в открывшемся окне.
  3. Установите флажок рядом с индикатором, на который вы хотите сослаться.
  4. Нажмите Применить.

После того как ссылка на индикатор добавлена, мы можем создать переменную экземпляра его типа.

1
SampleSMA _sma;

Примечание

Тип индикатора должен совпадать с именем класса индикатора. Оно может отличаться от имени файла индикатора.

Следующий шаг — инициализировать индикатор в методе OnStart(). Однако перед этим мы добавим параметр к сиБоту, который позволит нам настроить периоды, используемые пользовательским индикатором SMA.

1
2
[Parameter(DefaultValue = 14)]
public int Periods { get; set; }

Мы можем использовать метод Indicators.GetIndicator<>() для инициализации любых пользовательских индикаторов, на которые мы ссылаемся. Нам нужно определить тип индикатора и передать параметры индикатора через запятую.

Примечание

Параметры необходимо передавать в том порядке, в котором они объявлены в классе индикатора.

В нашем случае тип — SampleSMA, и мы передадим исходные значения этого индикатора, которыми в данном случае являются цены закрытия баров, и параметр Period.

1
_sma = Indicators.GetIndicator<SampleSMA>(Bars.ClosePrices, Periods);

Реализация торговой логики

После инициализации индикатора мы можем реализовать нашу торговую логику. Наш пользовательский индикатор SMA сохраняет значения скользящей средней в коллекции Results. Коллекция Results имеет два полезных метода: IsRising() и IsFalling(). Эти методы позволяют нам узнать, растут или падают результаты индикатора.

Мы будем использовать эти методы для реализации наших торговых условий.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override void OnBarClosed()
{
    if(_sma.Result.IsRising())
    {        

    }
    else if(_sma.Result.IsFalling())
    {

    }
}

Теперь мы заполним наши операторы if. Когда скользящая средняя растет, мы закроем все позиции на продажу и откроем позицию на покупку. Напротив, когда скользящая средняя падает, мы закроем все позиции на покупку и откроем позицию на продажу.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
protected override void OnBarClosed()
{
    if(_sma.Result.IsRising())
    {
        Close(TradeType.Sell);
        Open(TradeType.Buy);
    }
    else if(_sma.Result.IsFalling())
    {
        Close(TradeType.Buy);
        Open(TradeType.Sell);            
    }
}

В нашем коде мы использовали два новых метода, которые API не предоставляет по умолчанию. Метод Open() открывает новые позиции на основе заданного направления и объема. Метод Close() закрывает все позиции заданного направления.

Вот как определяется метод Open().

1
2
3
4
5
private void Open(TradeType tradeType)
{
    if(Positions.Count == 0)
        ExecuteMarketOrder(tradeType, SymbolName, Volume, InstanceId);
}

Чтобы выполнить ордер внутри метода Open(), нам также необходимо добавить параметр Volume.

1
2
[Parameter(DefaultValue = 10000)]
public int Volume { get; set; }

Осталось только определить метод Close().

1
2
3
4
5
private void Close(TradeType tradeType)
{
    foreach (var position in Positions.Where(p => p.TradeType == tradeType))
        position.Close();
}

Проведение бэктестинга

Как всегда, прежде чем позволить сиБоту торговать от нашего имени, мы тщательно проведем его бэктестинг. Чтобы сделать то же самое, добавьте экземпляр, а затем переключитесь на вкладку Бэктестинг.

Чтобы протестировать наш сиБот еще тщательнее, мы добавим пользовательский индикатор, на который мы ссылались, на график, к которому прикреплен экземпляр, и проверим, совпадают ли точки входа в позицию с выходными данными индикатора.

Чтобы узнать больше об использовании и разработке сиБотов, изучите другие разделы документации и подпишитесь на наш канал YouTube, чтобы получать уведомления о публикации новых видео.

В этой статье и сопровождающем ее видео мы покажем, как вы можете ссылаться на пользовательские индикаторы и использовать их в своих сиБотах. Для этого мы разработаем торговый алгоритм, который использует выходные данные готового пользовательского индикатора для выполнения торговых операций.

Создание нового сиБота

Чтобы увидеть все пользовательские индикаторы, установленные на вашем компьютере, переключитесь на приложение Algo и перейдите в раздел «Индикаторы»