Написание скриптов на API

Для того чтобы написать скрипт на TSLab API необходимо создать класс наследованный от интерфейса IExternalScript.

Данный интерфейс имеет следующую реализацию:

public interface IExternalScript : IExternalScriptBase, IStreamHandler, IHandler, IOneSourceHandler
{
    void Execute(IContext ctx, ISecurity sec);
}

Как видим, интерфейс имеет всего один метод Execute, который принимает два параметра.

IContext - содержит общий контекст скрипта, нужен для рисования графиков, кеширования.

ISecurity - позволяет работать с инструментом, содержит свечи, тики, можно работать с позициями.

Метод Execute вызывается каждый раз когда TSLab запускает пересчет скрипта.

Также можно использовать другие интерфейсы, они различаются только количеством инструментов в параметрах:

IExternalScript2 – на входе два инструмента (ISecurity)

IExternalScript3 – на входе три инструменты (ISecurity)

IExternalScript4 – на входе четыре инструмента (ISecurity)

IExternalScriptMultiSec – на входе массив инструментов (ISecurity)

Для написания скриптов можно использовать следующий шаблон:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.DataSource;

namespace MyLib
{
    public class MyScript : IExternalScript
    {
        public void Execute(IContext ctx, ISecurity sec)
        {
            // Находим последний сформировавшийся бар для расчетов
            var barsCount = sec.Bars.Count;
            if (!ctx.IsLastBarUsed)
            {
                barsCount--;
            }

            // Торговый цикл
            for (int i = ctx.TradeFromBar; i < barsCount; i++)
            {
                // Тут работа с позициями (sec.Positions)
            }

            // Если идет процесс оптимизации, то графики рисовать не нужно, это замедляет работу
            if (ctx.IsOptimization)
            {
                return;
            }

            // Прорисовка графиков
            // ctx.First - основная панель
        }
    }
}

Основный свойства и методы:

Last updated