Перейти к содержимому
Все стратегии

Стратегии

«Supertrend» для Freqtrade от @juankysoriano (Juan Carlos Soriano), точный перенос: вход и выход только из длинных позиций по трём Supertrend, таблица ступенчатого ROI, трейлинг-стоп-лосс -26.5%, на LINKUSDT.BINANCE_SPOT 1h

Итог: Отменено

FreqtradeSupertrendLinkSpot

Сводка по итогам

В этом запуске гипероптимизированную стратегию Freqtrade «Supertrend» построчно перенесли на спотовый рынок LINK с барами 1h, используя шесть инкрементальных автоматов состояний Supertrend, исходный ROI, стоп и трейлинг-выходы. Стратегия совершила 894 сделок с 2019 по 2026 и потеряла около 0.24% на сделку после комиссий, примерно -0.04% до них, поэтому комиссии не были первопричиной. При проверке бэктеста, после 2 итераций, аналитик отказался от стратегии из-за отрицательного матожидания, перевёрнутого соотношения выплат (прибыль ограничена, а убытки доходят до глубокого стопа) и отсутствия прогнозной информации в сигнале; до оптимизации дело не дошло. Отказ касается только этого спотового переноса на LINK, а не оригинальной стратегии на парах, для которых её гипероптимизировали. Отдельное, не проверенное опасение по поводу учёта издержек воздействия на рынок в показателе -100%/ликвидации передано оператору для проверки журнала операций.

Гипотеза

Точный построчный перевод стратегии «Supertrend» из открытого исходного кода Freqtrade (https://github.com/freqtrade/freqtrade-strategies/blob/f3340ce11f5bdf62f598522e64d1f5638eaa13f5/user_data/strategies/Supertrend.py, GPL-3.0; авторство принадлежит @juankysoriano / Juan Carlos Soriano). Исходная стратегия работает на свечах длительностью 1 ч и открывает только длинные позиции. Она входит в позицию, когда все три индикатора Supertrend для покупки показывают «вверх», и выходит, когда все три отдельных индикатора……Показать большеСвернуть

Точный построчный перевод стратегии «Supertrend» из открытого исходного кода Freqtrade (https://github.com/freqtrade/freqtrade-strategies/blob/f3340ce11f5bdf62f598522e64d1f5638eaa13f5/user_data/strategies/Supertrend.py, GPL-3.0; авторство принадлежит @juankysoriano / Juan Carlos Soriano). Исходная стратегия работает на свечах длительностью 1 ч и открывает только длинные позиции. Она входит в позицию, когда все три индикатора Supertrend для покупки показывают «вверх», и выходит, когда все три отдельных индикатора Supertrend для продажи показывают «вниз». Выходы также определяются ступенчатой таблицей минимальной прибыли ROI, стоп-лоссом -26.5% и настройками трейлинг-стопа. Значения параметров — значения по умолчанию, полученные гипероптимизацией, из buy_params/sell_params. Они заменяют значения IntParameter по умолчанию (4/14): покупка (множитель, период) = (4,8), (7,9), (1,8); продажа (множитель, период) = (1,16), (3,18), (6,18). VENUE CHOICE: исходная стратегия Freqtrade работает только в длинную сторону, без кредитного плеча, то есть на спотовом рынке. Поэтому маршрутизация платформы направляет её на BINANCE_SPOT (CASH, комиссия тейкера 0.10% за сторону, около 0.20% RT). Инструмент — LINKUSDT.BINANCE_SPOT 1-HOUR (в каталоге есть бары с 2019-01-16 по 2026-10-01, около 67 тыс. баров). Мы выбрали LINK, а не BTC, потому что BTC составляет около 44-62% корпуса, а зарегистрированного использования спотового LINK нет. LINK также достаточно волатилен, чтобы цели 8.7% / 5.8% / 2.9% ROI достигались в пределах временных окон ROI. SUPERTREND DEFINITION (technical.indicators.supertrend, согласно комментарию 853042401 к задаче #30 в freqtrade-strategies), вычисляется для каждой пары (множитель m, период p): TR = TA-Lib TRANGE (максимум из high-low, |high-prev_close|, |low-prev_close|); ATR = простая скользящая средняя TR за p баров (SMA, сглаживание Уайлдера NOT); basic_ub = (high+low)/2 + m*ATR; basic_lb = (high+low)/2 - m*ATR. Начальные значения final_ub и final_lb равны 0.0. Для i >= p: final_ub[i] = basic_ub[i], если (basic_ub[i] < final_ub[i-1] или close[i-1] > final_ub[i-1]), иначе final_ub[i-1]; final_lb[i] = basic_lb[i], если (basic_lb[i] > final_lb[i-1] или close[i-1] < final_lb[i-1]), иначе final_lb[i-1]. Начальное значение ST равно 0.0. Для i >= p: если ST[i-1]==final_ub[i-1] и close[i] <= final_ub[i], тогда ST=final_ub[i]; elif ST[i-1]==final_ub[i-1] и close[i] > final_ub[i], тогда ST=final_lb[i]; elif ST[i-1]==final_lb[i-1] и close[i] >= final_lb[i], тогда ST=final_lb[i]; elif ST[i-1]==final_lb[i-1] и close[i] < final_lb[i], тогда ST=final_ub[i]; иначе 0.0. Направление STX = «вниз», если ST>0 и close<ST; «вверх», если ST>0 и close>=ST; пустое/неопределённое (ни вверх, ни вниз), если ST<=0 или период прогрева ещё не завершён. IMPLEMENTATION NOTE: исходный код вычисляет все 630 комбинаций диапазонов гипероптимизации в populate_indicators. Это нужно только для поиска гиперпараметров. Разработчик должен вычислять ONLY используемых Supertrend 6, каждый как инкрементальную машину состояний O(1) (двусторонняя очередь скользящего TR для SMA плюс предыдущие final_ub/final_lb/ST/close). Не пересчитывайте NOT всю историю на каждом баре: недавние сбои sandbox_timeout произошли именно из-за этого. Проверки равенства ST[i-1]==final_ub[i-1] должны сравнивать с сохранённым предыдущим значением (с той же семантикой объекта float, то есть отслеживать флагом состояния, на какой полосе находится ST, эквивалентным этому равенству). CAVEAT: в исходном коде выполняется `_, stx = ftt.supertrend(...)`, а в его докстринге указано, что вызов возвращает кортеж (значение, направление). Если установленная версия `technical` вместо этого возвращает DataFrame, распаковка даст имена столбцов. Мы переводим задокументированный замысел (ряд направлений), а не это возможное несоответствие библиотеки. Заявления исходного кода о результативности (гипероптимизация с ShortTradeDurHyperOptLoss на данных 2021+) считаются неподтверждёнными; результат определяет наш бэктест с учётом комиссий.

Пользователь запросил точный перенос, поэтому все правила и гипероптимизированные значения по умолчанию сохранены без изменений, настраиваемых параметров нет: автор уже провёл гипероптимизацию. Площадка: стратегия работает только с длинными позициями и без плеча, поэтому для неё выбран BINANCE_SPOT (спотовая торговля в пределах квоты 15%). Инструмент: LINK вместо BTC, чтобы разнообразить набор данных. Данные для LINK доступны с 2019; волатильность соответствует предположению о шаге 8.7% ROI. Позиции удерживаются от нескольких часов до примерно 1.5 дней (mid_term). Стоп -26.5% при ставке 95% означает, что полное срабатывание стопа обойдётся примерно в 25% капитала, поэтому порог просадки 40% реалистичен, а не приукрашен.

negative_expectancy (проверка порога комиссии: -0.24% против минимального порога спотовой торговли 0.25%; валовой показатель около -0.04% показывает, что причина не в комиссиях). Это отвергает точный перенос на 1h LINKUSDT.BINANCE_SPOT стратегии @juankysoriano «Supertrend» для Freqtrade с гипероптимизированными параметрами покупки (4,8)/(7,9)/(1,8), продажи (1,16)/(3,18)/(6,18), лестницей ROI, стопом -26.5% и настройками трейлинга. Это не опровергает стратегию автора на 2021+ парах, для которых её……Показать большеСвернуть

negative_expectancy (проверка порога комиссии: -0.24% против минимального порога спотовой торговли 0.25%; валовой показатель около -0.04% показывает, что причина не в комиссиях). Это отвергает точный перенос на 1h LINKUSDT.BINANCE_SPOT стратегии @juankysoriano «Supertrend» для Freqtrade с гипероптимизированными параметрами покупки (4,8)/(7,9)/(1,8), продажи (1,16)/(3,18)/(6,18), лестницей ROI, стопом -26.5% и настройками трейлинга. Это не опровергает стратегию автора на 2021+ парах, для которых её гипероптимизировали, и не опровергает Supertrend в целом. Данные: 894 закрытых сделок, надёжная выборка. Средняя чистая доходность сделки — -0.24%, около -0.04% до комиссии. Валовой PF без комиссии — 0.92, чистый PF — 0.85. Средняя доходность сделок была отрицательной в 7 из 8 лет; положительной была только 2020. IC исполненных сигналов составляет -0.036 (t=-1.5). Соотношение выплат перевёрнуто: средняя прибыль — +3.7%, поскольку лестница ROI её ограничивает, а средний убыток — -6.4%, он доходит до стопа -26.5%. Опасение QA подтвердилось. Оптимизация не поможет, поскольку контракт фиксирует все параметры (настраиваемых нет). Отдельная заметка оператору: показатель -100% / «ликвидация» и impact_cost_pct из 6654% (ёмкость $22.58) выглядят завышенными. Похоже, воздействие на рынок включается в капитал, а размер позиции наращивается на основе капитала по данным движка; это не проверено, нужна сверка журнала операций. Доходность по ценам сделок уже не включает воздействие на рынок и отрицательна, поэтому вердикт от него не зависит.

Реализация

Точная портированная Stratmill версия стратегии Freqtrade «Supertrend» от @juankysoriano (GPL-3.0): только длинные позиции на споте LINK с таймфреймом 1 ч. Вход при условии, что все 3 Supertrend на покупку (4,8),(7,9),(1,8) показывают «вверх» и объём>0; выход, когда все 3 Supertrend на продажу (1,16),(3,18),(6,18) показывают «вниз» (и нет сигнала на вход), ступенчатый минимальный ROI с учётом комиссий ROI {0:8.7%,372:5.8%,861:2.9%,2221:0%}, стоп-лосс -26.5% с трейлингом 5% после достижения прибыли > 14.4%. Ставка 95%, стартовый прогрев — 199 свечей.

Итерация 2 исправляет sandbox_timeout уровня Layer-3. Профилирование показало, что стратегия уже работает за O(1) на бар: то же окно песочницы (833 дней, около 20k баров по 1h, до границы итогового экзамена 2026-08-21) выполнилось локально за 155с через тот же запускатель подпроцесса при средней загрузке хоста около 67. Значит, превышение лимита на 300с вызвала нагрузка на хост, а не масштабирование истории. Теперь горячий путь на бар ещё компактнее: шесть автоматов состояний Supertrend обновляются из заранее собранного кортежа, а агрегация входов, выходов и оценок встроена вместо использования генераторов all()/min(). Повторный запуск: 121с при побайтно идентичной торговле (248 сделок, та же доходность на сделку), правила не менялись. Семантика перевода не изменилась с итерации 1. Адаптация платформы: ROI, стоп и трейлинг-выходы проверяются при закрытии бара 1h и исполняются по рынку, а не внутри свечи. Следует учитывать: тестовое окно показывает avg_trade_return_pct из -0.47% на 248 сделках; решающим будет полный бэктест.

Результаты верификации

Сохранить как точный перенос. Если аналитик будет дорабатывать стратегию, можно рассмотреть лимит риска на сделку (долю капитала рассчитывать по расстоянию до стопа) и лимитные/мейкерские входы, чтобы снизить воздействие на рынок.

На каждую сделку выделяется 95% капитала — как в режиме по умолчанию Freqtrade со ставкой на весь капитал. Поэтому трейлинг-стоп -26.5% подвергает риску до примерно 25% капитала в одной сделке, а моделируемое воздействие на рынок для спотового рыночного ордера размером около ${95}k по LINK (~0.13%/исполнение) превышает комиссию 0.10%. Максимальный валовой риск составляет ≤ 0.95x капитала на счёте CASH (плечо 1.0, коротких позиций нет), поэтому ордер можно исполнить. Это вопрос риска и ёмкости, а не ошибка.

Необязательно: разместите стоп-маркетный ордер только на сокращение позиции по _stop_rate и обновляйте его при каждом подтягивании трейлинг-стопа, чтобы заявленный стоп срабатывал внутри бара.

ROI, стоп -26.5% и трейлинг-выходы проверяются по CLOSE бара 1h и исполняются по рынку. В бэктесте Freqtrade они исполняются внутри свечи по ROI или цене стопа. Максимум трейлинга корректно берётся по максимумам баров, но пробой внутри свечи учитывается только при её закрытии. Разработчик описывает это как адаптацию платформы; на барах 1h проскальзывание относительно указанного стопа обычно небольшое, но при резких движениях оно может быть значительным.

Перед бумажной торговлей убедись, что прогрев охватывает не менее startup_candle_count баров (199), чтобы автоматы состояний полос сошлись до начала торговли.

Состояние стопа по сделке (_trade_open_ts, _open_rate, _max_rate, _stop_rate) скалярное и восстанавливается функцией persistable_state. Шесть объектов _SupertrendState не сохраняются; они заново строятся при прогреве с помощью calculate_signal. Состояние полос Supertrend зависит от пути, поэтому после перезапуска реальной торговли короткий прогрев некоторое время может давать полосы, отличающиеся от непрерывного бэктеста. Это важно только для реальной торговли.

В тестовом запуске выполнено 252 закрытых длинных сделок на спотовом рынке LINK с таймфреймом 1h; средний результат — -0.41% на сделку (PF 0.80, доля прибыльных сделок 63%, коэффициент Шарпа -1.57). До издержек результат близок к нулю: суммарный PnL — около -$113k, комиссия — $48k, включённое воздействие на рынок — $64k. Таким образом, воздействие превышает комиссию и составляет примерно 0.13% на исполнение при ставке 95% от капитала. Ступенчатый шаг 0% ROI на 2221 минутах, вместе с ROI и стоп-выходами при……Показать большеСвернуть

В тестовом запуске выполнено 252 закрытых длинных сделок на спотовом рынке LINK с таймфреймом 1h; средний результат — -0.41% на сделку (PF 0.80, доля прибыльных сделок 63%, коэффициент Шарпа -1.57). До издержек результат близок к нулю: суммарный PnL — около -$113k, комиссия — $48k, включённое воздействие на рынок — $64k. Таким образом, воздействие превышает комиссию и составляет примерно 0.13% на исполнение при ставке 95% от капитала. Ступенчатый шаг 0% ROI на 2221 минутах, вместе с ROI и стоп-выходами при закрытии бара вместо исполнения внутри свечи, ограничивает прибыль примерно безубыточным уровнем после комиссий, тогда как убытки доходят до трейлинг-стопа -26.5% (средний убыток $6.2k против средней прибыли $2.9k). Показатель -100% / «ликвидирована» и avg_position_pct из 407%, вероятно, являются артефактами включения воздействия на рынок в капитал. Счёт движка CASH не может стать отрицательным, а размер позиции рассчитывается по капиталу движка, а не по капиталу после воздействия. В полном бэктесте сначала проверь валовой (до издержек) показатель PF, долю воздействия в валовом результате и то, оставляет ли шаг 0% ROI в 2221 минут положительное преимущество на сделку сверх спотового порога 0.25%.

Обзор бэктеста

Шарп
0,39
Общая доходность
-100,00%
Максимальная просадка
100,00%
Всего сделок
894
Доля прибыльных
61,3%
Профит-фактор
0,85

Реализация соответствует гипотезе: только длинные позиции, входы 894, все полностью исполнены. Инкрементальные автоматы состояний Supertrend, ступенчатый ROI, трейлинг-стоп и порог запуска соответствуют спецификации.

Надёжная выборка из 894 закрытых сделок с 2019-01 по 2026-08, входные данные чистые (проверены только перебои на бирже).

Среднее значение pnl_pct на сделку составляет -0.24% после вычета комиссии против минимального порога 0.25% BINANCE_SPOT. До вычета комиссии оно составляет около -0.04%, поэтому валовое преимущество близко к нулю или отрицательно, и комиссии не являются первопричиной. Валовой показатель PF, рассчитанный только по цене и без учёта комиссии, составляет 0.92. Указанное чистое значение PF составляет 0.85.

Отрицательная в 7 из 8 календарных лет по средней доходности сделки pnl_pct: 2019 -0.52, 2020 +1.25, 2021 -0.08, 2022 -1.23, 2023 -0.14, 2024 -0.15, 2025 -0.83, 2026 -1.04. Положительным был только бычий рост 2020 LINK.

Соотношение прибыли и убытка структурно перевёрнуто. Доля прибыльных сделок составляет 61%, но средняя прибыль равна +3.7%, а средний убыток — -6.4%. Ступенчатая таблица ROI ограничивает прибыль (8.7%, затем 5.8%, затем 2.9%, затем 0% по прошествии 37 ч). Убыточные сделки доходят до стопа -26.5%: убытки по пяти худшим сделкам составили от -20% до -26%.

IC по исполненным сигналам составляет -0.036 (t=-1.5) на 1,792 наблюдениях: прогнозной информации нет.

Альфа относительно стратегии «купи и держи» для LINK составляет -116%/год (IR -0.64) при бете 1.09.

Заявленные -100% / ликвидация и 2021-12-10 с impact_cost_pct 6654% (ёмкость $22.58) завышены. Воздействие на рынок включается в капитал, а размер позиции наращивается на основе капитала по данным движка: воздействие на сумму $1.27M при комиссии $604k. Я не проверял этот механизм независимо. Указанная выше доходность по ценам сделок не включает воздействие на рынок и всё равно отрицательна, поэтому вердикт от него не зависит.

История итераций

sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно в 20000 баров (833 дней периода LINKUSDT.BINANCE_SPOT-1-HOUR-LAST-EXTERNAL). Почти всегда это означает, что объём работы на бар растёт вместе с историей — например, повторное сканирование всего ряда ставок финансирования/дополнительных данных или пересоздание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее вычислите отсортированные массивы временных меток ONCE в __init__ и используйте bisect либо кэшируйте результаты поиска по временной метке, чтобы стоимость обработки одного бара составляла O(log n), а не O(n).

Сводка по итогам

Лестница ROI ограничивает прибыльные сделки (средняя прибыль +3.7%), а широкий стоп -26.5% позволяет убыткам расти (средний убыток -6.4%), переворачивая соотношение выплат. Поэтому даже при доле прибыльных сделок 61% стратегия может терять деньги; прежде чем переносить гипероптимизированные настройки выхода на новую пару и период, проверь асимметрию прибыли и убытков.

Аналитик проверки бэктеста проголосовал за отказ из-за отрицательного матожидания: -0.24% на сделку против минимального порога спотовой торговли 0.25%, валовое преимущество около нуля, средняя доходность сделок отрицательна в 7 из 8 лет, а IC исполненных сигналов — -0.036 (t=-1.5). Оптимизация не помогла бы, поскольку все параметры были зафиксированы; поэтому этапы оптимизации, анализа, оценки риска и продвижения не проводились.

Точный перенос стратегии Freqtrade «Supertrend» @juankysoriano на LINKUSDT.BINANCE_SPOT 1h: открывай только длинную позицию, когда все три покупающих Supertrend показывают «вверх»; выходи, когда все три продающих Supertrend показывают «вниз», а также по ступенчатой лестнице ROI (8.7%/5.8%/2.9%/0%), стоп-лоссу -26.5% и настройкам трейлинг-стопа.

За 894 закрытых длинных сделок (2019-01 — 2026-08) средняя чистая доходность сделки составила -0.24% (около -0.04% до комиссии), чистый фактор прибыли — 0.85 (валовой без комиссии — 0.92), доля прибыльных сделок — 61%, арифметический коэффициент Шарпа — 0.39; заявленная общая доходность составила -100% с ликвидацией на уровне 2021-12-10. Аналитик отметил, что этот показатель, вероятно, завышен из-за учёта воздействия на рынок.

Анализ

Supertrend

Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.