Объединение сигналов стратегий
Общая идея стратегии
Стратегия берёт сигналы от двух независимых систем и торгует только тогда, когда обе системы согласны с направлением сделки.
Если системы дают разные сигналы → позиция закрывается (выход из рынка).
2. Какие индикаторы можно использовать для систем
В оригинале пользователь может выбрать для System 1 и System 2 один из четырёх типов сигналов:
Moving average (MA) — скользящая средняя.
Exponential smoothing (EXP) — экспоненциальное сглаживание.
Linear Regression slope (LRS) — наклон линейной регрессии.
N-day breakout (NDB) — пробой за N дней.
Сигнал определяется направлением тренда, а не пересечением цены линии.
3. Как торгует каждая система по отдельности
Каждая система:
Всегда в рынке (длинная или короткая).
При смене сигнала фиксирует прибыль/убыток:
Закрывает старую позицию (расчёт P&L).
Открывает новую позицию по текущей цене.
Считает:
Количество сделок, прибыльных сделок.
Эквити (закрытая + открытая прибыль).
Стандартное отклонение изменения эквити (риск).
Максимальную просадку (drawdown).
Отношение прибыли к риску (equity / SD).
4. Как объединяются две системы
Главный механизм объединения:
Если сигнал1 = сигнал2 (оба = 1 → лонг, оба = -1 → шорт):
Закрываем противоположную позицию (если была).
Открываем позицию в согласованном направлении.
Если сигнал1 ≠ сигнал2:
Закрываем текущую позицию (выход из рынка).
Сигнал становится 0 (нет позиции).
То есть комбинированная система торгует только когда есть консенсус.
5. Расчёт combined-эквити и рисков
Для объединённой системы считаются:
Общее эквити (closedeq + openeq).
Просадка (maxdraw).
Стандартное отклонение (sd).
Коэффициент PL = эквити / maxdraw × 100.
Коэффициент ratio = эквити / sd.
6. Дополнительные показатели для сравнения
В конце стратегия выводит сравнение:
chgdraw — насколько уменьшилась просадка объединённой системы по сравнению с лучшей из двух (в %).
chgsd — насколько уменьшилось стандартное отклонение (риск) в процентах.
same — процент дней, когда обе системы были согласны (сигналы совпадали).
7. Что в итоге получается
Отдельные показатели для System 1, System 2.
Показатели для объединённой системы.
Процентное улучшение по просадке и риску, процент совпадения сигналов.
8. Важные замечания
Стратегия не ищет точки входа сама по себе — она полагается на сигналы внешних индикаторов (TSMMAsignal и т.д.).
Код неполный: отсутствуют определения этих сигнальных функций.
Она предназначена для тестирования и сравнения, а не для реальной торговли без адаптации.
Комиссия
commissionзадана 100 (вероятно, долларов на сделку) — очень высокая, что критично для частых стратегий.

Описание получившейся стратегии CODEX GPT-5.4
Название стратегии
Русское название: Комбинация двух систем TSM
Оригинальное название:
TSM 2-Systems
2. Автор и источник
Автор идеи: Перри Кауфман
Исходный материал:
TSM 2 Systems (S)
3. Краткая идея стратегии
Это трендовая стратегия-перекрестная проверка. Вместо одного сигнального механизма она использует две независимые подсистемы и торгует только тогда, когда обе дают одинаковое направление.
Смысл оригинала:
отдельно посчитать сигналы и equity двух систем
затем оценить, улучшает ли их комбинация общую кривую капитала и просадку
В текущей реализации TSLab сохранены обе части:
реальная торговля по объединенному сигналу
аналитические ряды
equity1,equity2,equityCombined,samePct,chgDraw
4. Используемые данные и таймфрейм
Текущая серверная реализация в TSLab:
источник данных:
BingXSpotинструмент:
BTC-USDTбазовый таймфрейм:
D1диапазон последнего проверочного запуска: с
2023-06-01по2026-05-11
Серверный скрипт:
AI/KaufmanStrategies/TSM 2-Systems
5. Рассчитываемые индикаторы и ряды
Подсистема 1
Используются стандартные блоки:
SMAEMAHighestLowest
Используется проектный пользовательский индикатор:
KaufmanLinearRegressionLine
Формульные ряды:
maSig1emaSig1lrsSig1ndbSig1signal1
Трактовка:
для
SMA,EMAиKaufmanLinearRegressionLineсигнал берется по направлению линиидля N-day breakout сигнал удерживается до противоположного пробоя диапазона
Подсистема 2
Полностью повторяет архитектуру первой подсистемы:
maSig2emaSig2lrsSig2ndbSig2signal2
Комбинированная часть
combinedSignalcombinedLongEntrycombinedShortEntrylongExitEqshortExitEq
Аналитические ряды
equity1equity2equityCombinedmaxDraw1maxDraw2maxDrawCombinedsamePctchgDraw
6. Правила входа в длинную позицию
Лонг открывается, когда:
signal1 = 1signal2 = 1на предыдущем баре
combinedSignalеще не был равен1
Технически вход реализован лимитным блоком OpenPositionAtLimitItem по цене текущего close, чтобы сохранить смысл входа на баре сигнала и убрать предупреждение про чисто market-entry граф.
7. Правила входа в короткую позицию
Шорт открывается, когда:
signal1 = -1signal2 = -1на предыдущем баре
combinedSignalеще не был равен-1
Технически вход также реализован через OpenPositionAtLimitItem по цене текущего close.
8. Начальный стоп-лосс
В исходнике отдельный авторский стоп не описан.
В текущей реализации добавлены инженерные защитные стопы:
для лонга:
longProtectStop = min(lowest1[-1], lowest2[-1])для шорта:
shortProtectStop = max(highest1[-1], highest2[-1])
Это не буквальное правило источника, а проектное защитное дополнение для рабочей серверной стратегии.
9. Сопровождение позиции
Позиция сопровождается двумя механизмами:
рыночное закрытие по потере согласия между двумя подсистемами
защитный выход по стоп-уровню, построенному на экстремумах рабочих окон двух систем
Трейлинг в исходном авторском смысле отдельно не вводился.
10. Правила выхода
Выход из лонга
Лонг закрывается, если:
combinedSignal != 1
Дополнительно действует защитный стоп protectLong.
Выход из шорта
Шорт закрывается, если:
combinedSignal != -1
Дополнительно действует защитный стоп protectShort.
11. Манименеджмент и размер позиции
Размер позиции в текущем рабочем графе фиксирован:
Shares = 1
Отдельный авторский риск-менеджмент в исходнике не дан.
Комиссия в реальной торговой ветке:
блок
RelativeCommissionCommissionPct = 0.05
Для аналитических equity-рядов исходный смысл сохранен через отдельную служебную константу:
commissionCash = 100
12. Используемые индикаторы и параметры
Пользовательские индикаторы из папки Indicators:
KaufmanLinearRegressionLine
Основные блоки:
SMAEMAKaufmanLinearRegressionLineHighestLowestRelativeCommissionDoubleCustomHandlerItemBoolCustomHandlerItemOpenPositionAtLimitItemClosePositionByMarketItemClosePositionByStopItem
Параметры, выведенные на Controls:
SysType1SysType2P1 SMAP1 EMAP1 LRP1 HighP1 LowP2 SMAP2 EMAP2 LRP2 HighP2 LowCommissionPct
13. Диапазоны параметров для оптимизации
В графе присутствуют автоматические optimization mappings для числовых параметров.
Практически разумно оптимизировать:
выборы периодов первой подсистемы
выборы периодов второй подсистемы
при необходимости
CommissionPct
Переключатели SysType1 и SysType2 удобнее использовать как режимы перебора вариантов системы, а не как обычные тонкие числовые параметры.
14. Неоднозначности и места для проверки
В исходнике скрыты внутренние функции
TSMMAsignal,TSMEXPsignal,TSMLRSsignal,TSMNDBsignal. В TSLab они воспроизведены инженерно по торговому смыслу, а не через идентичный исходный код этих функций.Внешний host-handler
LinearRegression_hбыл заменен на собственный проектный индикаторKaufmanLinearRegressionLine, потому что в проекте отсутствовали исходники внешней библиотеки, а оставлять такую зависимость по правилам проекта нельзя.Для
SMA,EMAи линейной регрессии использована трактовка "по направлению линии", а не по пробою цены через линию. Это соответствует тексту источника.Для breakout-сигнала используется удержание последнего направления до противоположного пробоя предыдущего диапазона.
Защитные стопы добавлены как инженерное расширение, потому что исходник описывает главным образом комбинаторику сигналов и аналитику, а не полный защитный trading shell.
В текущем серверном прогоне экономика стратегии отрицательная. Это означает, что перенос структурно рабочий, но торговое качество по текущему инструменту и настройкам не подтверждено.
Проверка текущей реализации
Последний серверный цикл на текущем артефакте:
authoring-quality: clean по блокирующим пунктам,controlPaneCount = 1validate: успешноbuild: успешноload: успешноrun: успешно
Итог
Стратегия полностью перенесена в серверный визуальный редактор TSLab как рабочий exact-артефакт с:
двумя независимыми сигнальными подсистемами
объединенным торговым сигналом
комиссией
защитными выходами
контрольной панелью
визуализацией
аналитическими equity-ветками
Загрузка скрипта в программу
Скрипт использует пользовательские индикаторы, которых нет в стандартной поставке TSLab. Перед загрузкой скрипта установите дополнительную библиотеку.
Установка дополнительных индикаторов
Скачайте файл
TSLabIndicators.dllиз папкиdistв репозитории TSLab Indicators.Откройте TSLab. Перейдите в Файл → Настройки программы → Пути к папкам. Найдите параметр Путь к доп.библиотекам обработчиков — это путь к папке
Handlers.Откройте эту папку в проводнике Windows, если папки нет - создайте её.
И скопируйте в неё файл
TSLabIndicators.dll.Перезапустите TSLab.
Способ 1. Загрузка с сервера
Откройте Лаб → Скрипты.
На боковой панели нажмите Загрузить скрипт с сервера.
В дереве папок раскройте Академия TSLab → Примеры скриптов Kaufman. Выберите скрипт Динамическая система пробоя на основе волатильности и нажмите Download.
Способ 2. Загрузка из файла
Скачайте файл скрипта:
Откройте Лаб → Скрипты.
На боковой панели нажмите Загрузить из файла и выберите скачанный файл.
Скрипт появится в списке окна Скрипты.