Первый скрипт (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 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

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

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