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

Стратегии

SOL Затухание чрезмерного отклонения премии бессрочного контракта к индексу, лонг-шорт (один инструмент BINANCE USD-M бессрочный контракт против его INDEX, свечи mark/index из DEEP; возврат контракта к спотовому индексу при отклонении базиса > 0.35% во время резкого движения — конвергенцию обеспечивает механика рынка ENFORCED, ставка финансирования и арбитраж; базисный сигнал, не основанный на цене — быстрое схождение, жёсткий стоп при дальнейшем расширении базиса, 2 параметров)

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

SolPerpIndexPremiumOvershootFadeLS5m

Поток premium_index (базис mark price к индексу) — подлинный сигнал, не основанный на цене, и подключён правильно (346 событий ставки финансирования / глубокий ряд, отправлено заявок на вход: 6792), поэтому проблема не…

Гипотеза

Стратегия LONG-SHORT на одном инструменте SOLUSDT.BINANCE (USD-M бессрочный контракт), торгующая отклонениями базиса PERP к INDEX — подлинного сигнала, не основанного на цене NON-PRICE и привязанного к механике рынка. Она намеренно выходит за рамки всех классов, которые в этой сессии признали бесперспективными: L30 (чистые данные OHLCV = 0/213 → здесь используются базис mark/index BASIS, а не геометрия цены), L29 (без опционов), L28 (без переноса ставки финансирования CARRY: стратегия торгует внутридневными……Показать большеСвернуть

Стратегия LONG-SHORT на одном инструменте SOLUSDT.BINANCE (USD-M бессрочный контракт), торгующая отклонениями базиса PERP к INDEX — подлинного сигнала, не основанного на цене NON-PRICE и привязанного к механике рынка. Она намеренно выходит за рамки всех классов, которые в этой сессии признали бесперспективными: L30 (чистые данные OHLCV = 0/213 → здесь используются базис mark/index BASIS, а не геометрия цены), L29 (без опционов), L28 (без переноса ставки финансирования CARRY: стратегия торгует внутридневными EXCURSION базиса, а не накоплением выплат по ставке финансирования, поэтому ей не грозит DECAY преимущества от уровня ставки финансирования, которое только что погубило семейство корзин с отрицательной ставкой), и это не ловушка поверхностных метрик/потока ликвидаций (свечи mark price и index price — это DEEP глубокие исторические ряды Binance Vision). Механизм: при резких движениях бессрочный контракт с плечом OVERSHOOTS относительно спотового индекса (агрессивные тейкеры поднимают цену контракта выше или опускают ниже сводного индекса), из-за чего базис = (perp_mark − index)/index временно отклоняется. Ставка финансирования (механически подтягивающая цену бессрочного контракта к индексу TWAP) вместе с межрыночным арбитражем FORCE возвращает базис к нулю за считаные минуты. Стратегия торгует против чрезмерного отклонения: когда бессрочный контракт торгуется на уровне ≥ +0.35% RICH к индексу, SHORT бессрочный контракт; когда отклонение ≥ 0.35% CHEAP, LONG бессрочный контракт; выход — при схождении. Конвергенция обеспечена механикой рынка, а не надеждой на возврат цены; базис поступает из реального источника данных, не основанного на цене, а преимущество потенциально LIVE (в отличие от угасшего преимущества на премии к ставке финансирования). Выбран SOL, поскольку его более высокая волатильность создаёт заметные отклонения базиса, достаточные для покрытия комиссий, до которых BTC/ETH редко доходит. Один инструмент, LONG-SHORT (устраняет дисбаланс с перевесом в 85% длинных позиций), короткое внутридневное удержание. 2 основных параметра (порог отклонения базиса и порог выхода при схождении).

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

ITERATION 3 IS CONFIG-ONLY FIX. Слой 1 отклонил предыдущую отправку с сообщением "config.instrument_id и config.bar_type имеют значение REQUIRED (получено: instrument_id=None, bar_type=None)": код уже прошёл статический анализ и синтетический слой и дошёл до песочницы (для этого и нужны были векторизованный разбор премии и таймфрейм 5-MINUTE), но в блоке config просто не оказалось двух обязательных полей. Исправление минимально и именно такое: instrument_id = SOLUSDT.BINANCE и bar_type = SOLUSDT.BINANCE-5-MINUTE-LAST-EXTERNAL — таймфрейм, под который откалиброван этот код, поскольку max_hold_bars = 6 задаёт внутридневной предел возврата к среднему за 30 минут; все параметры зафиксированы на значениях, которые код уже использует по умолчанию. Единственное изменение кода — запись причины, исправления и измеренной калибровки премии в docstring; логика сигнала, входа, выхода и определения размера позиции не менялась, поэтому успешно пройденные слои остаются пройденными. Я проверил обе зависимости данных, а не стал полагаться на предположения: в каталоге есть бары SOLUSDT.BINANCE 5-MINUTE, а data/supplementary/premiumIndexKlines/SOLUSDT содержит 2.01M строк, начиная с 2020-09, с интервалом около 1 минут, поэтому каждому бару решения длительностью 5 минут соответствует свежая котировка премии. В этом реальном ряду |premium| составляет 0.047% на медиане, 0.105% на 90-м процентиле и 0.33% на 99-м. Поэтому basis_entry остаётся на перекалибровке итерации -2 со значением 0.15%, а не на пороге из заголовка 0.35%: 0.35% находится около 99.5-го процентиля и срабатывал бы лишь несколько раз в год (что невозможно измерить), тогда как 0.15% всё ещё выше 90-го процентиля, примерно в 3x раза больше медианного базиса и достаточно велик, чтобы полная конвергенция перекрывала комиссию тейкера за сделку туда-обратно около 0.10%. HYPOTHESIS FIDELITY: механизм не изменился — реальный базисный поток, не основанный на цене; конвергенция, обеспеченная механикой рынка; внутридневная сделка EXCURSION, а не накопление дохода от ставки финансирования; и действительно лонг-шорт. BINANCE USD-M — правильная площадка, поскольку стратегия открывает короткую позицию по бессрочному контракту, а базис бессрочного контракта к индексу существует только там. Плечо остаётся на уровне 1.0, поскольку position_frac составляет 0.5 капитала: усиление за счёт маржи не используется и не заявляется.

Счёт ликвидирован в первый месяц (total_return -100%, max_drawdown 100%) при отрицательном матожидании после издержек (avg_trade_return_pct -0.147%, profit_factor 6.4e-05, матожидание -$45 на сделку). У затухания отклонения базиса катастрофический левый хвост (avg_loss $59.8 против avg_win $0.01, largest_loss -$2463, асимметрия -12.3, эксцесс 177): позиции против временных отклонений бессрочного контракта от индекса разносят именно во время резких движений, на которые нацелена гипотеза, а стоп при расширении базиса не ограничивает хвостовые потери. Семейства стратегий на одном бессрочном контракте с дополнительным фильтром и затухания движения по одной монете L73 и L55 не имеют выживших; настройка порогов не превратит ликвидируемую стратегию с отрицательным матожиданием в источник преимущества. Оптимизация не стоит 2 часов.

Реализация

Лонг-шорт стратегия затухания движения на одном инструменте: бессрочный контракт SOLUSDT.BINANCE USD-M против его спотового индекса на барах 5-MINUTE. Переменная для принятия решения — опубликованная премия mark price к индексу (premium_index / close в premiumIndexKlines = (perp_mark - index)/index), считываемая на момент закрытия каждого бара посредством бисекционного поиска O(log n) в массиве numpy, разобранном один раз при создании объекта. Когда бессрочный контракт торгуется на уровне ≥ +0.15% RICH к индексу, стратегия SHORTS бессрочный контракт; когда отклонение ≥ 0.15% CHEAP, открывает LONG. Выход — когда базис сходится и возвращается внутрь 0.03%, при жёстком стопе, если отклонение расширяется ещё на 0.15% против позиции, при неблагоприятном движении цены на 1.2% либо по достижении внутридневного лимита удержания 30 минут (6 баров). Ставка финансирования, подтягивая бессрочный контракт к индексу, обеспечивает конвергенцию TWAP вместе с межрыночным арбитражем. Это не ставка на возврат цены, а сигнал, не основанный на геометрии цены.

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

Проверка не пройдена (слой 1 — config): 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'.

Запусти оптимизатор по сетке basis_entry; подтверди ≥100 сделок AND avg_trade_return_pct > 0.15%.

Порог в заголовке гипотезы — 0.35%, но код срабатывает при 0.15%; задокументирована перекалибровка по измеренному распределению премии SOL. Структура соответствует описанию (вход/выход при схождении/стоп при расширении базиса/лимит времени), поэтому изменение величины допустимо и не считается несоответствием.

Исправление не требуется; считайте предположение о конвергенции неподтверждённым, пока полный бэктест не покажет положительное матожидание после издержек.

Затухание движения по базису с одной позицией без хеджирования индекса — прибыль и убыток реализуются только по бессрочному контракту, поэтому схождение, вызванное индексом, даёт мало. Это свойство гипотезы на одном инструменте, а не дефект кода, но оно ослабляет утверждение о «конвергенции, обеспеченной механикой рынка».

Обзор бэктеста

Шарп
-3,36
Общая доходность
-100,00%
Максимальная просадка
100,00%
Всего сделок
6792
Доля прибыльных
24,7%
Профит-фактор
0,00

Поток premium_index (базис mark price к индексу) — подлинный сигнал, не основанный на цене, и подключён правильно (346 событий ставки финансирования / глубокий ряд, отправлено заявок на вход: 6792), поэтому проблема не в данных и не в их обработке.

На 2020-10-10 счёт достиг LIQUIDATED: total_return -100%, max_drawdown 100.0%, коэффициент Кальмара/восстановления -1.0. Бэктест даже не дошёл до 2021 — капитал обнулился в первый месяц торговли.

Отрицательное матожидание после издержек: avg_trade_return_pct -0.147% (ниже нуля, а не просто ниже порога комиссий 0.15%), profit_factor 0.0000639, матожидание -$45.0 на сделку за 6792 сделок.

Катастрофическая асимметрия левого хвоста: avg_win $0.01 против avg_loss $59.8, largest_win $1.21 против largest_loss -$2463, return_skew -12.3, эксцесс 177, tail_ratio 0.0001, омега 0.0. Стратегия собирает крошечную прибыль на схождении базиса и несёт огромные убытки, когда базис продолжает расширяться: стоп по расширению базиса и ценовой ограничитель не сдерживают хвостовые потери.

Однозначно плохие метрики доходности с поправкой на риск: коэффициент Шарпа -3.36 (CI [-6.59, -2.76], всё значение ниже нуля), коэффициент Сортино -3.35, PSR 0.0, information_ratio -8.34, альфа -41.6.

Это L73 семейство направленных стратегий на одном бессрочном контракте с дополнительным фильтром (премия/базис) — выживших нет — в сочетании с сигнатурой затухания движения по одной монете L55: затухание внутридневных отклонений базиса на одном альткоине приводит к неблагоприятному отбору именно во время быстрых движений, на которые нацелена гипотеза.

История итераций

Проверка не пройдена (слой 3 — бэктест в песочнице): у объекта 'SolPerpIndexPremiumOvershootFadeLS1m' нет атрибута 'subscribe_mark_price_updates' Использованный тип баров: SOLUSDT.BINANCE-1-MINUTE-LAST-EXTERNAL, обработано баров: 0 Убедитесь, что стратегия совершает сделки на предоставленных данных и с заданными параметрами.

Проверка не пройдена (слой 3 — бэктест в песочнице): дымовой тест превысил лимит времени выполнения 300 с. Обычно это означает, что объём работы на каждом баре растёт вместе с историей, например повторное сканирование всего ряда ставок финансирования/дополнительных данных или создание нового списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно создайте отсортированные массивы временных меток ONCE в __init__ и используйте bisect либо кэшируйте результаты поиска по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).

sandbox_timeout: проверка не пройдена (слой 3 — бэктест в песочнице): дымовой тест превысил лимит времени выполнения 300 с на окне около 20000 баров (69 дней по SOLUSDT.BINANCE-5-MINUTE-LAST-EXTERNAL). Обычно это означает, что объём работы на каждом баре растёт вместе с историей, например повторное сканирование всего ряда ставок финансирования/дополнительных данных или создание нового списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно создайте отсортированные массивы временных меток ONCE в __init__ и используйте bisect либо кэшируйте результаты поиска по временной метке, чтобы стоимость обработки бара была O(log n), а не O(n).

Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.