Стандартные индикаторы и обработчики

В TSLab API есть стандартные часто используемые индикаторы. Их можно без труда использовать в своих скрипта. Эти индикаторы находятся в двух местах:

TSLab.Script.Helpers.Series - класс содержит статичные методы расчета индикаторов, например SMA, EMA, Highest, Lowest, ATR, BollingerBands и другие.

TSLab.Script.Handlers - пространство имен, в котором содержатся классы обработчиков, например MACD, ParabolicSAR, TrailStop. Все эти обработчики отображаются в визуальном редакторе TSLab в виде кубиков.

Индикаторы из класса Series

В классе Series содержатся некоторые индикаторы, например SMA, EMA, Highest, Lowest, ATR, BollingerBands и другие.

К примеру, если нужно посчитать индикатор SMA, то просто вызываем метод SMA и передаем первым параметром список цен по которым нужно считать (sec.ClosePrices), а вторым параметром будет период расчета:

var sma = Series.SMA(sec.ClosePrices, 100);

Напишем скрипт, который выводит на график индикаторы SMA и EMA от цен закрытия:

using TSLab.Script;
using TSLab.Script.Helpers;
using TSLab.Script.Handlers;

namespace MyLib
{
    public class IndicatorsMA : IExternalScript
    {
        public void Execute(IContext ctx, ISecurity sec)
        {
            var period = 100;
            var sma = Series.SMA(sec.ClosePrices, period); // расчет индикатора SMA
            var ema = Series.EMA(sec.ClosePrices, period); // расчет индикатора EMA

            // Построение графиков
            ctx.First.AddList("SMA", sma, ListStyles.LINE, ScriptColors.Red, LineStyles.SOLID, PaneSides.RIGHT);
            ctx.First.AddList("EMA", ema, ListStyles.LINE, ScriptColors.Blue, LineStyles.SOLID, PaneSides.RIGHT);
        }
    }
}

Красная линия - это индикатор SMA, синяя линия - это EMA.

Индикаторы и обработчики из Handlers

TSLab.Script.Handlers - пространство имен, в котором содержатся классы обработчиков, например MACD, ParabolicSAR, TrailStop. Все эти обработчики отображаются в визуальном редакторе TSLab в виде кубиков.

В отличии от индикаторов из Series, нужно сначала создать объект индикатора а потом вызвать метод Execute для расчета значений индикатора.

Исходные коды индикаторов:

https://github.com/TSLab-Dev/Handlers

Для примера напишем скрипт, который считает и выводит на график индикатор ParabolicSAR:

using TSLab.Script;
using TSLab.Script.Helpers;
using TSLab.Script.Handlers;

namespace MyLib
{
    public class IndicatorParabolicSAR : IExternalScript
    {
        public void Execute(IContext ctx, ISecurity sec)
        {
            var parabolic = new ParabolicSAR() // Создаем класс индикатора ParabolicSAR
            {
                Context = ctx,
                AccelerationMax = 0.2,
                AccelerationStart = 0.02,
                AccelerationStep = 0.02
            };
            var list = parabolic.Execute(sec); // Делаем расчет индикатора


            // Выводим на график
            var line = ctx.First.AddList("Parabolic SAR", list, ListStyles.LINE, ScriptColors.Red, LineStyles.DOT, PaneSides.RIGHT);
            line.Thickness = 2; // Толщина линии 2
        }
    }
}

Еще для примера напишем скрипт, который покупает по рынку и выставляем трейл-стоп. Стоп будет считаться готовым классом TrailStop из TSLab.Script.Handlers:

using TSLab.Script;
using TSLab.Script.Handlers;

namespace MyLib
{
    public class HandlerTrailStop : IExternalScript
    {
        public void Execute(IContext ctx, ISecurity sec)
        {
            var trail = new TrailStop // Создаем класс обработчика TrailStop
            {
                StopLoss = 0.5,
                TrailEnable = 0.5,
                TrailLoss = 0.5,
            };

            for (int i = 0; i < ctx.BarsCount; i++)
            {
                var longPos = sec.Positions.GetLastActiveForSignal("LE", i);

                if (longPos == null)
                {
                    sec.Positions.BuyAtMarket(i + 1, 1, "LE");
                }
                else
                {
                    var stop = trail.Execute(longPos, i); // Расчет трейл-стопа
                    longPos.CloseAtStop(i + 1, stop, "LX");
                }
            }
        }
    }
}

Как видим, происходит сделка и сразу выставляется трейл-стоп (красная линия), которая подтягивается вслед за ценой:

Last updated