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

Стратегии

Пара импульса относительной силы ETH-vs-BTC — долларово-нейтральная стратегия с длинной и короткой позициями по соотношению ETH/BTC RATIO: следовать за CONTINUATION трендов относительной силы (LONG ETH / SHORT BTC, когда ETH опережает по тренду BTC; обратная позиция, когда отстаёт; без позиции в нейтральной зоне), удержание от нескольких дней до недель (несколько инструментов, только OHLCV, рыночно-нейтральная стратегия)

Итог: Отменено

EthBtcRelativeStrengthMomentumPair

Сделки точно реализуют гипотезу: сбалансированная долларово-нейтральная пара (длинная нога 389 / короткая 389), среднее удержание 3д10ч, benchmark_meaningful=false, как и ожидается для рыночно-нейтрального портфеля.

Гипотеза

Стратегия DOLLAR-NEUTRAL с 2-LEG LONG-SHORT торгует TIME-SERIES MOMENTUM соотношения цен ETH/BTC, напрямую используя эмпирически CONFIRMED вывод из журнала неудач этой фабрики: от хеджированного по бете спреда BTC/ETH отказались, потому что он CONTINUES, а не возвращается к среднему (остаток имел знак продолжения, а не возврата). Если спред продолжает движение, то моментум относительной силы по соотношению — сделка с правильным знаком. Стратегия рассчитывает соотношение ETH/BTC по ценам закрытия двух бессрочных……Показать большеСвернуть

Стратегия DOLLAR-NEUTRAL с 2-LEG LONG-SHORT торгует TIME-SERIES MOMENTUM соотношения цен ETH/BTC, напрямую используя эмпирически CONFIRMED вывод из журнала неудач этой фабрики: от хеджированного по бете спреда BTC/ETH отказались, потому что он CONTINUES, а не возвращается к среднему (остаток имел знак продолжения, а не возврата). Если спред продолжает движение, то моментум относительной силы по соотношению — сделка с правильным знаком. Стратегия рассчитывает соотношение ETH/BTC по ценам закрытия двух бессрочных контрактов и открывает рыночно-нейтральную позицию по тренду самого соотношения: LONG ETHUSDT.BINANCE + SHORT BTCUSDT.BINANCE (равный долларовый номинал) при опережающем тренде ETH относительно BTC и REVERSE (SHORT ETH + LONG BTC) при отстающем тренде ETH относительно BTC; в нейтральной зоне позиция отсутствует, чтобы избежать шума. Поскольку долларовый номинал обеих ног равен, совокупная бета к крипторынку составляет ≈0 — PnL отражает относительную доходность ETH к BTC, а не направление рынка. Это NOT стратегии моментума с двумя TF по одной монете (ставка на абсолютное направление одного актива) и NOT поперечного фактора для 9 монет (ранжирование корзины); это одна узконаправленная пара с самой высокой ликвидностью. Используются бары ONLY OHLCV для двух самых ликвидных бессрочных криптоконтрактов (глубокая многолетняя история, данные без уязвимостей, без потоков ставок финансирования, тиков, ликвидаций и опционов).

ITERATION 3 IS CONFIG-ONLY FIX. Слой 1 отклонил предыдущую отправку: «config.instrument_id и config.bar_type являются REQUIRED (получено instrument_id=None, bar_type=None)» — проблема была не в коде стратегии: итерация 2 уже прошла статический анализ и синтетический слой и дошла до песочницы; ради этого и была выполнена переработка производительности с прокруткой статистик O(1), кэшированной книгой и плановым ребалансированием. Просто в сопроводительном блоке конфигурации не оказалось двух обязательных полей,……Показать большеСвернуть

ITERATION 3 IS CONFIG-ONLY FIX. Слой 1 отклонил предыдущую отправку: «config.instrument_id и config.bar_type являются REQUIRED (получено instrument_id=None, bar_type=None)» — проблема была не в коде стратегии: итерация 2 уже прошла статический анализ и синтетический слой и дошла до песочницы; ради этого и была выполнена переработка производительности с прокруткой статистик O(1), кэшированной книгой и плановым ребалансированием. Просто в сопроводительном блоке конфигурации не оказалось двух обязательных полей, поэтому создать экземпляр было невозможно. Я внесла SMALLEST изменение, устраняющее именно эту проблему: в конфигурации ниже теперь указаны основной инструмент (ETHUSDT.BINANCE), основной тип баров (ETHUSDT.BINANCE-4-HOUR-LAST-EXTERNAL), BTCUSDT.BINANCE как единственная дополнительная нога с типом баров SAME 4-HOUR — барьер выравнивания между ногами в базовых шаблонах гарантирует, что обе ноги синхронны при каждом решении и хедж никогда не запаздывает на T-1; также заданы все настраиваемые параметры и соответствующие им _param_bounds, повторяющие ограничения в коде, поэтому оптимизатор не ищет значения, которые код молча переписывает. В каталоге для обоих символов есть непрерывная история 4-HOUR начиная с 2019-12-31, поэтому ни одна нога не может оказаться data_unavailable. Единственная правка кода — строка документации, описывающая причину и исправление, а также уточняющая, что mom_days/vol_window — это количество баров PRIMARY BARS (на барах 4-HOUR значения по умолчанию означают тренд за 5 дней, измеряемый относительно волатильности соотношения за 10 дней, что соответствует указанному в гипотезе удержанию позиции от нескольких дней до нескольких недель); логика сигналов, входа, выхода, размера позиции и результатов не менялась, поэтому пройденные слои остаются пройденными. HYPOTHESIS FIDELITY: механизм — моментум (продолжение) соотношения, сделка с правильным знаком, следующая из собственного вывода этой фабрики о том, что хеджированный по бете спред BTC/ETH продолжает движение, а не возвращается к среднему; именно равный DOLLAR номинал каждой ноги (а не равное количество базового актива) обеспечивает совокупную бету к рынку около 0, поэтому PnL отражает относительную доходность ETH к BTC, а не направление рынка. Фьючерсы BINANCE — подходящая площадка, поскольку стратегия действительно открывает короткие позиции; плечо остается 1.0, поскольку валовая экспозиция составляет 0.70 капитала (0.35 на каждую ногу), а чистая дельта — около 0, поэтому усиление за счет маржи не используется и не заявляется.

Не стоит тратить 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).

Реализация

Долларово-нейтральная парная стратегия с длинной и короткой позициями по 2 ногам, торгующая TIME-SERIES MOMENTUM соотношения ETH/BTC на бессрочных контрактах Binance USD-M с интервалом 4-HOUR. На каждом баре она рассчитывает соотношение = close(ETHUSDT)/close(BTCUSDT), затем z-оценку собственного тренда соотношения: mom = log(ratio_t / ratio_{t-30 bars}), делённый на стандартное отклонение логарифмической доходности соотношения от бара к бару за 60 баров, масштабированное к горизонту импульса. Когда z-оценка……Показать большеСвернуть

Долларово-нейтральная парная стратегия с длинной и короткой позициями по 2 ногам, торгующая TIME-SERIES MOMENTUM соотношения ETH/BTC на бессрочных контрактах Binance USD-M с интервалом 4-HOUR. На каждом баре она рассчитывает соотношение = close(ETHUSDT)/close(BTCUSDT), затем z-оценку собственного тренда соотношения: mom = log(ratio_t / ratio_{t-30 bars}), делённый на стандартное отклонение логарифмической доходности соотношения от бара к бару за 60 баров, масштабированное к горизонту импульса. Когда z-оценка превышает +entry_z, открывается длинная позиция LONG ETH / короткая SHORT BTC с номиналом EQUAL DOLLAR (leg_frac капитала на каждую ногу, количество = номинал / собственная цена ноги); ниже -entry_z открывается обратная позиция; она удерживается, пока |z| не опустится ниже entry_z * exit_frac (гистерезисная мёртвая зона), а при смене знака позиция сразу переворачивается. Риск: жёсткий стоп для пары по суммарной нереализованной доходности двух ног (неблагоприятное движение соотношения с момента входа) с блокировкой повторного входа, пока сигнал не вернётся внутрь мёртвой зоны; защита от незахеджированной ноги закрывает позицию, если открыта только одна нога; плановая по календарю ребалансировка хеджа сокращает отклонившуюся ногу до долларового нейтралитета. Только потоки данных OHLCV — без потоков данных о финансировании, тиках, ликвидациях или опционах.

Результаты верификации

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