Для изменения размера нажмите или перетащите

Индикаторы

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

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

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

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

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

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

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

    C#
    // вычисляем новое положение относительно друг друга
    var isShortLessThenLong = ShortSma.GetCurrentValue() < LongSma.GetCurrentValue();
    
    // если произошло пересечение
    if (_isShortLessThenLong != isShortLessThenLong)
    {
        // если короткая меньше чем длинная, то продажа, иначе, покупка.
        var direction = isShortLessThenLong ? Sides.Sell : Sides.Buy;
    
        // регистрируем заявку
        var volume = Position == 0 ? Volume : Position.Abs().Min(Volume) * 2;
        var price = candle.ClosePrice + ((direction == Sides.Buy ? Security.PriceStep : -Security.PriceStep) ?? 1);
        RegisterOrder(this.CreateOrder(direction, price, volume));
    
        // запоминаем текущее положение относительно друг друга
        _isShortLessThenLong = isShortLessThenLong;
    }