Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Для написания скриптов и индикаторов для TSLab будем использовать среду разработки Visual Studio. Версия Community является бесплатной и по функционалу она нам полностью подходит.
Итак, переходим на сайт Visual Studio, и скачиваем последнюю версию студии.
При установке надо выбрать компонент Разработка классических приложение .NET.
На вкладке Языковые пакеты можно выбрать язык по желанию.
Далее нажимаем кнопку Установить.
При первом запуске Visual Studio можно выбрать параметры разработки и тему оформления. Выберем Visual C# и светлую тему.
TSLab может использовать индикаторы написанные на .NET и собранные в библиотеку .dll.
Для примера напишем индикатор, который считает цену OHLC4 по формуле:
Создадим новый проект в Visual Studio и назовем MyHandlers. Как создавать проект смотрите в статье Создание проекта в Visual Studio.
В проект добавим библиотеки TSLab.Script.dll, TSLab.Script.Handlers.dll, TSLab.DataSource.dll, TSLab.Utility.dll. Создадим новый класс OHLC4 и напишем следующий код:
Мы создали класс OHLC4 от интерфейса IBar2DoubleHandler. Этот интерфейс реализует один метод Execute, который принимает на вход инструмент и выдает список чисел.
У класса мы указали атрибут HandlerCategory, с названием MyHandlers. Это название категории куда будет помещен наш индикатор в TSLab. HelperName - указывает название индикатора, которое будет отображаться с TSLab, можно написать любое другое название.
В методе Execute мы сделали расчет значения OHLC4 простым выражением:
Теперь можно собрать проект нажав F6. Если все сделали правильно, то студия сохранит, соберет проект и создаст файл MyHandlers.dll в папке проекта \bin\Debug.
Этот файл надо скопировать в папку TSLab: %APPDATA%\..\Local\TSLab\TSLab 2.0\Handlers
Теперь запустим TSLab и в режиме редактора должен отобразиться наш новый индикатор.
Теперь подключим наш новый индикатор, выберем инструмент и запустим.
Видим что на графике отобразилась синяя линия, это и есть цена OHLC4.
Чтобы каждый раз вручную не копировать файл .dll можно в студии прописать команду для автоматического копирования. Файл будет сам копироваться после каждой сборки проекта.
Но следует помнить, что перед сборкой нужно закрыть TSLab, т.к. файл не сможет перезаписаться.
Команда (устарело): xcopy /Y MyHandlers.dll "%APPDATA%\..\Local\TSLab\TSLab 2.0\Handlers"
Команда (новая): xcopy /Y "$(TargetDir)$(TargetFileName)" "%LOCALAPPDATA%\TSLab\TSLab 2.0\Handlers"
Запускаем Visual Studio, выбираем Создание проекта.
Мы будем создавать обычную библиотеку на языке C#, поэтому выберем шаблон Библиотека классов (Майкрософт).
Далее в поле Имя проекта укажем название, например MyLib. Также можно указать расположение проекта.
Укажем папку C:\TSLabHandlers\. Потом нам надо будет подключать скрипты в TSLab из этой папки.
После этого студия создаст проект со стандартным шаблоном на C#.
Для того чтобы собрать проект нужно нажать F6, при этом студия сохранит изменения, соберет библиотеку и выложит ее в папку проекта …/bin/Debug.
TSLab позволяет делать отладку скриптов в реальном времени. Это очень удобно. Например, можно посмотреть какое значение переменной в определенном месте, или даже изменить это значение.
Для начала надо включить режим отладки в TSLab. Для этого открыть Настройки, перейти во вкладку Оптимизация скриптов, отметить галочку Отладка скриптов.
Нажать Ок и перезагрузить TSLab.
Когда TSLab запускает скрипт в обработку, он передает управление методу Execute нашего скрипта. Поэтому поставим точку остановки сразу на вход этого метода. Хотя точку можно ставить в любом месте метода, там где мы хотим чтобы студия остановила процесс работы скрипта и передала нам управление.
Теперь присоединимся к процессу TSLab, для этого в меню Debug выбрать Attach to Process... (или Ctrl+Alt+P). В поиске наберем 'tslab' и выберем процесс TSLabApp64.exe.
После этого студия присоединится к процессу TSLab и теперь, если перейти в TSLab и нажать выполнить, то студия передаст нам управление в выбранной точке остановки.
В данном режиме можно посмотреть значения текущих переменных (вкладка Locals). Во вкладке Watch можно написать свои выражения или поменять значения переменных.
Горячие клавиши при отладке:
F10 - следующий шаг
F11 - следующий шаг с заходом в метод
Shift + F11 - выход из метода на следующий шаг
F5 - продолжить до следующей точки остановки
Shift + F5 - прекратить отладку
TSLab API – это набор готовых библиотек на платформе .NET, которые позволяют писать торговые скрипты и индикаторы для TSLab.
Если вы строите стратегии с помощью кубиков, то TSLab переводит вашу стратегию на язык C# и исполняет ее. И бывает, что возможностей кубиков недостаточно для реализации ваших задумок, тогда имеет смысл перейти на написание кода. Через код можно реализовать очень многое.
TSLab API позволяет писать стратегии, индикаторы, работать с графикой, создавать контрольную панель, работать с позициями, с тиками, со стаканом, с ордерами напрямую.
Можно писать стратегии на платформе .NET Framework от 4.7.2 и выше.
На .NET можно писать на языках C#, VB.NET. В примерах мы будем использовать C#.
В TSLab можно подключать код стратегий в виде файлов .cs и в виде библиотек .dll.
- документация API (описание классов и интерфейсов).
При выполнении скрипта можно писать свои логи. Для этого есть метод IContext.Log.
Пример скрипта, который просто выводит сообщение "Hello world" в лог.
MessageType.Info - это тип сообщения, он может быть Debug, Info, Warning, Error.
Данное сообщение выведется в общем логе программы (файл tslab.log):
14:00:01.00[10]INFO :100:Info:Script::Hello world
Также можно дополнительно вывести сообщение в окно программы:
Вывести дополнительную информацию передав список значений в словаре:
В лог файле (tslab.log) будет выведено:
14:00:02.00[10]INFO :100:Info:Script:(agent:ExampleLog):Hello world
Выберем платформу .Net 8.0. Если студия не предлагает такой вариант, то необходимо установить компонент Разработка классических приложений .NET. Для этого нужно скачать установочный файл Visual Studio и выбрать этот компонент. Подробнее в статье Установка .
Теперь запустим Visual Studio, откроем наш скрипт, в данном случае это BuyScript из прошлого .
Создадим первый скрипт, он будет покупать по рынку и выставлять стоп и тейк на расстоянии 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.
В редакторе кода напишем следующий код:
Мы создали класс 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 вместо файла скрипта.