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

Стратегии

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); параметры уже нечего настраивать, бумажная торговля не рекомендуется.

Гипотеза

Точная версия TrendFollowingStrategy от freqtrade, GPL-3.0, на коммите f3340ce11f5bdf62f598522e64d1f5638eaa13f5. Сохраняются таймфрейм 5 минут, экспоненциальное среднее pandas span-20 adjust=False, TA-Lib OBV, все четыре выражения сигналов, расписание ROI и значения трейлинг-стопа по умолчанию. Важное поведение исходника: класс не задаёт can_short=True, поэтому унаследованные настройки Freqtrade отключают короткие позиции; расчёт коротких сигналов сохраняется, но сделки по ним не исполняются. Это значение по……Показать большеСвернуть

Точная версия TrendFollowingStrategy от freqtrade, GPL-3.0, на коммите f3340ce11f5bdf62f598522e64d1f5638eaa13f5. Сохраняются таймфрейм 5 минут, экспоненциальное среднее pandas span-20 adjust=False, TA-Lib OBV, все четыре выражения сигналов, расписание ROI и значения трейлинг-стопа по умолчанию. Важное поведение исходника: класс не задаёт can_short=True, поэтому унаследованные настройки Freqtrade отключают короткие позиции; расчёт коротких сигналов сохраняется, но сделки по ним не исполняются. Это значение по умолчанию описано в [настройке стратегии Freqtrade](https://www.freqtrade.io/en/stable/strategy-customization/). Торговать LINKUSDT.BINANCE на маржинальном счёте на 1x. Адаптации платформы: размер позиции относительно капитала, фактические комиссии платформы, исполнение рыночного ордера при закрытии бара с сигналом вместо открытия следующего бара и внутрисвечные защитные стопы, сопоставляемые платформой. Защита на стороне биржи не требуется. Предыдущий контракт не был предоставлен или найден, поэтому подтвердить выбор площадки нельзя. Указанный дефект проверки исправлен: minimal_roi кодируется как числовая последовательность с отдельной числовой последовательностью минут, что сохраняет точное расписание. Предварительное исследование доходности не проводилось.

Это запрошенное воспроизведение исходника, поэтому провалы исторического импульса не оправдывают изменение правил сигналов или отказ от эксперимента. LINK позволяет избежать ещё одного воспроизведения BTC, хотя corpus_concentration пуст, и фактическая концентрация неизвестна. Буквальное унаследованное поведение коротких позиций делает стратегию длинной, несмотря на расположение файла фьючерсов; включение коротких позиций изменило бы исходную исполняемую стратегию. Исходный таймфрейм 5 минут исключает Hyperliquid для проверки на длинной истории. Запрошенное воспроизведение имеет приоритет над квотами портфеля.

premise_falsified (проверка нижнего порога комиссий: 0.335% против 0.20%, значит комиссии не причина). Это отвергает зафиксированный 5-минутный LINKUSDT.BINANCE порт TrendFollowingStrategy от freqtrade (EMA20 пересечение + OBV, лестница 15/10/5% ROI, стоп -26.5%, трейлинг-стоп с отступом 5%/10%, только длинные позиции согласно унаследованному can_short=False). Это не опровергает стратегию freqtrade на других парах или следование тренду в Freqtrade в целом. Продвижение блокирует жёсткий порог: положительный……Показать большеСвернуть

premise_falsified (проверка нижнего порога комиссий: 0.335% против 0.20%, значит комиссии не причина). Это отвергает зафиксированный 5-минутный LINKUSDT.BINANCE порт TrendFollowingStrategy от freqtrade (EMA20 пересечение + OBV, лестница 15/10/5% ROI, стоп -26.5%, трейлинг-стоп с отступом 5%/10%, только длинные позиции согласно унаследованному can_short=False). Это не опровергает стратегию freqtrade на других парах или следование тренду в Freqtrade в целом. Продвижение блокирует жёсткий порог: положительный результат только в 4 из 7 календарных лет. Отказ основан на измеренных данных об отсутствии преимущества, а не только на недостаточной статистической значимости: (1) объединённая внешняя OOS по 15 хронологическим окнам (~3.9 лет) имеет коэффициент Шарпа 0.02, а коэффициент Шарпа на контрольной выборке — -0.34; (2) на 2020 приходится 75% прибыли, а период 2021-2026 в сумме даёт около +1.35%, без нового максимума капитала 1,947 дней; (3) альфа относительно стратегии «купи и держи» LINK составляет -1.5%/год (IR -0.74), а IC по исполненным сигналам равен -0.036; (4) профиль выплат — «собирать по копейке» (85% прибыльных сделок, выплаты 0.19, PF 1.078, асимметрия -0.96). Все параметры зафиксированы, настраивать нечего. Бумажная торговля не рекомендуется, поскольку жёсткий порог не пройден, а точечные оценки OOS и контрольной выборки нулевые или отрицательные, а не слабо положительные.

Реализация

Точная версия 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)

рекомендательный

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

Проверка не пройдена (уровень 4 — проверка QA) [class=hypothesis_mismatch]: - [critical] Объявление источника minimal_roi на исходной строке 13 включает выходы Freqtrade ROI, когда внутрисвечная цена достигает соответствующего целевого уровня. В строках порта 110–118 вместо этого требуется, чтобы цена закрытия превысила цель; размещённого тейк-профита нет. Например, через 60 минут бар достигает чистой прибыли 6%, но закрывается на уровне 4%: по правилу источника 5% ROI позиция закрывается, а здесь остаётся……Показать большеСвернуть

Проверка не пройдена (уровень 4 — проверка QA) [class=hypothesis_mismatch]: - [critical] Объявление источника 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). (строка 118) — исправление: поддерживать размещённый тейк-профит reduce-only по цене ROI с учётом комиссий и обновлять его на границах 30 и 60 минут. Отменять конкурирующую защиту при закрытии позиции. Использовать сопоставление ордеров платформой, а не ретроспективное исполнение по максимуму завершённого бара.

Поддерживать размещённый тейк-профит 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 — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.