Бэктест стратегии: откат к среднему при восходящем тренде с широким шагом, только один уровень: купить при падении на >=8% от максимума за 10 дней, если цена выше 200-дневной SMA; продать на том же шаге вверх (ETH + ADA Binance Spot, 4H, только длинные позиции, одна позиция на монету)
Итог: Отменено
WideStepUptrendPullbackOneRungSpot
Сводка по итогам
После трёх итераций стратегия проверила подход с одной позицией и откатом по тренду на ETH и ADA. Её 432 закрытых сделок принесли доходность -42.26% и почти нулевой коэффициент Шарпа, поскольку убытки ADA перекрыли положительный вклад ETH. По итогам проверки бэктеста от этой адаптации отказались из-за отрицательного математического ожидания и недостаточной доходности на сделку, до оптимизации и последующих проверок.
Классификация источника: (а) конкретная торговая идея. В публикации Zero описана сетка с фиксированным процентом и 10 долями капитала: вложить половину капитала, покупать по одной доле при каждом снижении на 5% и продавать по одной при каждом росте на 5%, считая плавающий убыток ценой «создания ATM». Заявления автора о доходности не проверены. В исходном виде это устаревшее семейство сеток и инвентарных стратегий: сетки, лестницы и стратегии постоянной доли капитала провалились в 5 из 5 в последнем наборе данных……Показать большеСвернуть
Классификация источника: (а) конкретная торговая идея. В публикации Zero описана сетка с фиксированным процентом и 10 долями капитала: вложить половину капитала, покупать по одной доле при каждом снижении на 5% и продавать по одной при каждом росте на 5%, считая плавающий убыток ценой «создания ATM». Заявления автора о доходности не проверены. В исходном виде это устаревшее семейство сеток и инвентарных стратегий: сетки, лестницы и стратегии постоянной доли капитала провалились в 5 из 5 в последнем наборе данных 50 (урок 171); точные переносы скриптов FMZ тоже провалились (урок 167). Стоит сохранить два элемента. Во-первых, шаг WIDE: автор настаивает, что полный цикл должен приносить не менее 5%, то есть примерно 25x от спотового цикла 0.20%; в отличие от сеток с тесными уровнями, которые провалились из-за комиссий. Во-вторых, предположение, что инструмент «не обрушится 100->10». Здесь оно заменено наблюдением за рынком: цена выше 200-дневной SMA, а не предположением автора. В новой формулировке сохранён уровень ONE. Нет наращивания позиции, усреднения при снижении и диапазона ребалансировки. Одна позиция по каждой монете открывается, если цена упала на `step` ниже максимума закрытия за 10 дней, при восходящем долгосрочном тренде. Прибыль фиксируется на уровне цена входа x (1+шаг), то есть «продать одну долю на шаге вверх» из сетки; позиция закрывается по стопу на уровне цена входа x (1-stop_mult*шаг), где исходная сетка купила бы ещё. Инструменты: ETHUSDT.BINANCE_SPOT и ADAUSDT.BINANCE_SPOT, торгуются независимо на свечах 4H, у каждого своя позиция, ранжирования нет. Спотовый рынок подходит для конструкции только с длинными позициями и без кредитного плеча. BINANCE_SPOT составляет 11% корпуса, меньше целевого значения 15%. HONEST PRE-STUDY (срез на момент времени, бессрочные контракты OKX на свечах 4H как замена тем же монетам, 2020-2026, затраты на сделку 0.12%): затухание импульса UNGATED в обе стороны LOSE на каждой монете и при каждом шаге: ETH -0.65%/сделку, ADA -0.39%, SOL -1.00% при шаге 8%. Работает фильтр тренда, и только для длинных позиций. Сделки в длинную сторону с фильтром тренда: ETH +0.65%/сделку (n=140, шаг 8%, стоп 1.5x) и +0.89% (n=86, шаг 10%); ADA +0.08% (n=197) и +0.17% (n=130); SOL -0.20% / +0.09%, поэтому SOL исключён. Зеркальные короткие позиции принесли убыток на ETH, поэтому конструкция рассчитана только на длинные позиции. Годовые результаты меняют знак (ETH 2021/2022/2025 отрицательные). Это скромное и хрупкое преимущество, поэтому прогнозы ниже соответствуют этой оценке.
Источник — сетка инвентарных позиций, которую уроки 167/171 считают устаревшей. Вместо точного переноса она переформулирована как стратегия с одним уровнем, фильтром восходящего тренда и широким шагом — единственный вариант, показавший хоть какое-то положительное математическое ожидание в предварительном исследовании. Двустороннее затухание импульса без фильтра, наиболее буквальная трактовка сетки, принесло убыток на каждой проверенной монете и при каждом шаге; зеркальная короткая сторона тоже убыточна, поэтому обе исключены. Конструкция остаётся на спотовом рынке: она предусматривает только длинные позиции и не использует кредитное плечо. ETH и ADA выбраны вместо SOL на основании предварительных результатов, до любого бэктеста. Для ограничения переоптимизации настраиваются только шаг и stop_mult. Прогнозы намеренно скромные (OOS коэффициент Шарпа 0.5, 0.25%/сделку), поскольку преимущество невелико и зависит от режима рынка.
negative_expectancy: отклонить оптимизацию этой одноуровневой адаптации на ETH-плюс-ADA. Совокупный портфель имеет отрицательное фактическое математическое ожидание, PF ниже единицы и доходность на сделку намного ниже порога проверки спотовой стратегии. Подтверждённых дефектов кода, оправдывающих итерацию разработчика, нет. Положительный самостоятельный результат ETH заслуживает отдельного изучения, но не подтверждает фиксированный портфель из двух монет. Этот вердикт относится к данной адаптации, а не к сетке инвентарных позиций исходного автора или стратегиям отката в целом.
Реализация
Независимые сделки с откатом в одну позицию по ETH и ADA на Binance Spot, свечи 4H: покупка при падении на 8% от максимума закрытия за 60 баров, если цена выше 1200-барной SMA; цель по ордеру на выход — 8%, стоп по ордеру — 12%, лимит удержания — 42 баров. На каждую монету выделяется 45% капитала портфеля.
Меняется только min_bars_required на 1, чтобы основная инкрементальная SMA получала бары с самого начала, как это уже делает ADA SMA. Неизменный фильтр готовности скользящего окна требует 1200 наблюдений до входа, что позволяет заполнить обе SMA в рамках зарегистрированного выровненного периода прогрева длиной 1210 баров, в том числе при новых запусках со сбросом и прогревом. Вся торговая логика и разрешённые параметры исследования остаются без изменений. Убытки в песочнице и слабость в стрессовом режиме носят рекомендательный характер; для положительной средней процентной доходности при отрицательном среднем долларовом PnL конвейер отчётности должен согласовать взвешивание по номиналу и издержки до выводов о прибыльности. Утверждений о прибыльности нет.
Результаты верификации
В песочнице зафиксированы просадка 67.31% и отрицательная доходность в стрессовом режиме, несмотря на положительную совокупную доходность. Анализ за всю историю должен сопоставить эти показатели с установленным ограничением просадки 25%; они не доказывают наличие дефекта корректности.
Обзор бэктеста
Шарп
0,01
Общая доходность
-42,26%
Максимальная просадка
69,79%
Всего сделок
432
Доля прибыльных
57,4%
Профит-фактор
0,95
Журнал сделок показывает 432 закрытых длинных позиций по обеим монетам, максимальное время удержания — семь дней, а выборочные выходы по тейк-профиту близки к целевому шагу 8%.
Только ETH принёс $ 8,119 на 174 сделках, в среднем 0.436% на сделку.
Совокупный портфель потерял 42.26%; PF 0.952, а средняя доходность сделки составила 0.0106%, что ниже заданного порога проверки спотовой стратегии 0.25%. Это измеренное отрицательное математическое ожидание на значительной выборке.
ADA потерял $ 50,382 на 258 сделках, в среднем -0.276% на сделку; это перекрывает положительный вклад ETH.
Опасения QA по поводу стрессового режима подтвердились: доходность в стрессовом режиме составила -69.57%. Просадка за всю историю составила 69.79%; это подтверждает экономические опасения, но не является единственной причиной отклонения.
Выборочная кривая равновзвешенного бенчмарка выросла примерно на 843.25% от начала оценки; выборочная просадка составила 78.41%. Информационное отношение стратегии — -0.890.
Направление сделок и время удержания соответствуют общему механизму реализации, но условия тренда при входе и отката независимо по историческим барам не проверялись.
История итераций
Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['step', 'sma_bars', 'alloc_pct', 'stop_mult', 'cash_buffer', 'min_notional', 'cooldown_bars', 'max_hold_bars', '_optimization_plan', 'high_lookback_bars'] Проверьте, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: min_bars_required()=1201 превышает self._max_bars=500: буфер баров обрезается до _max_bars, поэтому прогрев не может завершиться и calculate_signal() никогда не вызывается (стратегия не……Показать большеСвернуть
Проверка не пройдена (уровень 2 — синтетические сценарии):
Использованные параметры: ['step', 'sma_bars', 'alloc_pct', 'stop_mult', 'cash_buffer', 'min_notional', 'cooldown_bars', 'max_hold_bars', '_optimization_plan', 'high_lookback_bars']
Проверьте, что __init__ задаёт все атрибуты из self.parameters.get().
- steady_uptrend: min_bars_required()=1201 превышает self._max_bars=500: буфер баров обрезается до _max_bars, поэтому прогрев не может завершиться и calculate_signal() никогда не вызывается (стратегия не совершала бы сделок). Исправление: задать self._max_bars >= min_bars_required() в __init__ или сократить период просмотра.
- steady_downtrend: min_bars_required()=1201 превышает self._max_bars=500: буфер баров обрезается до _max_bars, поэтому прогрев не может завершиться и calculate_signal() никогда не вызывается (стратегия не совершала бы сделок). Исправление: задать self._max_bars >= min_bars_required() в __init__ или сократить период просмотра.
- flat_ranging: min_bars_required()=1201 превышает self._max_bars=500: буфер баров обрезается до _max_bars, поэтому прогрев не может завершиться и calculate_signal() никогда не вызывается (стратегия не совершала бы сделок). Исправление: задать self._max_bars >= min_bars_required() в __init__ или сократить период просмотра.
- volatility_spike: min_bars_required()=1201 превышает self._max_bars=500: буфер баров обрезается до _max_bars, поэтому прогрев не может завершиться и calculate_signal() никогда не вызывается (стратегия не совершала бы сделок). Исправление: задать self._max_bars >= min_bars_required() в __init__ или сократить период просмотра.
- zero_volume: min_bars_required()=1201 превышает self._max_bars=500: буфер баров обрезается до _max_bars, поэтому прогрев не может завершиться и calculate_signal() никогда не вызывается (стратегия не совершала бы сделок). Исправление: задать self._max_bars >= min_bars_required() в __init__ или сократить период просмотра.
- price_gap: min_bars_required()=1201 превышает self._max_bars=500: буфер баров обрезается до _max_bars, поэтому прогрев не может завершиться и calculate_signal() никогда не вызывается (стратегия не совершала бы сделок). Исправление: задать self._max_bars >= min_bars_required() в __init__ или сократить период просмотра.
Проверка не пройдена (уровень 4 — проверка QA) [class=code_defect]: - [edge_concern] Убытки в песочнице и слабые результаты в стрессовом режиме носят рекомендательный характер. Положительная средняя процентная доходность сделки при отрицательном среднем долларовом PnL требует сверки номинального взвешивания и затрат до выводов о прибыльности. - [критично] min_bars_required() возвращает 1201, но FactoryStrategy._maybe_process_primary() не вызывает calculate_signal() до поступления такого количества основных баров.……Показать большеСвернуть
Проверка не пройдена (уровень 4 — проверка QA) [class=code_defect]:
- [edge_concern] Убытки в песочнице и слабые результаты в стрессовом режиме носят рекомендательный характер. Положительная средняя процентная доходность сделки при отрицательном среднем долларовом PnL требует сверки номинального взвешивания и затрат до выводов о прибыльности.
- [критично] min_bars_required() возвращает 1201, но FactoryStrategy._maybe_process_primary() не вызывает calculate_signal() до поступления такого количества основных баров. Скользящий SMA для ETH обновляется только внутри calculate_signal(), поэтому первое наблюдение появляется на баре 1201, а готовность достигается лишь на баре 2399. ADA обновляет скользящий SMA на каждом дополнительном баре и достигает готовности на баре 1200. В результате ETH пропускает примерно 200 дополнительных дней с допустимыми сигналами и остаётся неготовым после предусмотренного исследовательским контрактом прогрева в 1210 баров. Увеличение _max_bars устраняет ограничение ёмкости буфера, но не исправляет инициализацию индикатора. (строка 93) — исправление: разрешить calculate_signal() получать основные бары с самого начала, например возвращая 1 из min_bars_required() и сохраняя существующий фильтр входа по готовности скользящего показателя. Проверить, что после предусмотренного прогрева в 1210 баров обе SMA полностью заполнены значениями за 1200 баров, в том числе на границах оценки после сброса с прогревом.
Разрешить calculate_signal() получать основные бары с самого начала, например возвращая 1 из min_bars_required() и сохраняя существующий фильтр входа по готовности скользящего показателя. Проверить, что после предусмотренного прогрева в 1210 баров обе SMA полностью заполнены значениями за 1200 баров, в том числе на границах оценки после сброса с прогревом.
min_bars_required() возвращает 1201, но FactoryStrategy._maybe_process_primary() не вызывает calculate_signal() до поступления такого количества основных баров. Скользящий SMA для ETH обновляется только внутри calculate_signal(), поэтому первое наблюдение появляется на баре 1201, а готовность достигается лишь на баре 2399. ADA обновляет скользящий SMA на каждом дополнительном баре и достигает готовности на баре 1200. В результате ETH пропускает примерно 200 дополнительных дней с допустимыми сигналами и остаётся неготовым после предусмотренного исследовательским контрактом прогрева в 1210 баров. Увеличение _max_bars устраняет ограничение ёмкости буфера, но не исправляет инициализацию индикатора.
Сводка по итогам
Положительный самостоятельный вклад ETH заслуживает отдельного изучения, но не подтверждает портфель с фиксированным соотношением ETH-плюс-ADA.
По результатам проверки бэктеста вынесен вердикт: отказаться из-за отрицательного математического ожидания и доходности на сделку ниже порога проверки спотовой стратегии 0.25%; подтверждённых дефектов кода, оправдывающих ещё одну итерацию разработчика, нет. До оптимизации, анализа после оптимизации и оценки рисков дело не дошло.
Покупай ETH и ADA по отдельности на Binance Spot после отката на 8% от максимумов закрытия за 10 дней, пока цена выше SMA за 200 дней; цель — отскок на 8% при одной длинной позиции на монету.
Совокупный бэктест показал доходность -42.26% на 432 закрытых сделках, коэффициент Шарпа 0.0127, фактор прибыли 0.952 и максимальную просадку 69.79%. Средняя доходность сделки составила 0.0106%; ETH принёс $ 8,119, а ADA потерял $ 50,382.
Анализ
Торговля по сетке
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.