Стратегии
LINK Spot: участие в тренде — покупка или вне позиции, без плеча. Удерживай спотовый актив, пока медленный режим тренда DAILY UP, переходи в CASH при сломе тренда. Непрерывное участие в режиме (NOT, а не покупка на редких глубоких просадках); захват восходящих трендов альткоинов с обходом медвежьих просадок (LINKUSDT.BINANCE_SPOT, дневные бары, 3 параметров)
Итог: Отменено
LinkSpotTrendParticipation
avg_trade_return_pct 6.12% с большим запасом покрывает минимальный уровень спотовых комиссий (проблемы с комиссиями нет)
Гипотеза
Окончательный отказ из-за просадки: max_drawdown 94.09% (с CI до 100%) намного превышает лимит 50% (L19) и не может пройти минимальный порог просадки для продвижения. Показатель +1901% обусловлен криптобетой (бета 0.73, benchmark_correlation 0.80), а не активным преимуществом: information_ratio отрицателен (-0.17), то есть результат с поправкой на риск хуже, чем у стратегии «купи и держи», а profit_factor 1.18 ниже порога 1.2 существенного преимущества. Коэффициент Шарпа — артефакт нескольких аномальных дней роста (эксцесс 184.9, асимметрия 11.3) и подбора размера позиции под кривую капитала (avg_position_pct 131%). Сама гипотеза признаёт, что стратегия следует за медвежьим движением 2022 вниз (2022 -78.4%) с заявленной просадкой 88%; оптимизация параметров 3 не исправит механизм, который структурно удерживает позицию в периоды глубокого падения. Это схема спотовой торговли только с длинными позициями, несущая просадку беты (L49); оптимизация в течение 2 часов нецелесообразна.
Реализация
Покупка или вне позиции, спотовая торговля по тренду без плеча на дневных барах LINKUSDT.BINANCE_SPOT. Сигнал — непрерывная оценка тренда: (close - SMA(entry_sma)) / ATR(14) — расстояние выше или ниже базового тренда в единицах дневной волатильности, рассчитываемое на каждом баре. Стратегия покупает актив на 98% остатка денежных средств, когда оценка становится положительной (close выше SMA(entry_sma)), и возвращается в 100% CASH, когда цена опускается ниже SMA(exit_sma) или отступает на atr_trail_mult x ATR от максимума после входа (трейлинг-стоп по методу «люстра»). Позиция открыта примерно в половине дней каждого года выборки — участие в режиме непрерывное, это не покупка на редких обвалах. Стратегия не открывает коротких позиций и не занимает средства, удерживая только актив или денежные средства; поэтому её направили на BINANCE_SPOT (счёт CASH, плечо 1.0). Сигнал формируется по дневному закрытию, исполнение — на открытии следующего дня. Три настраиваемых параметра: entry_sma, exit_sma, atr_trail_mult.
Результаты верификации
CLEAN RESTART 2026-09-04 — историю вердиктов и записи обучения этого запуска удалили, его перезапустили с этапа верификации. Прежний отказ был вызван конвейером, а не рынком: тестовая среда Layer-2 неверно связывала вспомогательные методы @staticmethod (исправлено), QA выносил окончательные вердикты о доходности по неоптимизированному дымовому тесту (удалено — теперь QA оценивает только корректность), а тайм-ауты песочницы были вызваны нехваткой слотов для бэктеста (исправлено). Гипотеза и код стратегии не изменились. Оцени код по существу; доходность будет определена позже полным бэктестом и оптимизатором.
Код не меняли; проверьте, что знаменатели капитала и стоимости позиции фиксируются одновременно.
Песочница avg_position_pct 108.8% на спотовом счёте CASH, где нельзя брать средства в долг, но position_size() ограничен величиной equity*invest_frac (<=0.99). Код не запрашивает плечо, поэтому это артефакт расчёта метрик по рыночной стоимости, а не превышение доступных средств. Отмечено для подтверждения аналитиком.
Устанавливайте _in_trade только после ненулевого размера позиции или сверяйте его с кэшем через positions_open() на каждом баре.
should_enter() устанавливает _in_trade=True до подтверждения исполнения заявки; если position_size() возвращает 0, флаг остаётся установленным. Базовые проверки входа и выхода опираются на фактическую позицию в кэше, поэтому затрагивается только отслеживание пика для трейлинг-стопа «люстра», которое самовосстанавливается. Не критично.
Обзор бэктеста
- Шарп
- 1,29
- Общая доходность
- 1901,23%
- Максимальная просадка
- 94,09%
- Всего сделок
- 120
- Доля прибыльных
- 27,5%
- Профит-фактор
- 1,18
avg_trade_return_pct 6.12% с большим запасом покрывает минимальный уровень спотовых комиссий (проблемы с комиссиями нет)
120 сделки проходят во все годы (механизм непрерывно срабатывает, как задумано; пустых окон нет)
Положительные альфа (0.085) и коэффициент Сортино, диагностика входов без замечаний (120 сигналов, 120 заявок, пропусков нет)
max_drawdown 94.09% с CI [99.68%, 100.0%] — основание для окончательного отказа (L19); пройти минимальный порог просадки для продвижения невозможно
profit_factor 1.18 ниже порога 1.2, при котором преимущество считается существенным
information_ratio -0.17: отрицательная доходность с поправкой на риск относительно стратегии «купи и держи»; бета 0.73 / корреляция 0.80 означают, что +1901% — это криптобета, а не мастерство (L49)
Коэффициент Шарпа зависит от выбросов — эксцесс 184.9, асимметрия 11.3, несколько аномальных дневных доходностей >100% и avg_position_pct 131% указывают на подбор размера позиции под кривую капитала, а не на устойчивое преимущество
2022 -78.4%, 2025 -13.5% — стратегия проходит медвежьи фазы вниз из-за неудачных повторных входов, как и признаёт гипотеза (88% заявленная самой стратегией DD)
История итераций
Верификация не пройдена (Layer 2 — синтетические сценарии): Использованы параметры: ['exit_sma', 'entry_sma', 'atr_period', 'invest_frac', 'min_notional', '_param_bounds', 'atr_trail_mult'] Проверьте, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: LinkSpotTrendParticipation._roll() принимает 3 позиционных аргументов, получено 4 (время бара: 1735692060000) - steady_downtrend: TypeError: LinkSpotTrendParticipation._roll() принимает 3 позиционных аргументов, получено 4 (время бара: 1735692060000) - flat_ranging: TypeError: LinkSpotTrendParticipation._roll() принимает 3 позиционных аргументов, получено 4 (время бара: 1735692060000) - volatility_spike: TypeError: LinkSpotTrendParticipation._roll() принимает 3 позиционных аргументов, получено 4 (время бара: 1735692060000) - zero_volume: TypeError: LinkSpotTrendParticipation._roll() принимает 3 позиционных аргументов, получено 4 (время бара: 1735692060000) - price_gap: TypeError: LinkSpotTrendParticipation._roll() принимает 3 позиционных аргументов, получено 4 (время бара: 1735692060000)
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.