Первый скрипт (API)

Создадим первый скрипт, он будет покупать по рынку и выставлять стоп и тейк на расстоянии 0.5%.

Запустим Visual Studio, создадим новый проект MyLib если еще не создан.
Как создавать проект смотрите в статье Создание проекта в Visual Studio.

Добавим в проект библиотеки TSLab. Они лежат в папке установки TSLab. Для этого:

  1. Кликнем правой кнопкой мыши по References → Add Reference…

  2. Перейдем во вкладку Browse, кликнем по кнопке Browse…

  3. В открывшемся диалоге перейдем в папку программы TSLab:
    - для TSLab 2.1: C:\Program Files (x86)\TSLab 2.0
    - для TSLab 2.2: C:\Program Files\TSLab\TSLab 2.2

  4. Выберем следующий файлы:

    1. TSLab.Script.dll

    2. TSLab.Script.Handlers.dll

    3. TSLab.DataSource.dll

    4. 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

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

Дополнительно

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

  2. В TSLab можно подключать библиотеку dll вместо файла скрипта.