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

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

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

Важно: для TSLab версии от 2.2 нужно использовать проект .Net Standard2.0, .Net Standard2.1, Net6 или выше.

Добавим в проект библиотеки 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. Выберем следующий файлы: 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 ctx и ISecurity sec.

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 вместо файла скрипта.

Last updated