Первый скрипт (API)
Создадим первый скрипт, он будет покупать по рынку и выставлять стоп и тейк на расстоянии 0.5%.
Запустим Visual Studio, создадим новый проект MyLib если еще не создан.
Как создавать проект смотрите в статье Создание проекта в Visual Studio.
Добавим в проект библиотеки TSLab. Они лежат в папке установки TSLab. Для этого:
Кликнем правой кнопкой мыши по References → Add Reference…
Перейдем во вкладку Browse, кликнем по кнопке Browse…
В открывшемся диалоге перейдем в папку программы TSLab:
- для TSLab 2.1: C:\Program Files (x86)\TSLab 2.0
- для TSLab 2.2: C:\Program Files\TSLab\TSLab 2.2Выберем следующий файлы:
TSLab.Script.dll
TSLab.Script.Handlers.dll
TSLab.DataSource.dll
TSLab.Utility.dll.

Также вы можете загрузить эти файлы в проект используя инструмент NuGet доступный в Visual Studio.
В обозревателе решений щелкните правой кнопкой мыши узел Ссылки и выберите пункт Управление пакетами NuGet.

Выберите nuget.org в качестве источника пакетов, перейдите на вкладку Обзор, выполните поиск по запросу TSLab, выберите необходимые пакеты в списке и нажмите кнопку Установить.

Добавим новый класс BuyScript, для этого правой кнопкой мыши щелкнуть по названию проекта, выбрать Add → Class… и написать название класса BuyScript.cs.

В редакторе кода напишем следующий код:
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 BuyScript : IExternalScript { public void Execute(IContext ctx, ISecurity sec) { 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 { longPos.CloseAtStop(i + 1, longPos.EntryPrice * 0.995, "LXS"); longPos.CloseAtProfit(i + 1, longPos.EntryPrice * 1.005, "LXP"); } } } } }
Мы создали класс BuyScript от интерфейса IExternalScript. В этом интерфейсе описан метод Execute, который вызывается каждый раз при запуске скрипта в TSLab.
Метод имеет два параметра:
IContext - содержит общий контекст скрипта, нужен для рисования графиков, кэширования, получения торговой статистики.
ISecurity - позволяет работать с инструментом, содержит свечи, тики, можно открывать/закрывать позиции.
В теле метода мы написали перебор по всем барам через цикл for.
Методом sec.Positions.GetLastActiveForSignal получаем последнюю активную позицию и записываем ее в переменную longPos. Далее проверяем эту переменную, если позиции нету (longPos == null), то покупаем по рынку (sec.Positions.BuyAtMarket), если же позиция существует, то выставляем стоп для позиции (longPos.CloseAtStop) и тейк-профит (longPos.CloseAtProfit).
Тут важно заметить что позицию мы открываем с названием сигнала "LE" и получаем позицию по этому же названию (sec.Positions.GetLastActiveForSignal("LE", i)). В один момент может быть открыта только одна позиция с одинаковым названием.
sec.Positions - доступ к позициям
sec.Positions.GetLastActiveForSignal("LE", i) - получить последнюю активную позицию с сигналом "LE".
sec.Positions.BuyAtMarket(i + 1, 1, "LE") - открыть позицию по рынку с сигналом "LE"
longPos.CloseAtStop - поставить стоп-лосс.
longPos.CloseAtProfit - поставить тейк-профит.
Нажмем F6, студия проверит ошибки и если их нет, то соберет проект.
Теперь перейдем к TSLab. Создадим новый скрипт, добавим источник, блок Внешний скрипт и подключим наш файл BuyScript.cs

Нажмем Сохранить и выполнить. Если все сделали правильно, то отобразится график со сделками.

Дополнительно
Если в скрипте используются дополнительные библиотеки или классы, то их тоже надо добавить в TSLab в блок Внешний скрипт.
В TSLab можно подключать библиотеку dll вместо файла скрипта.