Стратегии
Расхождение цен бессрочных контрактов DOGE на Bybit и OKX
Итог: Отменено
DogeBybitOkxOuDislocation
Сводка по итогам
DogeBybitOkxOuDislocation проверила парный механизм Ornstein-Uhlenbeck в стиле QuantConnect на бессрочных контрактах DOGE, котируемых на Bybit и OKX. После 5 итераций данные и учёт были корректными, а временные метки полностью выровнены, но примерно за пять лет сработало всего 15 пар. Sharpe составил 0.23, доверительный интервал включает ноль, а средняя доходность на сделку — 0.0277%. Рыночное воздействие и комиссии поглотили почти всю валовую прибыль. Аналитик отказался от стратегии на проверке бэктеста: настройка параметров не могла сделать такие небольшие спреды достаточными для покрытия торговых издержек, поэтому оптимизация, анализ и оценка рисков не проводились.
Гипотеза
Проверьте парный механизм QuantConnect Ornstein–Uhlenbeck для одного и того же актива на двух площадках. Рассчитывайте логарифмический спред цены по синхронизированным барам длительностью 1 часов за предыдущие 30 дней, обновляя расчёт ежедневно. Зафиксируйте хедж в равном количестве DOGE и используйте только завершённые бары.
Реализация
Парная торговля OU одного актива на разных площадках: log(цена закрытия DOGE на Bybit / цена закрытия DOGE OKX) по завершённым барам 1H с выровненными временными метками. Раз в UTC день модель AR(1)/OU обучается на синхронизированных спредах за предыдущие 30 дней (среднее, стационарная сигма). Сигнал — z-оценка текущего спреда. При значении выше +entry_z (и расстоянии от среднего не менее min_edge_bps) стратегия открывает короткую позицию на Bybit и длинную на OKX в равном количестве DOGE; ниже -entry_z — наоборот. Выход происходит, когда z возвращается внутрь exit_z, при неблагоприятном стопе stop_z или если модель становится недействительной. Размер каждой ноги — leg_fraction капитала, без кредитного плеча.
Результаты верификации
Рассмотрите возможность поднять min_edge_bps до диапазона оптимизатора (например, 35-80) или входить пассивными лимитными ордерами, чтобы захваченная конвергенция явно превышала 21 bp плюс рыночное воздействие.
Рентабельность комиссий под вопросом. Для входа требуется |спред - среднее OU| >= 35 bp и z >= 2. Два цикла сделок обходятся примерно в 21 bp от номинала одной ноги в тейкерских комиссиях плюс моделируемое рыночное воздействие, которое было значительным в тестовом запуске. При расчёте на общий номинал обеих ног чистая доходность на сделку будет намного ниже порога аналитика 0.15% даже при полной конвергенции спреда. Проверка 8 пройдена, поскольку 0.35% выше 0.15%, но запас небольшой.
Учитывайте финансирование на Bybit и OKX в PnL, когда данные станут доступны, либо фиксируйте число пар, удерживаемых в момент начисления финансирования.
Разница ставок финансирования между площадками не моделируется: в бэктесте указано funding_folded=false и funding_events_available=0. Среднее время удержания — всего около 2 часов, поэтому влияние невелико, однако пара, удерживаемая в момент начисления финансирования раз в 8 часов, платит или получает разницу ставок двух площадок.
Изменять стратегию не нужно. Запрос пути каталога (glob/walk по примерно 372k каталогам) следует передать инженерной команде.
Время выполнения: песочница заняла 275 с при лимите 300 с, а прогноз для полной истории — около 630 с. Собственная работа стратегии на баре имеет сложность O(1): одно добавление в deque с ограничением maxlen=744. Ежедневная подгонка AR(1) имеет сложность O(720). По профилированию разработчика, время уходит на поиск файлов ParquetDataCatalog, то есть это проблема платформы, а не стратегии. Учтите: бары 1H по 2 инструментам за примерно 1904 дней — это около 46k баров на ногу.
Вычисляйте _entry_direction по стороне открытой позиции Bybit в should_exit, а не по состоянию экземпляра.
_submit_entry переопределён, чтобы атомарно открывать обе ноги. Он вызывает super()._submit_entry, а затем _submit_entry_instrument для OKX с тем же количеством и противоположной стороной. Пока формируется пара, _opening_pair блокирует повторную сверку, а осиротевшие или несовпадающие ноги отменяются. Это выглядит корректно. Однако _entry_direction хранится в памяти и не восстанавливается после перезапуска, поэтому проверки пересечения среднего и стопа для should_exit не будут работать (направление 0) для пары, унаследованной после перезапуска. Тогда выход будет зависеть от модели или проверок ноги OKX.
Это преимущество невелико по сравнению с затратами на торговлю четырьмя ногами. Круговая сделка по обеим ногам обходится примерно в 0.21% номинала одной ноги в виде тейкерских комиссий (Bybit 0.055% x2 плюс OKX 0.05% x2). Поэтому фильтр входа 35 bp min_edge и выход при 0.25 сигма оставляют примерно 10 bp чистыми на пару до учёта рыночного воздействия. В тестовом запуске рыночное воздействие забрало 64% валовой прибыли, комиссии — ещё 22%, а средний результат составил всего 0.034% на позицию по ноге за 4 закрытых позиций (2 пар) за 834 дней. Эта выборка слишком мала для оценки. Полный бэктест должен показывать чистую доходность на пару после рыночного воздействия. Также следует указать разницу ставок финансирования бессрочных контрактов Bybit и OKX DOGE, которая здесь не моделируется (funding_folded=false, 0 событий). Если история за 1904 дней также даст меньше примерно 30 пар, результату нельзя будет доверять.
Обзор бэктеста
- Шарп
- 0,23
- Общая доходность
- 0,10%
- Максимальная просадка
- 1,99%
- Всего сделок
- 30
- Доля прибыльных
- 43,3%
- Профит-фактор
- 1,03
Данные и учёт корректны: обе ноги выровнены, пропущенных баров нет, accounting_valid — true, end_unrealized — 0%, ликвидаций не было.
Просадка невелика (1.99%), а сделки сбалансированы по длинным и коротким позициям, что соответствует рыночно-нейтральной конструкции на спреде.
Преимущество на сделку ниже издержек. avg_trade_return_pct составляет 0.0277% на позицию по ноге. Минимальный порог для фьючерсов Bybit/OKX с одной ногой — 0.15%. По правилу L127, масштабируемому по ногам, порог составляет около 3 x 0.21% = 0.63%, поскольку за каждую пару приходится платить за четыре тейкерских исполнения. Преимущество примерно на 5-20x ниже порога.
Моделируемое влияние забирает 79.5% валовой прибыли (мягкий минимум — 50%), комиссии — ещё 10.9%. Чистый результат PF составляет 1.027, что едва выше 1.
Выборка слишком мала. За 1905 дней сработало всего 15 входов в пары (30 закрытых позиций по ногам), тогда как требовалось около 100 (L178). В отложенной выборке будет около 3 пар — меньше необходимых 10.
Статистической значимости нет. Sharpe равен 0.23, интервал 95% CI — от -0.55 до 1.25, показатель PSR равен 0.52, Calmar — 0.0096. IC исследования сигнала составляет -0.015 (rejected_no_information), чистое прогнозное преимущество — -0.04%.
Время в рынке составляет около 0.1%, а длительность периода максимальной просадки — 1560 дней, поэтому календарный Sharpe не может приблизиться к 1.0 (L165). У 2023 нет сделок, что показывает: спред DOGE между площадками редко расходится более чем на 35 bp.
Анализ
Порог бэктеста: - метрики ненадёжны: противоречие: знак Sharpe -0.05 не совпадает со знаком total_return 0.10% — Sharpe рассчитан по ряду mtm_equity_curve, а доходность — по кривой капитала. Оценивайте результат по кривой капитала.
История итераций
Проверка не пройдена (слой 4 — проверка QA) [класс=code_defect]: - [edge_concern] Минимальная моделируемая конвергенция 25 bp оставляет мало запаса сверх примерно 21 bp на четыре исполнения по тейкерской ставке, ещё до проскальзывания и финансирования. Тест в песочнице на четырёх сделках не подтверждает наличие преимущества. - [critical] should_enter() отправляет ордер OKX до того, как базовый класс проверит и отправит ордер Bybit. Если ордер Bybit отклонён или отложен, исполниться может только OKX. (строка 113) — исправление: отслеживать оба ордера и исполнения как пару; оперативно закрывать любую ногу, если её парный ордер не исполнен. - [critical] Базовый класс вызывает should_exit() только при открытой позиции Bybit. Поэтому у позиции только на OKX нет пути выхода, и она может бесконечно оставаться без хеджа. (строка 116) — исправление: проверять позиции на обеих площадках на каждом обработанном баре и закрывать любую несопоставленную ногу.
Проверка не пройдена (слой 4 — проверка QA) [класс=code_defect]: - [edge_concern] Тест в песочнице на четырёх сделках не может подтвердить прибыльность; метрики капитала помечены как ненадёжные. - [critical] Выход по абсолютному значению z может пропустить пересечение среднего OU. Если пара открыта при положительном z, она останется открытой, когда спред резко перейдёт к отрицательному z за пределами диапазона выхода, то есть исходная сделка останется открытой после пересечения цели возврата к среднему. (строка 215) — исправление: записывать направление входа и выходить, когда спред пересекает порог среднего в этом направлении. Стоп при неблагоприятном движении оставить отдельным.
sandbox_timeout: проверка не пройдена (слой 3 — бэктест в песочнице): тестовый запуск превысил лимит времени 300с на окне примерно в 20000 баров (833 дней по DOGEUSDT.BYBIT-1-HOUR-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре растёт вместе с историей — например, полный повторный просмотр ряда финансирования/дополнительных данных или создание списка и вызов min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Заранее подготовьте отсортированные массивы временных меток ONCE в __init__ и используйте bisect либо кешируйте результаты поиска по временной метке, чтобы затраты на бар составляли O(log n), а не O(n).
Сводка по итогам
Расхождение цены одного актива на двух площадках обычно меньше стоимости четырёх исполнений по тейкерской ставке плюс рыночное воздействие. Повторное предложение имеет смысл только при пассивном исполнении на обеих площадках и заранее зарегистрированном чистом преимуществе не менее 0.6% на пару после учёта рыночного воздействия.
Аналитик отказался от стратегии при проверке бэктеста, до оптимизации, из-за fee_edge / negative_expectancy. Преимущество 0.0277% на ногу намного ниже минимального порога 0.15% для одной ноги и примерно 0.63% для пары с четырьмя тейкерскими исполнениями. Выборка слишком мала (15 пар при необходимых примерно 100), а сигнал IC из -0.015 отклонён как не несущий информации.
Стратегия торговала возврат к среднему логарифмического спреда цены бессрочных контрактов DOGE на Bybit и OKX. Каждый день модель Ornstein-Uhlenbeck пересчитывалась по синхронизированным барам длительностью 1 часов за предыдущие 30 дней, после чего торговались хеджированные пары с равным количеством, когда z-оценка спреда пересекала 2.0.
За 1905 дней было открыто всего 15 пар (30 закрытых позиций по ногам), а общий результат оказался близок к нулю. Sharpe составил 0.23 (95% CI -0.55 до 1.25), фактор прибыли — 1.027, максимальная просадка — 1.99%. Средняя сделка принесла 0.0277% от номинала, а моделируемое рыночное воздействие забрало 79.5% валовой прибыли.
Анализ
Оптимальная парная торговля
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.