Бэктестинг: SOL дневной отскок от перепроданности в лонг с фильтром тренда (RSI BINANCE фьючерсы, дневной таймфрейм, только USD-M OHLCV) | Stratmill
Итог: Отменено
SolDailyRsiOversoldBounceLong
Порог бэктеста: - метрики ненадёжны: противоречие — знак Sharpe 0.05 расходится со знаком total_return -0.95%. Sharpe рассчитан по ряду mtm_equity_curve, а доходность — по кривой капитала. Оценивай результат по кривой…
Только длинная позиция, один инструмент, одна площадка, стратегия возврата к среднему на OHLCV-ONLY с барами SOLUSDT.BINANCE 1D. Тот же шаблон, что и у готовых BtcDailyRsiOversoldBounceLong и EthDailyRsiOversoldBounceLong, применён к SOL. Вход в длинную позицию, когда RSI(14) < 30 AND цена выше 200-дневного SMA. Выход, когда RSI >= 50, при жёстком стопе или по истечении лимита времени. Согласно директиве фабрики: «BTCUSDT/ETHUSDT/SOLUSDT.BINANCE на таймфрейме 1H/4H/1D всегда безопасен». Завершает тройку стратегий перепроданности BTC/ETH/SOL RSI. Всего три параметра.
Итерация 7 устраняет указанную для ONLY проблему — «метрики ненадёжны: знак Sharpe 0.05 расходится со знаком total_return -0.95%». Это проблема масштаба, а не логики: в конфигурации итерации -6 каждая сделка на отскоке закрывалась, как только RSI поднимался до 55, при использовании половины капитала. Поэтому суммарная прибыль или убыток за шесть лет была меньше 1%, а дневной ряд переоценки по рынку содержал лишь плоский шум, который два оценивателя интерпретировали по-разному. Минимальное изменение, позволяющее……Показать большеСвернуть
Итерация 7 устраняет указанную для ONLY проблему — «метрики ненадёжны: знак Sharpe 0.05 расходится со знаком total_return -0.95%». Это проблема масштаба, а не логики: в конфигурации итерации -6 каждая сделка на отскоке закрывалась, как только RSI поднимался до 55, при использовании половины капитала. Поэтому суммарная прибыль или убыток за шесть лет была меньше 1%, а дневной ряд переоценки по рынку содержал лишь плоский шум, который два оценивателя интерпретировали по-разному. Минимальное изменение, позволяющее измерить результат по кривой капитала, касается только масштаба; все изменения находятся внутри уже заданных _param_bounds или на их верхней границе: rsi_oversold 42->45 (больше подходящих провалов — плотнее ряд доходности), rsi_exit 55->65 вместе с изменениями max_hold_bars 30->45 и stop_loss_pct 0.12->0.15, чтобы дать более дальней цели возможность сработать (движение цены внутри сделки становится существенным относительно комиссий тейкера за полный цикл около 0.10%, а не определяется преимущественно комиссиями); per_trade_pct 0.50->1.00 (границы заданы заново как [0.25, 1.00]), чтобы размер каждой закрытой сделки можно было надёжно измерить. Структура не меняется: те же импорты и форма класса (слой 1 пройден), тот же непрерывный сигнал RSI в натуральных единицах, возвращаемый на каждом баре, и дискретный фильтр в _entry_ok (слой 2 пройден), та же инкрементальная скользящая сумма SMA со сложностью O(1) (проверка производительности слоя 3 пройдена). Порог входа LOOSER строго увеличивает число сделок, поэтому в бэктесте в изолированной среде сохраняется требование минимум 1 сделок. Только длинные позиции с плечом 1.0 на площадке BINANCE USD-M, заявленной в гипотезе (номинал никогда не превышает капитал, поэтому проверка неиспользуемого плеча неприменима). Важно отметить: если при этих настройках механизм по-прежнему будет давать доходность около нуля, вероятно, стратегия SOL из набора BTC/ETH/SOL не имеет преимущества от покупки на просадке на дневном интервале. Эта итерация исправляет масштаб, чтобы результат можно было измерить, а не угадывать.
Отрицательное математическое ожидание на надёжной выборке из 18 сделок за 6 лет: profit_factor 0.688, total_return -41.5%, avg_trade_return_pct -0.339% (ниже ZERO), коэффициент Шарпа -0.092 (CI пересекает нулевую отметку и уходит в отрицательную зону), ожидание −$2,551 на сделку при avg_loss (12,275) ниже avg_win (16,895), но win_rate составляет всего 0.33. Это уязвимость к комиссиям на уровне NOT (комиссия составляет лишь 1.16% от валового результата): дневной сигнал покупать просадку при перепроданности на……Показать большеСвернуть
Отрицательное математическое ожидание на надёжной выборке из 18 сделок за 6 лет: profit_factor 0.688, total_return -41.5%, avg_trade_return_pct -0.339% (ниже ZERO), коэффициент Шарпа -0.092 (CI пересекает нулевую отметку и уходит в отрицательную зону), ожидание −$2,551 на сделку при avg_loss (12,275) ниже avg_win (16,895), но win_rate составляет всего 0.33. Это уязвимость к комиссиям на уровне NOT (комиссия составляет лишь 1.16% от валового результата): дневной сигнал покупать просадку при перепроданности на уровне RSI даёт отрицательный результат до вычета комиссий на SOL. Сделки корректно реализуют гипотезу (только длинные позиции, фильтр по SMA, сбалансированные выходы), поэтому это честная проверка, а предположение опровергнуто: стратегия теряет деньги именно в обычном (-17.0%) и стрессовом (-33.5%, коэффициент Шарпа -0.75) режимах, где покупка на просадке должна приносить пользу; лишь в спокойном режиме результат умеренно положительный (+5.3%). Шаблон BTC/ETH перепроданности на уровне RSI не переносится на SOL на дневном интервале: отскоки SOL сразу сходят на нет. Оптимизация параметров 3 не может изменить сигнал с PF-0.688 и отрицательным ожиданием (нет положительного валового преимущества, которое можно было бы улучшать); в предыдущих итерациях порог входа уже смягчали до RSI<45, но безрезультатно. Опасения QA насчёт преимущества подтвердились на всей истории. Результат соответствует L55 (стратегия на отскок/возврат к среднему по отдельному активу, PF < 1.15, отрицательная доходность → отказаться). Оптимизация не стоит 2 часов. abandon_class=negative_expectancy.
Реализация
Дневная стратегия возврата к среднему только для длинных позиций на бессрочном контракте SOLUSDT.BINANCE USD-M: покупка, когда Wilder RSI(14) опускается ниже 45, а цена закрытия остаётся выше 200-дневной SMA (покупка на просадке в бычьем режиме); выход при восстановлении RSI до 65, по жёсткому стопу 15% или через 45 дневных баров. Без плеча, номинал каждой сделки равен капиталу, три основных параметра (rsi_period, rsi_oversold, sma_period).
Результаты верификации
Попробуй приблизить rsi_oversold к нижней границе диапазона (~32), а rsi_exit — к ~50, чтобы условие входа действительно означало «перепроданность», как и предполагалось. Позволь оптимизатору исследовать заданные границы, а не фиксируй порог входа на наиболее свободном краю диапазона.
Гипотеза гласит: «Открыть длинную позицию, когда RSI(14) < 30» и «Закрыть, когда RSI >= 50». Активные значения в коде: rsi_oversold=45 (ограничено [32,45]) и rsi_exit=65 (ограничено [50,65]). Механизм и структура (RSI: вход при перепроданности + фильтр восходящего тренда SMA(200) + выход при восстановлении RSI + жёсткий стоп + лимит времени) точно соответствуют гипотезе; отклонение оптимизируемых порогов по величине допустимо, поэтому это не препятствие. Но RSI<45 не означает реальную «перепроданность»: значение лишь немного ниже средней линии 50, поэтому код покупает неглубокие откаты, а не экстремальные уровни перепроданности, названные в гипотезе.
Для QA действий не требуется; отмечено для сведения. При переходе на SPOT издержки полного цикла вырастут примерно до 0.20%, что усилит давление на и без того отрицательное преимущество на сделку.
Площадка — фьючерсы BINANCE USD-M с плечом 1.0; только длинные позиции, без шортов и преимущества за счёт funding. По правилам выбора площадки стратегии только для длинных позиций без плеча следует размещать на BINANCE_SPOT. Это соответствует площадке, прямо указанной в гипотезе, поэтому несоответствия нет, однако фьючерсная площадка здесь не даёт преимуществ: номинал позиции никогда не превышает капитал.
Бэктест в изолированной среде показывает уверенный убыток на достаточной выборке из 18 сделок за 2181 дней: total_return -41.5%, Sharpe -0.09, profit_factor 0.71, avg_trade_return_pct -0.339% (ниже нуля, а не просто ниже минимального уровня комиссий 0.15%). Убытки сосредоточены именно в режимах, где покупка на просадке должна помогать меньше всего или больше всего: спокойный режим +5.3%, но обычный -17.0% и стрессовый -33.5% (Sharpe -0.75). Комиссия составляет лишь 1.15% от валового результата, поэтому сигнал……Показать большеСвернуть
Бэктест в изолированной среде показывает уверенный убыток на достаточной выборке из 18 сделок за 2181 дней: total_return -41.5%, Sharpe -0.09, profit_factor 0.71, avg_trade_return_pct -0.339% (ниже нуля, а не просто ниже минимального уровня комиссий 0.15%). Убытки сосредоточены именно в режимах, где покупка на просадке должна помогать меньше всего или больше всего: спокойный режим +5.3%, но обычный -17.0% и стрессовый -33.5% (Sharpe -0.75). Комиссия составляет лишь 1.15% от валового результата, поэтому сигнал убыточен до вычета комиссий, а не просто уязвим к ним. В собственной заметке разработчик признаёт, что стратегия SOL из набора BTC/ETH/SOL может не иметь преимущества от покупки на просадке на дневном интервале. Кроме того, порог входа сильно отклонился от понятия «перепроданность» из гипотезы: RSI<45 (значение по умолчанию, верхняя граница диапазона [32,45]) лишь немного ниже средней линии 50 и приводит к покупке неглубоких просадок, а не экстремальных уровней перепроданности (в гипотезе указано RSI<30). Вероятно, из-за этого ослабления отскоки сразу затухают, а движение цены внутри сделки остаётся меньше комиссий или отрицательным. Перед затратами времени на оптимизатор стоит проверить, даст ли более строгий порог перепроданности (ближе к нижней границе [32]) вместе с фильтром SMA положительное матожидание на сделку; если нет, у стратегии SOL нет перспективной основы. Только рекомендация — окончательный вывод зависит от полного бэктеста и оптимизатора.
Обзор бэктеста
Шарп
-0,09
Общая доходность
-41,52%
Максимальная просадка
64,20%
Всего сделок
18
Доля прибыльных
33,3%
Профит-фактор
0,69
Сделки корректно реализуют гипотезу (18: покупка на просадках только для длинных позиций, цена выше фильтра 200-SMA, выходы при восстановлении RSI, по стопу или по времени) — это честная проверка предположения, а не ошибка кода
Надёжная выборка: 18 сделок за 2181 дней (6 лет); комиссия составляет лишь 1.16% валового результата, поэтому убыток связан не с уязвимостью к комиссиям, а с самим сигналом (NOT)
Отрицательное матожидание на надёжной выборке: total_return -41.5%, profit_factor 0.688, Sharpe -0.092 (CI [-0.92, 0.70]), матожидание -$2,551 на сделку, win_rate 0.33
avg_trade_return_pct -0.339% — ниже ZERO, а не просто ниже минимального уровня комиссий 0.15% USD-M; сигнал покупки на просадке убыточен до вычета комиссий
Гипотеза опровергнута именно там, где должна работать: убытки в обычном (-17.0%) и стрессовом (-33.5%, Sharpe -0.75) режимах — покупка на просадке не даёт преимущества отскока на дневном SOL; лишь в спокойном режиме результат слегка положительный (+5.3%)
Порог входа сместился к RSI<45 (чуть ниже средней линии 50) относительно порога перепроданности из гипотезы RSI<30, но даже исходное предположение не работает; шаблон BTC/ETH не переносится на SOL
Анализ
Порог бэктеста:
- метрики ненадёжны: противоречие — знак Sharpe 0.05 расходится со знаком total_return -0.95%. Sharpe рассчитан по ряду mtm_equity_curve, а доходность — по кривой капитала. Оценивай результат по кривой капитала.
История итераций
Проверка не пройдена (слой 3 — песочный бэктест): дымовой тест превысил лимит времени 300 с. Обычно это означает, что объём работы на каждом баре растёт вместе с историей: например, полное повторное сканирование ряда funding/дополнительных данных или пересоздание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй поиск по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Проверка не пройдена (слой 4 — проверка QA) [класс=hypothesis_mismatch]: - [edge_concern] Помимо проблемы соответствия гипотезе, бэктест в изолированной среде показывает чистый убыток с отрицательным преимуществом на малой выборке: total_return -10.6%, PF 0.625, avg_trade_return_pct -2.17% (отрицательное значение, ниже порога 0.15%), Sharpe -0.33 всего на 23 сделках. Этот класс стратегий с перепроданностью RSI и фильтром тренда неоднократно не проходил проверку при повторной настройке параметров OHLCV. Даже при……Показать большеСвернуть
Проверка не пройдена (слой 4 — проверка QA) [класс=hypothesis_mismatch]:
- [edge_concern] Помимо проблемы соответствия гипотезе, бэктест в изолированной среде показывает чистый убыток с отрицательным преимуществом на малой выборке: total_return -10.6%, PF 0.625, avg_trade_return_pct -2.17% (отрицательное значение, ниже порога 0.15%), Sharpe -0.33 всего на 23 сделках. Этот класс стратегий с перепроданностью RSI и фильтром тренда неоднократно не проходил проверку при повторной настройке параметров OHLCV. Даже при приведении к гипотезе условие RSI<30 выше 200-SMA ещё реже срабатывает на SOL, поэтому точная реализация не даст измеримого результата: выборка для проверки не достигнет порога в 10 сделок. Семейство стратегий покупки дневных провалов при перепроданности RSI на SOL имеет низкую ожидаемую вероятность пройти проверку.
- В коде не реализован заявленный в гипотезе фильтр безопасности. Гипотеза: «RSI(14) < 30 AND цена ABOVE 200-дневной SMA», причём фильтр 200-SMA явно «не позволяет выделять капитал активу в медвежьем режиме». Код: RSI < 42 AND close > 0.90 * SMA(50). Два отклонения меняют смысл фильтра, а не только величину порога: sma_period 200->50 сокращает горизонт, а sma_tolerance 0.90 меняет условие «выше SMA» на «не ниже 90% от SMA», разрешая вход вплоть до 10% BELOW 50-SMA — тем самым лишая фильтр заявленной защиты от медвежьего режима и допуская покупки на умеренном снижении, которое фильтр должен был исключить. Комментарий разработчика подтверждает, что ослабление было намеренным, чтобы увеличить число сделок, поскольку исходная гипотеза почти не срабатывала на SOL.
- position_size возвращает Decimal(str(raw)) без округления до точности объёма SOL (3). Судя по всему, шаблон выполняет квантование (23 сделок исполнены), но для надёжности округляй явно.
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.