Стратегии
Бэктест стратегии: дельта-нейтральный кэрри с отбором по фандингу: лонг BINANCE_SPOT / шорт BINANCE USD-M Perp на 7 крупнейших 2020 по снимку на момент времени; вход при фандинге за 24 ч > 3 б.п./8 ч, выход при смене знака фандинга или по истечении 21 дней (4H бары решений)
Итог: Отменено
FundingGatedSpotPerpCarry7Majors8H
Сводка по итогам
Стратегия пыталась получать фандинг по бессрочным контрактам Binance с помощью хеджа: лонг по споту и шорт по бессрочному контракту на 7 крупнейших активах 2020, отобранных на момент времени; сделки совершались только при ставке выше 3 б.п./8 ч. Было выполнено 3 итераций кода, и каждая не прошла бэктест в изолированной среде уровня 3, превысив лимит времени 300 с. В последней итерации уже применялись поиски bisect по предварительно вычисленным массивам и выполнялось меньше запросов кэша; в заметках причиной названы накладные расходы на загрузку каталога, которые нельзя сократить правками стратегии. Запуск прекращён в цикле проверки, поэтому нет результатов бэктеста и оптимизации, аналитического заключения или оценки специалиста по рискам.
Гипотеза
Реализует механизм хеджирования фандинга FMZ на Binance спот/USD-M с фиксированным набором 2020, как указано в гипотезе. Итерация 3 не меняет торговые правила: тайм-аут вызван не стратегией. Работа на бар уже имела сложность O(log n) и не зависела от длины периода; профили сбоев в тот же день у похожих запусков показывают, что 300 с уходит на fsspec glob в ParquetDataCatalog до того, как какой-либо бар поступает в стратегию. Изменения касаются только гигиены: пропускать все запросы кэша на плоских барах без состояния фандинга и исключить справочные таблицы фандинга из persistable_state. Если тайм-аут повторится, причина — инфраструктура сканирования каталога или нагрузка на хост (L155 b/c), а не код.
verification_loop: sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в изолированной среде): пробный запуск превысил лимит времени 300 с на окне около 20000 баров (2400 дней по BTCUSDT.BINANCE-8-HOUR-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре масштабируется с историей — например, повторно сканируется весь ряд фандинга/дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызывается min()/sorted(). Предварительно вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Реализация
Дельта-нейтральный кэрри на 7 крупнейших активах 2020, отобранных на момент времени (BTC, ETH, XRP, BCH, LTC, BNB, XLM): лонг BINANCE_SPOT и шорт равного количества бессрочного контракта BINANCE USD-M по активу, когда средний фандинг за последние 24 ч >= 3 б.п./8 ч; выход при смене знака фандинга (<0) или по истечении 21 календарных дней. Каждая сторона — отдельная заявка/позиция; бары решений 8H согласованы с расчётом фандинга; номинал на актив = капитал на площадке с меньшим лимитом x 0.7 / 7.
Результаты верификации
sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в изолированной среде): пробный запуск превысил лимит времени 300 с на окне около 20000 баров (2400 дней по BTCUSDT.BINANCE-8-HOUR-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре масштабируется с историей — например, повторно сканируется весь ряд фандинга/дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызывается min()/sorted(). Предварительно вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
История итераций
sandbox_timeout: проверка не пройдена (уровень 3 — бэктест в изолированной среде): пробный запуск превысил лимит времени 300 с на окне около 20000 баров (2400 дней по BTCUSDT.BINANCE-4-HOUR-LAST-EXTERNAL). Почти всегда это означает, что работа на каждом баре масштабируется с историей — например, повторно сканируется весь ряд фандинга/дополнительных данных либо внутри calculate_signal()/on_bar() на каждом баре заново строится список и вызывается min()/sorted(). Предварительно вычисли отсортированные массивы временных меток ONCE в __init__ и используй bisect либо кэшируй результаты поиска по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).
Сводка по итогам
При 14 инструментах на двух площадках пробный запуск в изолированной среде может завершиться по тайм-ауту, даже если работа стратегии на каждом баре уже имеет сложность O(log n). По заметкам разработчика, причина — накладные расходы на запросы к каталогу и загрузку данных; изменения кода проблему не устранили. Поэтому сначала следует диагностировать инфраструктуру или уменьшить универсум.
Запуск прекращён в цикле проверки после 3 итераций. Каждый раз бэктест в изолированной среде уровня 3 превышал лимит 300 с на окне около 20,000 баров (2400 дней по BTCUSDT 8-часовых баров), поэтому этапы проверки бэктеста, анализа и оценки риска не запускались.
Бэктест стратегии: дельта-нейтральный кэрри на 7 крупнейших активах, отобранных по снимку 2020 (BTC, ETH, XRP, BCH, LTC, BNB, XLM): лонг по споту Binance и шорт равного количества бессрочного контракта Binance USD-M для получения фандинга; вход при ставке фандинга за 24 ч выше 3 б.п./8 ч, выход при переходе ставки в отрицательную зону или через 21 дней.
Метрик бэктеста или оптимизации нет, поскольку стратегия не прошла проверку. Единственные данные — предварительное исследование гипотезы только по фандингу (189 эпизодов с 2020-2026, средний чистый результат +1.99% за эпизод после затрат на полный цикл 0.30%, доля прибыльных ~0.9); конвейер её не тестировал.
Анализ
Стратегия арбитража ставки финансирования OKX | OKX Funding Fee Hedge strategy
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.