Для изменения размера нажмите или перетащите
Индикаторы

S# стандартно предоставляет более 70 индикаторов технического анализа. Это позволяет не создавать с нуля нужные индикаторы, а использовать уже готовые. Кроме того можно создавать собственные индикаторы, взяв за основу существующие, как показано в разделе Собственный индикатор. Все базовые классы для работы с индикаторами, а также сами индикаторы находятся в пространстве имен StockSharp.Algo.Indicators.

Подключение индикатора в робот

  1. В самом начале нужно создать индикатор. Индикатор создается как и обычный .NET объект:

    C#
    var longSma = new SimpleMovingAverage { Length = 80 };
  2. Далее, необходимо заполнять его данными. Например, это может быть цена закрытия свечи:

    C#
    foreach (var candle in candles)
        longSma.Process((DecimalIndicatorValue)candle.ClosePrice);

    Индикатор принимает на вход IIndicatorValue. Некоторые из индикаторов оперируют простым числом, как, например, SimpleMovingAverage. Другим требуются полностью свеча, как, например, MedianPrice. Поэтому входящие значения необходимо приводить или к DecimalIndicatorValue или к CandleIndicatorValue. Результирующее значение индикатора работает по тем же правилам, что и входящее значение.

  3. Для того, чтобы получить текущее значение индикатора, используется метод GetValueT:

    C#
    // вычисляем новое положение относительно друг друга
    var isShortLessThenLong = ShortSma.GetValue<decimal>(0) < LongSma.GetValue<decimal>(0);
    
    // если произошло пересечение
    if (_isShortLessThenLong != isShortLessThenLong)
    {
        // если короткая меньше чем длинная, то продажа, иначе, покупка.
        var direction = isShortLessThenLong ? OrderDirections.Sell : OrderDirections.Buy;
    
        // создаем заявку
        var order = this.CreateOrder(direction, Security.GetMarketPrice(direction), Volume);
    
        // регистрируем заявку
        RegisterOrder(order);
    
        // запоминаем текущее положение относительно друг друга
        _isShortLessThenLong = isShortLessThenLong;
    }