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

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

Интерфейс IContext

IsLastBarClosed

IsLastBarUsed

IsFixedBarsCount

Для определения количества баров в расчете.

IsOptimization

Показывает, что идет процесс оптимизации.

TradeFromBar

Указывает с какого бара начинать торговлю.

ScriptResult

Выводит результат в таблицу оптимизации.

GetData(...)

Работа с кешем. Используется для расчета индикаторов.

LoadObject(...)

StoreObject(...)

Работа с кешем скрипта, который не стирается между расчетами.

LoadGlobalObject(...)

StoreGlobalObject(...)

Работа с глобальным кешем, который является общим между различными агентами и скриптами.

Данные в кеше могут быть стерты, если программе не хватает памяти.

Log(...)

Вывод логов.

Recalc(...)

Запустить заново скрипт.

Интерфейс ISecurity

FinInfo

Текущие данные по ценной бумаге (bid, ask, цена последней сделки, открытый интерес и т.д.).

Bars

Список свечей.

OpenPrices

HighPrices

LowPrices

ClosePrices

Volumes

Список цен открытия.

Список максимумов.

Список минимумов.

Список цен закрытия.

Список объемов.

Interval

IntervalBase

IntervalInstance

Интервал ценной бумаги.

LotSize

LotTick

Margin

Tick

Decimals

Размер лота для ценной бумаги.

Размер изменения лота для ценной бумаги.

Коэффициент маржи для ценной бумаги.

Минимально возможное изменение цены.

Количество десятичных знаков для цены ценной бумаги.

Positions

Список позиций.

Commission

Делегат для расчета комиссии.

InitDeposit

Начальный депозит.

IsRealtime

Показывает находится ли агент в режиме реальной торговли.

Symbol

Символ ценной бумаги.

CompressTo(...)

CompressToPriceRange(...)

CompressToVolume(...)

Decompress(...)

Сжатие и разжатие свечей.

GetBuyQueue(...)

GetSellQueue(...)

UpdateQueueData(...)

Получить очередь заявок.

GetTrades(...)

Получить список сделок.

RoundPrice(...)

RoundShares(...)

Округление входящей цены до минимального тика.

Округление входящего количества до минимального шага лота.

Last updated