Написание скриптов на 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(...) | Округление входящей цены до минимального тика. Округление входящего количества до минимального шага лота. |