Стратегии
Freqtrade TrendFollowingStrategy — зафиксированный порт исходника на 5m EMA/OBV на фьючерсах LINK
Итог: Отменено
FreqtradeFrozenLinkTrendFollowing
Сводка по итогам
Эта стратегия без изменений перенесла TrendFollowingStrategy от freqtrade EMA20/OBV на фьючерсы LINK с таймфреймом 5 минут, только длинные позиции, все параметры зафиксированы. По результатам бэктеста за весь период стратегия выглядела жизнеспособной с учётом издержек: +6.25% за 513 сделок и 0.335% на сделку, что выше порога комиссий. При этом коэффициент Шарпа составил лишь 0.262, а корреляция с «купи и держи» по LINK была 0.95. Большая часть прибыли пришлась на 2020; коэффициенты Шарпа вне выборки и на контрольной выборке составили 0.02 и -0.34. После 2 итераций аналитик отказался от стратегии из-за провала жёсткого порога положительных лет (4 из 7); параметры уже нечего настраивать, бумажная торговля не рекомендуется.
Гипотеза
Это запрошенное воспроизведение исходника, поэтому провалы исторического импульса не оправдывают изменение правил сигналов или отказ от эксперимента. LINK позволяет избежать ещё одного воспроизведения BTC, хотя corpus_concentration пуст, и фактическая концентрация неизвестна. Буквальное унаследованное поведение коротких позиций делает стратегию длинной, несмотря на расположение файла фьючерсов; включение коротких позиций изменило бы исходную исполняемую стратегию. Исходный таймфрейм 5 минут исключает Hyperliquid для проверки на длинной истории. Запрошенное воспроизведение имеет приоритет над квотами портфеля.
Реализация
Точная версия TrendFollowingStrategy от freqtrade на LINKUSDT.BINANCE 5m. Длинные позиции открываются по пересечению span-20 adjust=False EMA при росте OBV. Короткие сигналы рассчитываются, но не исполняются, поскольку исходник наследует can_short=False. Выходы: сигнал exit_long; таблица ROI {0:15%, 30:10%, 60:5%} в качестве размещённого лимитного тейк-профита reduce-only; стоп-лосс -26.5% с трейлинг-стопом (5% после превышения прибылью отступа 10%) в качестве внутрисвечного стопа reduce-only, который только повышается.
Итерация 2 устраняет проблему QA: выходы ROI больше не ждут закрытия свечи. После исполнения входа размещается ордер GTC SELL LIMIT, который может только уменьшать позицию, по цене входа, скорректированной с учётом комиссии: ROI entry*(1+fee)*(1+roi)/(1-fee). При каждом закрытии свечи стратегия определяет, какой уровень ROI применяется к следующей свече, и перемещает лимитный ордер на границах 30 и 60 минут. Длительность сделки измеряется на открытии этой свечи, как это делает Freqtrade, поэтому механизм сопоставления ордеров платформы исполняет лимитный ордер внутри свечи при достижении ценой целевого уровня. Если закрытие уже выше нового применимого уровня ROI, стратегия выходит рыночным ордером по этой цене закрытия, которая является ценой открытия следующей свечи; в таком же случае Freqtrade выходит по цене открытия свечи. При закрытии позиции любым способом on_order_filled отменяет оставшуюся защиту (стоп-ордер или лимитный ордер ROI). Логика сигналов, размер позиции, стоп-лосс и трейлинг-логика не изменены.
Результаты верификации
Изменения не требуются. Если нужно точное совпадение, опиши подтягивание уровня при закрытии бара в port_deviations.
Момент срабатывания трейлинг-стопа немного отличается от Freqtrade. При закрытии каждого бара уровень подтягивается от максимума бара; стратегия выходит по рыночному ордеру, если цена закрытия равна уровню NEW или ниже него. Бэктестер Freqtrade обрабатывает уровень трейлинг-стопа, обновлённый внутри той же свечи, по собственным правилам (он может применить новый уровень к минимуму этой свечи). Для проверки по цене закрытия эффект невелик, а размещённый reduce-only STOP_MARKET обрабатывает внутрисвечные срабатывания на ранее установленном уровне.
При частичном исполнении SELL можно при желании изменить объём защитных ордеров.
Если лимитный ордер ROI исполнен частично (сторона события SELL, позиция ещё открыта), стоп и лимит сохраняют исходный объём. Оба ордера reduce-only, поэтому позиция не может развернуться. Симулируемая площадка исполняет ордера полностью, так что в бэктесте это невозможно.
Нет.
min_bars_required() = 1 переопределяет базовое значение по умолчанию 20 (это отмечено статическим анализом). Это сделано намеренно и корректно: pandas ewm(adjust=False) EMA и TA-Lib OBV оба инициализируются на первом баре, а зафиксированный план добавляет 200 прогревочных баров на границах окон.
Симуляция охватывает 70 дней и всего 11 закрытых сделок (10 прибыльных около уровня 5% ROI, 1 убыток около -26.5% на стопе). Стратегия, которая часто выигрывает понемногу при широком стопе, чувствительна к нескольким крупным убыткам, поэтому нужно проверить всю историю на скопления срабатываний стоп-лосса во время распродаж LINK. Отчёт симуляции внутренне противоречив: avg_holding_bars = 0.0, но avg_holding_period = 6d 3h; total_return 1.71 и max_drawdown 0.5186 не соответствуют портфелю с экспозицией 3.8% (похоже на проценты). Позиции по бессрочному фьючерсу удерживаются днями, но funding_folded = false и funding_events_available = 0 в этом окне. Перед тем как доверять доходности на сделку (~4% от номинала), полный бэктест должен учитывать финансирование.
Обзор бэктеста
- Шарп
- 0,26
- Общая доходность
- 6,25%
- Максимальная просадка
- 8,25%
- Всего сделок
- 513
- Доля прибыльных
- 84,8%
- Профит-фактор
- 1,08
513 закрытых сделок в длинную позицию за 2,426 дней дают работоспособную и значительную выборку. Изученные сделки показывают размер позиции относительно капитала и выходы около уровня 5% ROI, что согласуется с заявленной реализацией только длинных позиций.
Средняя чистая доходность сделки составляет 0.3352%, что выше минимального порога для оценки фьючерсов 0.15%; фактор прибыли равен 1.0785, а общая доходность положительна и составляет 6.2525%. Перейдите к замороженной хронологической проверке, не подбирая параметры.
Полный отчёт снимает опасение QA по поводу отсутствующих данных о финансировании: финансирование учтено в PnL, доступны события 7,138, а в изученных сделках есть списания за финансирование.
Опасение насчёт профиля выплат QA остаётся актуальным: средний убыток — $1,021 против средней прибыли $198. При доле прибыльных сделок 84.8% ожидание лишь умеренно положительное.
Коэффициент Шарпа равен 0.262, корреляция с бенчмарком — 0.951, заявленные альфа и информационный коэффициент отрицательны. Это основание для проверки на новых данных, но не для отказа до оптимизации.
avg_holding_bars по-прежнему не согласуется с указанной многодневной длительностью удержания; для оценки длительности используй датированные записи сделок.
Файл для исходящих данных не удалось записать, поскольку в этой сессии доступна только файловая система для чтения.
Анализ
Реализация работает: закрыто сделок 513, все длинные, коротких нет (соответствует унаследованному can_short=False), размер позиции рассчитывается относительно капитала, нереализованный P&L конечной позиции равен нулю, учёт сходится.
Экономика сделки превышает издержки: avg_trade_return_pct 0.335% против порога экономики фьючерсов 0.20%; комиссии составляют лишь 1.8% от валовой прибыли, так что проблема не в них.
Максимальная просадка 8.25% укладывается в заранее установленный лимит 15%; выполнены все четыре проверяемых заранее прогноза (сделки, доходность, DD, средняя сделка).
Порог HARD не пройден (исключения не допускаются): положительный результат только в 4 из 7 календарных лет (57% < 60%). Продвижение невозможно.
Вне выборки преимущества нет. Объединённая внешняя OOS (15 хронологических окон, ~3.9 лет почасовой чистой доходности MTM, 34,200 наблюдений) имеет годовой коэффициент Шарпа 0.02 (t=0.04). На контрольной выборке коэффициент Шарпа -0.34 (t=-0.39). Ни один результат незначим, но обе точечные оценки равны нулю или ниже, а не дают слабых положительных свидетельств.
Прибыль сосредоточена в первом году: на 2020 приходится +4.90% из общего результата +6.25% (75% прибыли). Вместе 2021-2026 добавляют около +1.35% за ~5.7 лет. max_drawdown_duration_days = 1,947: новых максимумов капитала нет с начала 2021.
Альфы относительно «купи и держи» по LINK нет: альфа -1.5%/год, информационный коэффициент -0.74. IC исполненных сигналов равен -0.036.
Профиль выплат «собирать по копейке»: доля прибыльных сделок 0.85, коэффициент выплат 0.19 (средняя прибыль $198 против среднего убытка $1,021); PF 1.078; CVaR95 0.46% против VaR95 0.29%; асимметрия доходности -0.96, эксцесс 14.7.
Коэффициент Кальмара 0.11 против порога 0.5; стрессовые периоды в основном убыточны (запрет в Китае 2021 -3.0%, LUNA -1.7%, FTX -1.6%, керри-трейд в иене -1.0%).
мягкий
неубедительный
t >= 2
жёсткий
t >= 2 (HAC/DSR)
рекомендательный
История итераций
Поддерживать размещённый тейк-профит reduce-only по цене ROI с учётом комиссий и обновлять его на границах 30 и 60 минут. Отменять конкурирующую защиту при закрытии позиции. Использовать сопоставление ордеров платформой, а не ретроспективное исполнение по максимуму завершённого бара.
Объявление источника minimal_roi на исходной строке 13 включает выходы Freqtrade ROI, когда внутрисвечная цена достигает соответствующей цели. В строках порта 110–118 вместо этого требуется, чтобы цена закрытия превысила цель; размещённого тейк-профита нет. Например, через 60 минут бар достигает чистой прибыли 6%, но закрывается на уровне 4%: по правилу источника 5% ROI позиция закрывается, а здесь остаётся открытой. Это меняет механизм выхода; указанная замена исполнения по закрытию сигнального бара не раскрывает замену внутрисвечных выходов ROI целевыми уровнями, проверяемыми только при закрытии. Официальная семантика: [бэктестинг Freqtrade](https://www.freqtrade.io/en/stable/backtesting/#assumptions-made-by-backtesting).
Сводка по итогам
Высокая доля прибыльных сделок при большой средней доходности сделки может скрывать профиль «собирать по копейке» (средняя прибыль $198 против среднего убытка $1,021) и концентрацию прибыли в одном раннем году. Поэтому проверь годовую стабильность и результаты вне выборки, прежде чем считать экономику отдельных сделок преимуществом.
По итогам проверки бэктеста стратегию направили на оптимизацию, но после неё аналитик отказался от неё как от premise_falsified: не пройден жёсткий порог (положительный результат только в 4 из 7 календарных лет). Данные также показали отсутствие преимущества: коэффициент Шарпа вне выборки равен нулю или ниже, на 75% приходится прибыли от 2020, новых максимумов капитала нет 1,947 дней, альфа относительно «купи и держи» по LINK отрицательна.
Замороженный точный порт TrendFollowingStrategy из freqtrade для фьючерсов с интервалом 5 минут по инструменту LINKUSDT.BINANCE на площадке 1x: вход в длинную позицию, когда цена закрытия пересекает вверх span-20 EMA при росте OBV; выход осуществляется по лестнице 15/10/5% ROI, стоп-лоссу -26.5% и трейлинг-стопу; короткие позиции не открываются, поскольку исходный класс наследует can_short=False.
За 2,426 дней и 513 длинных сделок бэктест показал доходность +6.25%, коэффициент Шарпа 0.262, среднюю доходность сделки 0.335%, долю прибыльных сделок 84.8%, фактор прибыли 1.078 и максимальную просадку 8.25%; вне выборки объединённый коэффициент Шарпа по скользящему анализу вне выборки составил 0.02 (t=0.04), а на контрольной выборке — -0.34.
Анализ
TrendFollowingStrategy
Анализ
TrendFollowingStrategy.py
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.