Стратегии
Пара импульса относительной силы ETH-vs-BTC — долларово-нейтральная стратегия с длинной и короткой позициями по соотношению ETH/BTC RATIO: следовать за CONTINUATION трендов относительной силы (LONG ETH / SHORT BTC, когда ETH опережает по тренду BTC; обратная позиция, когда отстаёт; без позиции в нейтральной зоне), удержание от нескольких дней до недель (несколько инструментов, только OHLCV, рыночно-нейтральная стратегия)
Итог: Отменено
EthBtcRelativeStrengthMomentumPair
Сделки точно реализуют гипотезу: сбалансированная долларово-нейтральная пара (длинная нога 389 / короткая 389), среднее удержание 3д10ч, benchmark_meaningful=false, как и ожидается для рыночно-нейтрального портфеля.
Гипотеза
Не стоит тратить 2 часов на оптимизацию. Преимущество от продолжения относительной силы есть только в 2020-2021 (на него приходится весь заголовочный +44.7%) и заметно отсутствует в недавней достаточной выборке: 2022-2026 даёт около -1.7% чистыми за примерно 4.5 лет. Коэффициент Шарпа на всей выборке — 0.23; бутстрэп CI [-0.48, 0.99] пересекает ноль, а PSR 0.69, то есть результат неотличим от отсутствия навыка; PF составляет 1.046 (слабый сигнал, проблема не в комиссиях — они равны всего 4.56% от валового результата). Преимущество также проявляется лишь при одном режиме волатильности (положительный результат только в «нормальном» терциле; при низкой и высокой волатильности оба результата отрицательны). Оптимизация на всём периоде подогнала бы стратегию под уже завершившийся режим 2020-2021, а walk-forward-анализ OOS на недавних окнах дал бы отрицательный результат. Это не ошибка кода (поэтому не нужно итерировать), а самая ликвидная пара уже лучше всего подходит для этого механизма (поэтому не нужно revise_hypothesis).
Реализация
Результаты верификации
Проверка не пройдена (уровень 1 — конфигурация): config.instrument_id и config.bar_type имеют значение REQUIRED (получено instrument_id=None, bar_type=None). Задайте обоим параметры инструмента из гипотезы, например instrument_id='BTCUSDT.BINANCE', bar_type='BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL'.
При желании проверяйте self._btc_ts == ts_ns перед добавлением соотношения, чтобы явно обеспечить одновременность внутри стратегии.
Нога BTC буферизуется в on_extra_bar и сопоставляется с закрытием ETH, только когда бар BTC подтверждён барьером синхронизации базового шаблона для того же таймфрейма. На практике это корректно; отмечено лишь как соображение об устойчивости к пропускам данных, а не как дефект.
Обзор бэктеста
- Шарп
- 0,23
- Общая доходность
- 44,72%
- Максимальная просадка
- 14,54%
- Всего сделок
- 778
- Доля прибыльных
- 48,2%
- Профит-фактор
- 1,05
Сделки точно реализуют гипотезу: сбалансированная долларово-нейтральная пара (длинная нога 389 / короткая 389), среднее удержание 3д10ч, benchmark_meaningful=false, как и ожидается для рыночно-нейтрального портфеля.
Низкая просадка (14.5%); комиссии не проблема (commission_pct_of_gross — всего 4.56%).
Положительное математическое ожидание на всей выборке (+$49.7/сделку) и avg_trade_return_pct 0.286% формально превышает порог 0.15%.
Коэффициент Шарпа 0.23; бутстрэп CI [-0.48, 0.99] пересекает ноль, а PSR 0.69 (<0.95) — за 6.7 лет преимущество статистически неотличимо от нуля.
Весь результат получен в начале периода: 2020 +25.7% и 2021 +12.7% обеспечивают всю доходность 44.7%, тогда как 2022-2026 (примерно последние 4.5 лет) даёт около -1.7% чистыми — преимущество от продолжения относительного импульса ETH/BTC угасло.
PF 1.046 — очень тонкое валовое преимущество; сигнал слабый, дело не в комиссиях.
Зависимость от режима: положительный результат только в «нормальном» терциле волатильности (коэффициент Шарпа +0.98); при низкой (-0.16) и высокой (-0.03) волатильности результат отрицательный, only_one_regime=true.
У класса крупных бессрочных контрактов с длинной и короткой позициями, нейтрального к бете и доллару (multi_instrument/market_neutral), исторически нет стратегий, переживших отбор.
История итераций
Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['entry_z', 'leg_frac', 'mom_days', 'stop_pct', 'exit_frac', 'vol_window', 'min_notional', 'rehedge_band', '_param_bounds', 'default_qty_precision'] Проверьте, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: EthBtcRelativeStrengthMomentumPair._symbol() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735697220000) - steady_downtrend: TypeError: EthBtcRelativeStrengthMomentumPair._symbol() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735697220000) - volatility_spike: TypeError: EthBtcRelativeStrengthMomentumPair._symbol() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735697040000) - zero_volume: TypeError: EthBtcRelativeStrengthMomentumPair._symbol() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735699500000) - price_gap: TypeError: EthBtcRelativeStrengthMomentumPair._symbol() принимает 1 позиционный аргумент, но передано 2 (время бара: 1735697220000)
sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в песочнице): дымовой тест превысил лимит времени 300 с на окне примерно 20000 баров (2400 дней по ETHUSDT.BINANCE-1-DAY-LAST-EXTERNAL). Обычно это означает, что работа на каждом баре масштабируется с историей — например, полный просмотр ряда финансирования или дополнительных данных либо повторное создание списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно отсортируйте массивы временных меток ONCE в __init__ и используйте bisect либо кэшируйте поиск по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.