Оптимизация
Общие рекомендации к системе и компьютеру.
Общие рекомендации к системе и компьютеру.
Чем больше количество потоков процессора, тем для скорости оптимизации лучше.
Количество оперативной памяти подбирайте исходя из задач и алгоритма расчета, описанному ниже.
Не рекомендуется запускать оптимизацию и торговлю одновременно !
Не рекомендуется запускать оптимизацию и торговлю одновременно !
Сколько оперативной памяти необходимо при оптимизации?
Сколько оперативной памяти необходимо при оптимизации?
Конечное потребление памяти при оптимизации можно рассчитать по следующей формуле:
Память (байт) = ЧислоБар * 8 * ЧислоУникНаборовПараметров
ЧислоБар – сколько бар истории вы подали в скрипт
8 – столько байт займет одно число double
Число Уникальных Наборов Параметров – сколько уникальных сочетаний параметров в скрипте получается. Далеко не всегда эта цифра равна числу итераций в скрипте. Для двух скользящих с периодом от 1 до 300, число уникальных наборов будет равно всегда 299, при том что число пересчетов будет много больше. И именно за счет кэширования этих самых 299 уникальных результатов будет получен тот самый прирост скорости оптимизации, который получается при помощи использования GetData.
В одном гигабайте всегда 1024 мегабайта, а в одном мегабайте 1024 килобайта, а в килобайте всегда 1024 байта.
В рамках программы на одно число double может уходить до 10 байт.
TSLab выделяет память не только под кэш, но и под другие промежуточные расчеты, а так же с тем, что закэшируются и цены закрытия инструмента (что может занять некоторое количество памяти). Поэтому, памяти будет затрачено несколько больше, чем получится по выше приведенной формуле.
От чего зависит скорость оптимизации и пересчет скрипта?
От чего зависит скорость оптимизации и пересчет скрипта?
Программа полностью поддерживает многопоточность. Поэтому, чем больше потоков поддерживает процессор, тем быстрее идет оптимизация, при достаточном количестве оперативной памяти.
Меню «Оптимизация скриптов» в программе
Меню «Оптимизация скриптов» в программе
Открыть меню Оптимизация скриптов можно выбрав пункт Файл — Настройки программы — Оптимизация скриптов
Для многоядерных процессоров включите опцию «Включить для многоядерных процессоров»
В старых версиях программы можно было в программе выбирать какой именно сборщик мусора использовать. «Включить для многоядерных процессоров»
Серверную версию или десктопную. Так как при использовании серверного сборщика на десктопном процессоре вызывает утечки памяти, мы эту возможность убрали. А сама возможность выбирать сборщик мусора есть в файле конфигурации программы.
Ядрами управляет не TSLab, а виндоус и CLR .NetЭто тонкий момент, который нужно понимать.
Все эти настройки «сверху» TSLab. TSLab здесь выступает просто как генератор вычислений.Файл TSLabApp.runtimeconfig.json в папке с установленной TSLabИзмените настройки, при выключенной программе, в зависимости от процессора, скорее всего хватит Server: «System.GC.Server»: true, «System.GC.CpuGroup»: true, «System.GC.RetainVM»: true, дополнительная информация:
https://docs.microsoft.com/en-us/dotnet/core/run-time-config/garbage-collector
P.S.
В случае, если используется двухпроцессорная машина:
Есть еще настройка не относящаяся к однопроцессорной машине.
нужно DOTNET_Thread_UseAllCpuGroups переменную окружения в Windows
прописать DOTNET_Thread_UseAllCpuGroups =1
https://docs.microsoft.com/ru-ru/dotnet/core/runtime-config/threading
-
Отладка скриптов — это отладчик, дебаггер для работы с Visual studio или SharpDevelop
-
Макс. время работы — по умолчанию стоит 40 секунд. Это время пересчета скрипта, если компьютер не смог рассчитать скрипт за указанное время, программа остановит пересчет, снимет задачу. Настройка влияет не только на оптимизацию, но данный параметр — это максимальное время расчета агента.
-
Кеш для скриптов — подбирается методом подбора. Все компьютеры разные, даже с одинаковым железом. В зависимости от драйверов, установленных программ, версии ОС и запущенных сервисов они могут вести себя по-разному. Для последних версий Windows, при условии переизбытка оперативной памяти и работе в 64бит, данный параметр можно не трогать или поставить его близким к имеющейся физически свободной оперативной памяти.
О методе подбора значений от пользователя:
Пересчетом данных занимается процессор, ОЗУ занимается хранением данных, откуда и потребляет их процессор (если очень упрощенно). Больший объем ОЗУ позволит Вам разместить там больший объем «запаса» расчетных данных без необходимости «добывания» этих данных с HDD, за сам пересчет отвечает процессор, соответственно, скорость оптимизации будет определяться точкой баланса между количество оперативной памяти и быстродействием процессора. Увеличение оперативной памяти без увеличения быстродействия процессора не даст эффекта после прохождения точки максимальной загрузки ОЗУ, равно как увеличение частоты процесса будет давать меньший эффект при малой ОЗУ, т.к. данные придется брать с низкоскоростных хранилищ данных типа HDD и SDD. Примерно так это все работает«метод подбора значений» в данном случае подразумевает под собой необходимость нахождения своей точки баланса между количеством данных, которые необходимо оптимизировать, частотой процессора, размером ОЗУ, скоростью HDD/SSD и количеством процессов уже запущенных в Вашей системе.
Это и есть «метод подбора значений». При оптимизации Вы можете играть на компе в Need For Speed, понятно, что при прочих равных общих параметрах оптимизация в таком режиме будет идти медленнее, чем на той машине, на которой игра не запущена. Думается, что именно это имелось в виду в документации к ТСЛаб
Александр Ганов
-
Количество потоков оптимизации — 0, означает, что программа будет использовать количество потоков исходя из количества ядер.
В примере на картинке обычный двухъядерный 2ghz xeon. У него по умолчанию 2 потока, так как два ядра. Однако, если используете гипертрейдинговые процессоры, например i7, то количество потоков можно взять по количеству ядер, умножить на два. Скорость оптимизации возрастет значительно.
-
Остановить оптимизацию, мало памяти — программа остановит оптимизацию, если ресурсы оперативной памяти исчерпаны. Если снять флаг, Windows может увести процессы в SWAP (при использовании 64 бит) или выдать ошибку исключение по памяти, если 32 бит
Включить для многоядерных процессоров — настройка доступна, начиная с версии программы 2.1. Это настройка сборщика мусора NET. Например, для многоядерных xeon, больше 8 ядер, настройка обязательна, даже в не зависимости от версии Windows (серверная или нет). С меньшим количеством ядер настройка может не повлиять на загрузку процессора.
-
Перебор — Прямой перебор параметров с заданным шагом от меньшего к большему, по очереди.
-
Случайно — Перебор параметров с заданным шагом, в случайном порядке
-
Genetic — Подробнее в статье API. Plugins. Implementing IOptimizationMethod
Как включить параметры индикатора для оптимизации ?
Как включить параметры индикатора для оптимизации ?
Параметры в оптимизацию включаются в свойствах блока.
Количество проходов оптимизации
Количество проходов оптимизации
Ставим границы оптимизации параметра, например 1 — 100, шаг 1. Итого максимум 100 проходов.
Но если поставить 30 проходов, а не максимальное — 100, то оптимизатор пройдет не ровно 30 проходов, а 34-35.
«Количество проходов» задает минимальное количество проходов. В общем случае количество должно быть кратно количество задействованных параметров.
Таблица Результаты оптимизации появляется в начале процесса оптимизации, если не выбран параметр «Сохранить в Excel» на странице Оптимизация.
В таблице есть колонка Результат из скрипта.
В инструментарии в редакторе есть блок Результат для оптимизации.
Код блока есть здесь:
https://github.com/tslab-hub/handlers
Выводит значение из скрипта Результат для оптимизации в колонку по имени блока.
Результатов для оптимизации может быть несколько (ограничено здравым смыслом)
В колонке ничего не считается, т.е. просто выводит из блока Результат оптимизации значение в таблицу Результаты оптимизации. Например, какую-то характеристику, оценивающую стратегию.
Если не загружается таблица Результатов оптимизации, проверьте настройку фильтров:
Сохранение набора параметров после оптимизации
Сохранение набора параметров после оптимизации
Нажмите кнопку Сохранение параметров во вкладке «Оптимизация».
Дайте имя набору параметров. Данный набор параметров будет доступен во вкладке «Параметры»
Очередь из нескольких оптимизаций
Очередь из нескольких оптимизаций
Вопрос:
Есть несколько котировок. Необходимо запустить скрипт по этим котировкам с определенными наборами оптимизируемых параметров и сохранить результаты в файл.
Есть ли возможность для решения этой задачи создать дополнительный скрипт, который будет выполнять выше приведенную задачу? Было бы очень удобно поставить скрипт на ночь так, что бы все запланированные оптимизации были выполнены ночью. Так как оптимизации могут длиться 2-3 часа, то было бы удобно запланировать на ночь выполнение нескольких расчетов. Что значительно ускорит процесс оптимизации.
Ответ:
Встроенными средствами сделать оптимизацию по нескольким задачам в очереди в TSLab нельзя. Т.е. как либо запланировать расписание, или создать очередь из задач нескольких оптимизаций нельзя. У нас есть планы реализовать эти возможности в будущем.
Расчет оптимизаций на GPU (CUDA вычисления)
Расчет оптимизаций на GPU (CUDA вычисления)
Будет ли в программе оптимизация на GPU?
GPU способна делать не все вычисления и в данном случае это технически сделать нельзя, ответ нет.
В этом посте я собрал особенности настройки TSLab для торговли на боевом сервере. Эти настройки помогут вам избежать многих проблем, с которыми почти все сталкиваются в начале карьеры алготрейдера. Статья будет пополняться новыми советами. Если у вас возникли сложности или дополнения, пишите в комментарии или мне в Skype.
Оптимизация памяти
Если вы смотрели видео уроки на сайте TSLab, то знаете как сократить размер кэша агента чтобы освободить оперативную память и ускорить пересчет. В настройке вашего скрипта перед запуском агента нужно выставить Максимум баров – ограничитель. Я ставлю не более 2000, в зависимости от тайм фрейма. Можно также ограничить количество дней “Макс. дней”. Главное, чтобы цифра была больше чем нужно самому медленному индикатору. Проверьте чтобы до и после ограничения ваши сделки совпадали. 10 агентов у меня занимают 1.2 Гб памяти. Также имейте ввиду что со временем TSLab увеличивает потребление памяти и к вечеру уже может занимать 3 Гб, особенно если открывать роботов в лабе на рабочей программе.
Настройка связки TSLab + QUIK
Защита от смены сервера
Настоятельно рекомендую всем установить галочку в QUIK для того чтобы он не менял сервера и не дублировались стоп-заявки.
Не доступен сервер QUIK
Если сервер вашего брокера недоступен (такое иногда бывает), то нужно в списке соединений выбрать другой сервер и попробовать подключиться к нему. Если получилось, то у вас могла остаться стоп-заявки на недоступном сервере. Они там и будут оставаться, пока вы их не отмените. Для этого нужно на каждой заявке в окне QUIK нажать правой кнопкой и выбрать “Сделать своей”, после чего она будет перенесена на текущий сервер. После этого можете ее отменить и дать возможность TSLab выставить их заново перезапуском агентов.
Защита от изменения файла конфигурации QUIK
Одной из самых частых проблем у новичков является нарушение связи DDE из за изменения конфигурации окон QUIK. Для того чтобы ее восстановить нужно взять tslab.wnd из поставки и заменить его в папке QUIK, после чего сделать загрузку файла настроек и указать этот файл. Этот файл следует держать в неизменном виде! Для этого нужно зайти в настройки QUIK, перейти в раздел Программа – Файлы настроек и снять галочку с Сохранять настройки в файл при выходе. Данную настройку нужно сделать в самый первый запуск QUIK.
Автоматический запуск с утра
Для того чтобы TSLab самостоятельно подключался с утра без вашего участия необходимо правильно подобрать настройки поставщика данных. Особенно это касается QUIK.
Необходимо настроить расписание подключения. Можно оставить настройки по-умолчанию 9-50 с пн по пт, но я поставил 9-41 в ТСЛаб и 9-40 в QUIK (настройка в меню Доступные соединения). Важно чтобы QUIK подключался раньше TSLab.
В настройках поставщика галочку с “Перезапускать QUIK” нужно снять. Таким образом он будет запущен всегда. Нужно только 1 раз запустить TSLab, нажать Соединить в меню и он запустит QUIK. Произойдет автоматический ввод логина и пароля, если ничего не трогать. Если не произойдет, что-то настроили неправильно. Загружаем настройку tslab.wnd, которая дефолтная или скачанная у брокера, сворачиваем QUIK и больше вообще его не трогаем. Можно только переключать вкладки, не меняя их. С этого момента все будет включаться – отключаться автоматически: в 9-40 QUIK подключается к брокеру, в 9-41 TSLab подключается к QUIK и выставляет заявки. В конце сессии отключается. Раз в неделю перезапускаем все вручную чтобы очистить память.
Ошибка “Превышено время ожидания”
Возникает когда ТсЛаб не может получить подтверждения о выставлении заявки. Проблема в связи между ними, либо в настройках системы. Первое лечится загрузкой tslab.wnd, второе установкой русского лэнгвидж пака в Windows и родного отображения даты/времени в системе. Также нужно поставить пакет обновлений Windows, который отключает переход на зимнее-летнее время. Все это нужно проделать в первую очередь когда впервые запускаете удаленный сервер.
Профилактика
Ежедневно перед торгами или вечером после торгов открываем в QUIK вкладку позиций и сверяем их с агентами. Вкладки там не двигаем и не закрываем.
Еженедельно перезапускаем TSlab и QUIK, выполняем соединение снова. Это для очистки памяти.
Не выставляются заявки, не обновляются котировки и тд
Проверьте связь между терминалами, загрузите tslab.wnd. Этот файл всегда должен лежать у вас на рабочем столе в своём первозданном виде. При необходимости кидайте его в папку QUIK с перезаписью.
Не обновляются котировки, пропали графики
Такое часто случается при сбое и вылете ТСЛаб. Нарушается работа кэша котировок. После того как запущен ТСЛаб нужно дать минут 5-10 чтобы они загрузились сами. Если этого не произошло, то рядом с агентом нажать кнопку Гр, подождать пока загрузится график, нажать на нем правой кнопкой и выбрать Перезагрузить данные. Это обновит кэш. Если котировки после этого не скачались за какой-то промежуток времени и вы работаете через QUIK, то нужно в QUIK в меню выбрать Перезаказать архив графиков, перед этим отключив ТСЛаб от поставщика. QUIK перезапустится, подключайтесь, проверяйте.
Какой выбрать удаленный сервер VPS/VDS для TSLab?
Выбирайте по отзывам и цене в этом отличном обзоре на Хабре. Лично я использовал Агаву, 1Gb, был недоволен, перешел на UltraVDS его использовал пол-года и был доволен, пока не начались лаги и сбои QUIK, затем перешел на домашний хостинг и отказался от Квика.
Если вы всё же решили найти надежного VPS провайдера для трейдинга, обратите внимание на ruVDS, с которым сотрудничают крупнейшие брокеры. Пишите мне и получите промо-код на скидку 5% на хостинг!
На скриншоте оптимальная конфигурация сервера для TSLab до 10-12 агентов.
Как установить внешние индикаторы
Скачать дополнительные индикаторы можно на официальном форуме программы TSLab. Скачиваем и разархивируем в папку Handlers. Попасть туда можно нажав в меню TSLab Инструменты – Папка с логами и перейти на уровень выше. Перезапустить программу. Индикаторы могут быть 32-битными, 64-битными и универсальными. Для разработки рекомендуется работать в 64-битной версии TSLab, а на рабочем сервере с той, которую поддерживает торговый терминал или коннектор. Например, QUIK сможет работать только с 32-битной версией, а Plaza2 и терминал брокера АЛОР может работать и с 64-битной. Соответственно, индикаторы должны соответствовать версии TSLab. Прошу также принять во внимание что кубик, который работает в тестовом Лабе может не работать в реальном агенте или работать иначе.
Настройка лотов в агенте
При настройке агента вы должны указать портфель, инструмент, а также лотность. Размер позиции будет зависеть от настроек, указанных в блоке открытия позиции скрипта. Вы можете выбрать Управляется алгоритмом, тогда настройку лотов нужно производить в самом скрипте, каждый раз открывая его меняя количество в блоке открытия, когда это необходимо. Можно выбрать вариант В лотах, тогда вы указываете количество лотов уже в агенте, но при этом данное количество будет умножаться на количество, указанное в блоке открытия в скрипте. Это важный момент! Вариант В процентах от портфеля теоретически должен высчитывать количество, исходя из суммы на счете и цены актива или ГО, но на практике с фьючерсами работает не корректно, не рекомендую использовать.
Как настроить менеджер уведомлений
TSLab позволяет настроить рассылку уведомлений о различных событиях на электронную почту. Это удобно чтобы быстро получить сообщение о проблеме с подключением к поставщику данных или о возникновении ошибок в агентах. Нужно зайти в Инструменты – Менеджер уведомлений и создать тип e-mail. Настраивается он не тривиально, настройки работают такие:
Если не работает 25 порт, то попробуйте 587. На Яндексе должно быть аналогично.
Через некоторое время использования Мэйл.ру заблокировал мне отправку сообщений через POP3, потому что программа превысила лимит, перешел на Gmail.
Gmail использует порт 587, сервер smtp.gmail.com. В настройках аккаунта Goolge создайте пароль приложения чтобы не палить свой пароль от ящика, либо создайте отдельный профиль Google.
Кроме настройки типа уведомлений и данных авторизации нужно также добавить фильтры по типу событий и не забыть активировать созданные уведомления галочкой. Подробней можно посмотреть в видео-уроке на сайте tslab.ru. Фильтры обрабатываются по порядку с условием “и”. То есть создать в одной настройке два разных типа или категории уведомлений не удастся. Для этого нужно сделать 2 настройки типа email с разными фильтрами. Например, одну настройку для событий категории “Поставщик данных”, другую для сообщений типа “Ошибки”. Можно также выбрать фильтр “Коды” и перечислить коды сообщений из списка (раздел 2.3.12).
После перезапуска агентов теряется история и статистика
Что делать? Избежать этого никак нельзя. Для ведения статистики нужно заполнять свой торговый журнал. Я делаю это еженедельно. Хочу поделиться журналом для роботов в Excel. В нем вы можете вести свою статистику, смотреть графики вашего депозита и дополнять любыми нужными вам цифрами. Скачать Журнал доходности портфеля.
Где скачать котировки для TSLab и склейка фьючерсов
Скачать архив минутных графиков для TSLab и других торговых систем можно бесплатно через сайт Финам или MFD. Сделать это можно вручную, выгружая файлы частями и склеивая их в блокноте в один файл по порядку. Также есть специальные программы, которые скачают и склеят данные за вас, но программы эти в основном не поддерживаются разработчиками и работают не всегда адекватно. Из рабочих программ могу отметить Cognitum Updater, который обновляет котировки по расписанию с Финам. Если вам понадобятся тиковые данные, то Финам позволяет их скачивать только после 18:00, то есть в нерабочее время и тоже частями. Есть также программа от StockSharp под названием Hydra, которая может экспортировать данные сначала в свой формат, а затем в .txt. Скачать можно на официальном сайте S#.
Для того чтобы загрузить исторические данные в текстовом формате или csv нужно создать текстовый поставщик данных. Инструменты – Менеджер поставщиков данных – Добавить … и выбрать Исторические данные – Текстовые файлы. В окне настроек указать папку где будут храниться склейки, задать валюту “п” – пункт.
Сменить тип отображения графика: свечи, бары, стакан
Если вам привычней видеть на графике агента TSLab бары, то нужно в скрипте кликнуть на связь между Источником и Панелью графика и найти там нужную настройку. Здесь же можно скрыть отображение имени позиции, стопа, тэйка и другие настройки графика.
Какую установить комиссию
Какую брать комиссию, если вы торгуете фьючерсы? С 2017 года Мосбиржа установила относительные комиссии на рынке Фортс. Это значит, что комиссия считается также, как и на акциях — в процентах от стоимости контракта. Это относится к фьючерсам и опционам. Узнать актуальный размер комиссии на сайте Мосбиржи (раздел Группы срочных контрактов и базовые ставки за заключение фьючерсов).
Не стоит забывать что это лишь комиссия биржи. К ней нужно прибавить комиссию вашего брокера. Также рекомендуется умножить полученную комиссию на 2, чтобы проводить стресс-тестирование алгоритма и учесть проскальзывание в алгоритме.
Например: фьючерс рубль-доллар SI относится к группе курс иностранной валюты к российскому рублю.
- Базовая ставка 0,0014%
- Комиссия брокера = комиссии биржи, то есть 0,0014%
- Итоговая комиссия 0,0014*2*2 = 0,0056%, что при курсе 63000 где-то 3,52 руб
Для учёта комиссии в TSLab берём кубик Относительная комиссия. Стоимость денег нам не нужна. Если вам понятней комиссия в рублях, то можно брать Абсолютная комиссия и ставить фиксировано 5, а то и 10 руб комиссии на SI – с запасом.
TSLab 2.1 скачать
Последняя версия доступна на официальном сайте. Отвечу на основные вопросы:
- Ключ от версии 1.2 и 2.0 подходит.
- Поддержку можно получить через тикеты поддержки и официальном канале в Telegram.
- Через QUIK работать можно, связь через LUA.
- Опционы работают в Transaq и Алор трейд точно.
- Алгоритмы со стандартными кубиками из 1.2 открываются и работают без проблем. Обратная совместимость c TSLab 2.0 и 1.2 отсутствует.
Обучение TSLab
Рекомендации и отзывы по продуктам школы только положительные!
В этой статье разберем возможности, которые одобряются разработчиками, и помогут нашим скриптам работать быстрее в 10 и более раз. Если уж совсем коротко, мы покажем как не надо делать.
Почему тормозят скрипты TSLab?
Как ранее мы уже говорили, это бывает по разным причинам, но мы будем разбирать только связанные с TSLab API.
В процессе написания скриптов, самый распространенный элемент API это запрос активных/закрытых позиций. Как показала практика, часто это становится узким местом нашего скрипта, и оптимизация данной части позволяет получить серьезное ускорение. В большинстве случаев, ускорение нужно для использования оптимизатора (дабы не ждать до конца света), а иногда и просто для однократного запуска алгоритма (если очень тяжелые расчеты). Попробуем протестировать разные способы запроса позиций и найти самые толковые, которые можно использовать в версиях TSLab 2.х.
Список проверяемых вариантов:
var le = sec.Positions.GetLastActiveForSignal("LE", i); // 1 var le = sec.Positions.GetLastPositionActive(i); // 2 var le = sec.Positions.GetLastLongPositionActive(i); // 3 var le = sec.Positions.GetActiveForBar(i).FirstOrDefault(); // 4 var le = sec.Positions.LastOrDefault(p => p.IsActiveForbar(i)); // 5
Как видно, тут есть только запрос активных позиций, но запрос закрытых позиций делается аналогичным способом, и результаты нашего теста будут вполне переносимы на запрос закрытых позиций.
Для теста используем историю фьючерса RTS с таймфреймом 1М. Общее число свечей = 1885381.
Тестовый скрипт выглядит так:
var fastPeriod = 5; var slowPeriod = 10; var count = ctx.BarsCount; var smaFast = Series.SMA(sec.ClosePrices, fastPeriod); var smaSlow = Series.SMA(sec.ClosePrices, slowPeriod); var crossings = smaFast.Crossings(smaSlow); var sw = new Stopwatch(); sw.Start(); for (int i = slowPeriod; i < count; i++) { var le = sec.Positions.GetLastActiveForSignal("LE", i); //var le = sec.Positions.GetLastPositionActive(i); //var le = sec.Positions.GetLastLongPositionActive(i); //var le = sec.Positions.GetActiveForBar(i).FirstOrDefault(); //var le = sec.Positions.LastOrDefault(p => p.IsActiveForbar(i)); if (le == null) { if (crossings[i] > 0) sec.Positions.BuyAtMarket(i + 1, 1, "LE"); } else { if (crossings[i] < 0) le.CloseAtMarket(i + 1, "x" + le.EntrySignalName); } } sw.Stop(); ctx.Log("elapsed: {0}".Put(sw.Elapsed), Colors.Red, true);
Скрипт написан совершенно типовым способом и подобных реализаций вы можете увидеть еще тысячи. Приведена лишь рабочая логика, а вся обвязка удалена из примера. Ее легко дописать самому, если возникает такое желание.
Малый период индикаторов выбран для того, чтобы увеличить число позиций и, как следствие, повысить влияние этого фактора на работу скрипта. Помимо этого, я расчет пересечений тоже произвожу ДО того как включается таймер, с целью максимально снизить влияние всех посторонних факторов на время обсчета непосредственно торгового цикла.
GetLastActiveForSignal(“LE”, i)
Самый распространенный способ работы с позициями. Он абсолютно необходим в случае если ваш скрипт открывает больше одной позиции в одном направлении. Ведь нет других способов отличить одну лонг позицию от другой, кроме как по имени сигнала. Помимо этого, данный способ самый простой и удобный в использовании. Я пользуюсь им повсеместно и другие применяю очень редко.
Полученное число сделок = 107382.
elapsed: 00:00:01.2277593 elapsed: 00:00:01.2464743 elapsed: 00:00:01.3578913 elapsed: 00:00:01.2592283
Ну очень быстро. Чуть больше 1 секунды.
GetLastPositionActive(i)
Этот вариант удобен когда у нас одновременно может быть активна ТОЛЬКО одна позиция. Мы просто запрашиваем последнюю активную позицию и работаем с ней. Удобно, просто, быстро. Нет проблем с именами сигналов. Подходит для простых скриптов.
Полученное число сделок = 107382.
elapsed: 00:00:00.9938352 elapsed: 00:00:01.0900126 elapsed: 00:00:01.0986774
Еще быстрее. Это логично, ведь не нужно искать имя сигнала, а просто взять активную и вернуть ее.
GetLastLongPositionActive(i)
Этот способ подойдет для скриптов где невозможно одновременное открытие двух позиций в одном направлении. Допустимо открывать одновременно в лонг и шорт по одной позиции.
Полученное число сделок = 107382.
elapsed: 00:00:00.9723426 elapsed: 00:00:01.0560687 elapsed: 00:00:01.0850675
Скорость такая же как в предыдущем случае. Оба варианта очень быстры и можно выбирать любой.
GetActiveForBar(i)
Самый универсальный способ. Позволяет получить все активные позиции сразу и дальше с ними проводить любые манипуляции через циклы. Очень удобно использовать если у нас много одновременных позиций, и получив их все мы можем отработать их очень гибко используя циклы. Выглядит чудесным и прекрасным, посмотрим что покажет наш тест.
elapsed: больше 5 минут, скрипт остановлен по таймауту
Не вышло дождаться окончания работы скрипта. Видимо данный метод очень медленный. Для проверки данного факта я изменил периоды скользящих на 1000 и 2000 чтобы было меньше сделок и запустил еще раз.
Полученное число сделок = 512.
elapsed: 00:00:40.2369298 elapsed: 00:00:43.8513545
Ну ооочень медленно. Очень плохой вариант. Использовать можно только если очень сильно прижало и других вариантов нет. Разработчики подтвердили, что данный метод не использует кэширование и поэтому очень медленный. Вместо данного метода был найден интересный способ описанный в статье Торговый робот Хомяк.
приведу для сравнения время работы скрипта с применением тех же периодов но запроса по GetLastActiveForSignal()
elapsed: 00:00:00.4400800 elapsed: 00:00:00.3955160 elapsed: 00:00:00.4217931 Время уменьшилось всего в 3 раза, и это говорит о том, что запрос позиций вносит весьма скромную лепту в общее время выполнения скрипта. Это прекрасно.
p.IsActiveForbar(i))
Это полностью лобовая атака, когда мы вообще не полагаемся ни на какие методы TSLab а пытаемся сами выбирать нужные нам позиции из общей кучи. Естественно никакой тут нам оптимизации по скорости нет и не будет.
Полученное число сделок = 512.
elapsed: 00:00:36.8720777 elapsed: 00:00:40.0092690
Время работы соизмеримо с методов выше, но выглядит даже чуть более шустрым. В зависимости от способа выборки позиций это время будет колебаться в большую сторону, а вот в меньшую уже вряд ли.
Выводы
Самый удобный и быстрый метод – GetLastActiveForSignal(“LE”, i). Удобно применять везде где нужно. Почти не оказывает замедляющего воздействия на скрипт.
Методы без имени сигнала (GetLastPositionActive, GetLastLongPositionActive) удобно применять для простых скриптов, где нет множества одновременно активных позиций. Самые быстрые из всех. Нужна максимальная скорость? Используйте их.
Все остальные способы выглядят очень медленными и не рекомендуются к использованию нигде. Только если очень необходимо, тогда можно. Но чаще всего дополнительная порция кода позволяет избежать использования метода GetActiveForBar
Родион Скуратовский — ra81
3 комментария
У Алексея даже комменты в Ютубе отключены… Зачем?
Ну не хочет он там общаться, так может зрители между собой словечком перекинулись бы, друг у друга что-то выяснили бы. Не понимаю откуда такая логика действий у программиста.
Кстати, почему многие думают, что телегой пользуются все поголовно?
Среди моих друзей таковых практически нет. Все в Скайпе.
- 27 октября 2020, 12:38
- Ответить
VladMih, те кто хотят общаться, даже на бумажном носителе напишут письма) уж очень много доступных средств связи есть. Нет телеграмм — есть смартлаб)
Коменты отключены так как как скорее всего отвечать в коментах не удобно или не практично.
- 27 октября 2020, 13:06
- Ответить
Компания TSLab, вы будто не видите что я написал.
Сказал же — пусть предупредит, что на канале не отвечает,
а закрывать возможность общаться посетителям —
это выше моего понимания.
Я ничего не прошу, просто отметил, что сильно удивлен логикой. А о том, что смартлаб тоже «средство связи» с Алексеем, от него не слышал.
На бумажном носителе? Опять телеграммы? ))))))))))
- 27 октября 2020, 17:39
- Ответить
Приветствую уважаемые роботрейдеры!
Для тех, кто использует эту платформу — не секрет, что стабильность работы оставляет желать лучшего. Поэтому, сегодня хочу представить вам свой небольшой пост, посвященный хитростям настройки платформы TSLab для максимизации стабильности работы.
Оглавление
- Никогда не ставьте «Ночные сборки»
- Дублированные заявки
- Не выставляются заявки или пропадают сделки
- При длительной работе или большом количестве агентов сервер начинает сильно тормозить
- Постоянно всплывают разные ошибки (пропуски сигналов входа-выхода)
Никогда не ставьте «Ночные сборки»
Даже если поддержка уверяет, что «Ночная сборка» поможет вам решить ту или иную проблему — не верьте 🙂 . Проверено на себе уже дважды. Такая сборка (по сути бета-версия) содержит экспериментальный код и таит еще больше сбоев и проблем, чем обычная версия. Мне дважды советовали (в разных случаях) ее установить и в обоих я в итоге восстанавливал систему из резервной копии. В общем, оно того не стоит. Терпите до следующей стабильной версии!
Дублированные заявки
Если у вас иногда появляются двойные стоп-заявки (или тейки) — рекомендую установить в настройках Квика галку «При восстановлении использовать только параметры последнего соединения».
Даже если с такой проблемой вы еще не сталкивались — все равно поставьте.
Ее суть в том, чтобы в случает сбоя сервера, к которому подключен квик, терминал пытался подключиться к одному и тому же хосту. Иначе, агент увидит, что заявки на этом сервере нет (а по факту она есть, но на старом сервере) и создаст еще одну.
Не выставляются заявки или пропадают сделки
Скорее всего проблема в сломавшейся связи DDE между терминалами Quik и TSLab. В этом случае достаточно загрузить исходный файл конфигурации tslab.wnd в Quik (Меню «Настройки» — «Загрузить настройки из файла».
Так же рекомендуется убрать галку «Сохранять настройки при выходе» в меню «Настройки» — «Основные» — «Программа» в Квике.
При длительной работе или большом количестве агентов сервер начинает сильно тормозить
Здесь выход простой — перезапускать TSLab и Quik каждое утро перед стартом сессии. Так же могу посоветовать ограничить кол-во баров, которые будут отрисовываться на графике. Я обычно ставлю 1000.
Постоянно всплывают разные ошибки (пропуски сигналов входа-выхода)
Если это ваш случай и вы постоянно испытываете проблемы с подключением к серверу или с работой скриптов — могу посоветовать вам переходить с торговли на домашнем компьютере на выделенный сервер.
Серверное оборудование работает гораздо стабильнее, да и с быстрым интернетом там проблем нет. О том, как выбрать такой сервер я уже писал в этой статье.
У меня на этот случай настроены оповещения об ошибках — настоятельно рекомендую вам их настроить, ведь на это уйдет всего 3 минуты:
- Заходим в меню «Инструменты» — «Менеджер уведомлений»
- Нажимаем на кнопку «Добавить», выбираем тип оповещения «E-Mail» и снова нажимаем «Добавить»
- Теперь нажимаем на кнопку «Настройки» и заполняем все поля реквизитами свой почты. Если у вас почта на Яндексе — можете скопировать настройки со скриншота ниже
- Последним шагом настраиваем фильтры согласно картинке ниже
На сегодня это все… Кстати, здесь можно почитать про настройки параметров скрипта, а здесь я подробно описал весь процесс запуска скрипта в торговлю на реальном счете. Если вас интересуют еще какие-нибудь вопросы по настройке ТСЛаба — пишите в комментарии. До встречи в следующей статье!