Написание скриптов на 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 - основная панель } } }