Точный перенос стратегии AdxSmas от berlinguyinca для Freqtrade (ADX14>25 + пересечение SMA3/SMA6, 10% ROI, стоп -25%) на спотовом рынке NEARUSDT, таймфрейм 1h
Итог: Отменено
FreqtradeAdxSmasNearSpot
Сводка по итогам
FreqtradeAdxSmasNearSpot воспроизвела правила Freqtrade AdxSmas (пересечение SMA3/6 с фильтром ADX, +10% ROI, стоп -25%) на спотовом рынке NEARUSDT с таймфреймом 1h; сделки соответствовали спецификации. Примерно за 6 лет она совершила 745 сделок с фактором прибыли 0.80 и avg_trade_return_pct от -0.467%; до комиссий средняя доходность только по цене на сделку составляла около -0.014%. При проверке бэктеста аналитик отказался от неё из-за отрицательного математического ожидания и отметил, что оптимизация лишь повторила бы полностью зафиксированную конфигурацию; поэтому этапы оптимизации, анализа и оценки риска не проводились. Аналитик также отдельно отметил аномалию учётных данных для проверки движка: ликвидация -100% на денежном счёте 1x, после которой сделки продолжали отражать P&L.
Точный порт стратегии Freqtrade «AdxSmas» Герта Вольгемута (berlinguyinca), GPL-3.0, которая сама была адаптирована из Mynt AdxSmas.cs sthewissen. Автору — благодарность; любые заявления исходного кода о результативности не проверены, а решение принимает наш собственный бэктест с реальными комиссиями. Спецификация — файл Python для Freqtrade; правила и значения по умолчанию сохранены без изменений: таймфрейм 1h, TA-Lib ADX(14), SMA(3) как «short», SMA(6) как «long». ENTER LONG, когда ADX > 25 и short пересекает……Показать большеСвернуть
Точный порт стратегии Freqtrade «AdxSmas» Герта Вольгемута (berlinguyinca), GPL-3.0, которая сама была адаптирована из Mynt AdxSmas.cs sthewissen. Автору — благодарность; любые заявления исходного кода о результативности не проверены, а решение принимает наш собственный бэктест с реальными комиссиями. Спецификация — файл Python для Freqtrade; правила и значения по умолчанию сохранены без изменений: таймфрейм 1h, TA-Lib ADX(14), SMA(3) как «short», SMA(6) как «long». ENTER LONG, когда ADX > 25 и short пересекает long снизу вверх. EXIT по сигналу, когда ADX < 25 и long пересекает short снизу вверх. minimal_roi {'0': 0.10} означает тейк-профит +10% при любом сроке удержания сделки. stoploss = -0.25. Только длинные позиции (значение Freqtrade по умолчанию can_short=False). В исходном коде Mynt на C# используются SMA(3)/SMA(10) и асимметричная проверка пересечения; портирована версия на Python, а не версия на C#. Для нашей платформы адаптированы только следующие параметры: (1) Площадка и инструмент: NEARUSDT.BINANCE_SPOT. Стратегия открывает только длинные позиции без кредитного плеча, поэтому подходит для спотового рынка. NEAR выбрана из-за многолетней истории спотовых данных с интервалом 1h и редкого использования в корпусе: это позволяет избежать чрезмерно исследованной BTC/ETH и серии LINK/DOT/ATOM, использованной в последних портах Freqtrade. В источнике торговая пара не указана. (2) Исполнение: Freqtrade исполняет сигнал по цене открытия следующей свечи. На площадке 24/7 это соответствует варианту в реестре: рыночный ордер при закрытии сигнальной свечи. (3) Стоплосс -25% и выход +10% ROI — защитные внутрисвечные ордера, как и в бэктестинге Freqtrade, где проверяются минимум и максимум свечи: стоп-маркет только для сокращения позиции по цене entry*0.75 и тейк-профит по цене entry*1.10; оба исполняются платформой внутри свечи. Если одна свеча касается обоих уровней, применяется адаптивная последовательность OHLC движка, поскольку выбрать same_bar_policy нельзя. (4) Размер позиции: одновременно открыта одна позиция (Freqtrade max_open_trades=1 с параметром stake_amount «unlimited»), на каждый вход выделяется 95% капитала счёта. Денежный резерв 5% покрывает комиссию тейкера 0.10% и округление. Без наращивания позиции: сигналы на вход игнорируются, пока позиция открыта. Комиссии: спот Binance, комиссия тейкера 0.10% за сторону, около 0.20% за полный оборот. Расчёт комиссий приводится без прикрас: пересечение SMA3/6 на свечах 1h даёт быстрый сигнал. Типичное трендовое движение NEAR длительностью 1h после пересечения ADX>25 составляет около 1.5-3%. Убыточные сделки обычно не закрываются по сигналу, поскольку для выхода также требуется ADX<25; поэтому они могут дойти до стопа -25%. Прибыль ограничена уровнем +10%. Таким образом, средняя ожидаемая сделка неопределённа и может оказаться ниже спотового минимума 0.25%. Цель — точное воспроизведение, а не прогноз прибыльности. Новизна (L202): в предыдущих запусках портов AdxSmas не было. Отличительное правило — асимметричный вход и выход с условием ADX (для входа сила тренда >25, для выхода — ослабление <25 и обратное пересечение). Стратегия отличается от неудачных пересечений LTC SMA (без условия ADX, без лестницы ROI/stop) и от портов Freqtrade EMA20+OBV и Supertrend.
negative_expectancy (проверка минимального порога комиссий: avg_trade_return_pct -0.467% при пороге +0.25% BINANCE_SPOT). Доходность на сделку по необработанным ценам исполнения составляет -0.014% до комиссии за полный цикл около 0.20%, то есть около -0.21% после комиссий, но до влияния на цену. Значит, дело не в комиссиях: валовое преимущество около нуля. Данные: 745 длинных сделок на спотовом рынке NEARUSDT с таймфреймом 1h (2020-10–2026-10), PF 0.80, доля прибыльных сделок 43%, IC по исполненным сигналам……Показать большеСвернуть
negative_expectancy (проверка минимального порога комиссий: avg_trade_return_pct -0.467% при пороге +0.25% BINANCE_SPOT). Доходность на сделку по необработанным ценам исполнения составляет -0.014% до комиссии за полный цикл около 0.20%, то есть около -0.21% после комиссий, но до влияния на цену. Значит, дело не в комиссиях: валовое преимущество около нуля. Данные: 745 длинных сделок на спотовом рынке NEARUSDT с таймфреймом 1h (2020-10–2026-10), PF 0.80, доля прибыльных сделок 43%, IC по исполненным сигналам -0.011. Средняя валовая доходность на сделку отрицательна в 2022, 2024 и 2025, в 2023 она около нуля. Опасения по тестовому окну QA (-0.57%/сделку, PF 0.64) подтверждаются на всей истории. Оптимизация не поможет: контракт фиксирует все параметры, а список настраиваемых параметров пуст. Вывод относится только к точному переносу Freqtrade AdxSmas (ADX14>25, SMA3/6, +10% ROI, стоп -25%, капитал 95%) на NEARUSDT.BINANCE_SPOT с таймфреймом 1h. Он не проверяет оригинальную версию Mynt SMA3/10 или другие пары. OPERATOR LEDGER NOTE (отдельно от вывода): на счёте 1x CASH отображается -100% / ликвидация 2021-12-18. Реинвестирование примерно -0.21% чистой доходности за 745 сделок означает около -80%, а не -100%. Сделки также продолжают отражать P&L после 2026 на кривой с нулевым капиталом (количество последней сделки 833, +$181). Другие несоответствия: avg_position_pct 131%, avg_holding_bars 0 при среднем удержании 1d5h и учтённые $117k влияния на цену при $65k комиссий. Та же закономерность была отмечена в BchOkxFmzSingleSuperTrend453 и FreqtradeSupertrendLinkSpot. Нужна проверка движка и учётных данных, но доходность на уровне цены в любом случае отрицательна.
Реализация
Точный перенос стратегии AdxSmas от berlinguyinca для Freqtrade на спотовом рынке NEARUSDT, таймфрейм 1h. Открыть длинную позицию, когда TA-Lib ADX(14) > 25 и SMA(3) пересекает SMA(6) снизу вверх (qtpylib crossed_above: сейчас short>long, ранее short<=long). Выйти по сигналу, когда ADX < 25 и SMA(6) пересекает SMA(3) снизу вверх. Для каждого входа задаётся скобка ордеров: управляемый площадкой стоп-маркет -25% и лимитный тейк-профит +10%; оба исполняются внутри свечи. Одна позиция за раз, 95% капитала, только длинные позиции, без кредитного плеча.
Спецификация — файл Python для Freqtrade. ADX — инкрементальный точный аналог TA-Lib ADX: правила Уайлдера DM/TR, суммы начальных значений за -1 баров, первое значение ADX как среднее первых `period` значений DX (первое значение на баре 2p-1), затем сглаживание Уайлдера. При нулевом TR или нулевой сумме DI обновление пропускается, как и в TA-Lib. SMA вычисляются через ограниченную очередь. Всё состояние индикаторов хранится в скалярных атрибутах. calculate_signal возвращает непрерывный спред SMA (% от SMA6).……Показать большеСвернуть
Спецификация — файл Python для Freqtrade. ADX — инкрементальный точный аналог TA-Lib ADX: правила Уайлдера DM/TR, суммы начальных значений за -1 баров, первое значение ADX как среднее первых `period` значений DX (первое значение на баре 2p-1), затем сглаживание Уайлдера. При нулевом TR или нулевой сумме DI обновление пропускается, как и в TA-Lib. SMA вычисляются через ограниченную очередь. Всё состояние индикаторов хранится в скалярных атрибутах. calculate_signal возвращает непрерывный спред SMA (% от SMA6). Флаги пересечения входа и выхода рассчитываются на том же баре и считываются через should_enter/should_exit. minimal_roi Freqtrade {0: 0.10} и stoploss -0.25 — элементы скобки ордеров базового шаблона (stop_loss_pct/take_profit_pct). Они соответствуют зафиксированным ключам плана stoploss/roi_take_profit и имеют те же значения. should_exit реализует только выход по сигналу, поэтому повторного выхода нет. Размер позиции — 95% от расчётного капитала / цена закрытия; базовый шаблон ограничивает его доступными средствами с учётом комиссии тейкера. Учтено влияние комиссий: убыточные сделки обычно не достигают ни выхода при обратном пересечении ADX<25, ни TP, и могут дойти до -25%; поэтому средняя доходность сделки может быть ниже спотового порога 0.25%. Это точное воспроизведение поведения, оно сохранено.
Результаты верификации
Ничего не требуется. При желании обновляй индикаторы на каждом баре, в том числе ниже минимального порога, чтобы точнее соответствовать расчёту ADX за всю историю в Freqtrade.
min_bars_required() возвращает 100, намеренно переопределяя базовое значение по умолчанию и соответствуя контракту warmup_bars=100. Базовый шаблон не вызывает calculate_signal, пока не накоплено 100 баров. Поэтому состояние ADX/SMA начинается на баре 100, а первое значение ADX появляется примерно через 27 баров (около бара 127). Freqtrade рассчитывает ADX по всей истории. Сглаживание Уайлдера в TA-Lib сходится, поэтому после прогрева разница незначительна.
Нет.
Размер позиции составляет 95% от get_account_equity() / цены закрытия. _submit_entry_bracket передаёт его в _affordable_size, который ограничивает размер доступными средствами с учётом комиссии тейкера, поэтому перерасход CASH невозможен. Базовый шаблон обеспечивает одну открытую позицию за раз (should_enter вычисляется, только когда позиция закрыта). Это соответствует параметру Freqtrade max_open_trades=1 со ставкой «unlimited».
В неоптимизированном тестовом окне (533 дней, 258 закрытых длинных сделок) avg_trade_return_pct составляет -0.57% при минимальном пороге спотовых комиссий 0.25%, PF равен 0.64, а доля прибыльных сделок — 44%. Комиссия составляет лишь 11% от валового результата, поэтому валовое преимущество само по себе выглядит отрицательным, а не просто съеденным комиссиями. Это соответствует предупреждению самой гипотезы: убыточные сделки не достигают выхода при обратном пересечении ADX<25 и движутся к стопу -25% (наибольший……Показать большеСвернуть
В неоптимизированном тестовом окне (533 дней, 258 закрытых длинных сделок) avg_trade_return_pct составляет -0.57% при минимальном пороге спотовых комиссий 0.25%, PF равен 0.64, а доля прибыльных сделок — 44%. Комиссия составляет лишь 11% от валового результата, поэтому валовое преимущество само по себе выглядит отрицательным, а не просто съеденным комиссиями. Это соответствует предупреждению самой гипотезы: убыточные сделки не достигают выхода при обратном пересечении ADX<25 и движутся к стопу -25% (наибольший убыток -$19.2k), а прибыль ограничена на уровне +10%. Все параметры зафиксированы, а список настраиваемых параметров пуст, поэтому оптимизация ничего не изменит. Решение даст бэктест за всю историю. Вопрос по учёту для аналитика: -100% общей доходности с флагом «ликвидирован» на счёте 1.0x CASH не сходится с -0.57%/сделку x 258 сделками при экспозиции 95% (примерно -75% с реинвестированием). Также есть $28.5k учтённого свёрнутого влияния на цену, avg_position_pct равен 252%, а avg_holding_bars — 0.0 при среднем удержании 1d7h. Сверь учётные данные, прежде чем считать -100% свидетельством сигнала. Та же закономерность была отмечена в переносе FreqtradeSupertrendLinkSpot.
Обзор бэктеста
Шарп
0,10
Общая доходность
-100,00%
Максимальная просадка
100,00%
Всего сделок
745
Доля прибыльных
42,8%
Профит-фактор
0,80
Сделки соответствуют спецификации. Все 745 сделок — только длинные. Интервалы от входа до выхода составляют от -25% до +10%, что соответствует скобке стоп/ROI. Входы следуют правилу ADX>25 + пересечение SMA3/6. Входные данные чистые (0 пропущенных баров, кроме проверенных сбоев).
745 закрытых сделок за 6 лет — надёжная выборка.
Проверка минимального порога комиссий: заявленный avg_trade_return_pct составляет -0.467% при пороге +0.25% BINANCE_SPOT. Эта цифра включает влияние на цену, которое может быть завышено (см. примечание об учёте), поэтому я также проверил необработанные цены исполнения в файле подробностей. Средняя доходность только по цене на сделку — -0.014% (47.8% прибыльных сделок) BEFORE стоимости спотового входа-выхода около 0.20%, то есть чистый результат близок к -0.21%. Следовательно, отрицательное математическое ожидание не зависит от вопросов к учётным данным.
PF составляет 0.80, доля прибыльных сделок — 42.8%, а IC по исполненным сигналам равен -0.011 (t=-2.4). Средняя валовая доходность по цене в разбивке по году входа: 2020 +0.36%, 2021 +0.57%, 2022 -0.32%, 2023 0.00%, 2024 -0.98%, 2025 -0.30%, 2026 +1.03%. Валовое преимущество нестабильно, а его среднее значение в целом — около 0.
Как и предполагала гипотеза, соотношение прибыли и убытка асимметрично. Прибыль ограничена на уровне +10%. Убыточные сделки редко достигают выхода, потому что для него нужны и ADX<25, и обратное пересечение, поэтому убыток может дойти до стопа -25% (наибольший убыток -$35.5k).
Все параметры зафиксированы (tunable = {}), поэтому оптимизация лишь повторно воспроизвела бы ту же неизменную конфигурацию.
Сводка по итогам
Быстрое пересечение SMA3/6 на барах 1h, где прибыль ограничена на уровне +10%, а убыток может дойти до стопа -25%, не дало валового преимущества на спотовом рынке NEAR. В будущих переносах сначала следует убедиться, что преимущество только по цене заметно превышает стоимость входа-выхода около 0.20%. Отдельно требуется проверить движок и учёт ликвидации -100% на денежном счёте 1x.
Аналитик отказался от стратегии на этапе проверки бэктеста из-за отрицательного математического ожидания: avg_trade_return_pct составил -0.467% при пороге +0.25% BINANCE_SPOT, валовое преимущество было около нуля и менялось из года в год, а IC по исполненным сигналам составлял -0.011. Оптимизация не могла помочь, так как все параметры были зафиксированы, а список настраиваемых параметров пуст.
Точный перенос стратегии AdxSmas от berlinguyinca для Freqtrade на спотовом рынке NEARUSDT, таймфрейм 1h: открыть длинную позицию, когда ADX(14) > 25 и SMA(3) пересекает SMA(6) снизу вверх; выйти, когда ADX < 25 и SMA(6) снова пересекает SMA(3) снизу вверх; тейк-профит +10%, стоп -25%.
Бэктест охватил период с 2020-10 по 2026-10 и 745 длинных сделок: общая доходность -100% (счёт был ликвидирован 2021-12-18), коэффициент Шарпа 0.10, фактор прибыли 0.80, доля прибыльных сделок 42.8% и avg_trade_return_pct -0.467%. До комиссий доходность по необработанным ценам исполнения составляла около -0.014% на сделку, или примерно -0.21% после спотовых комиссий за вход и выход около 0.20%.
Анализ
AdxSmas
Анализ
AdxSmas.py
AdxSmas.cs
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.