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

Стратегии

ianzeng123 RWA Risk Parity v2.5 — точный перенос четырёхактивной стратегии на Bybit

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

IanzengRwaRiskParityV25

Сводка по итогам

IanzengRwaRiskParityV25 пыталась перенести на платформу распределитель рисков с четырьмя активами на Bybit от ianzeng123 (BTC, золото, SPY, сырая нефть), сохранив логику распределения из ветки paper исходного кода. За 3 итераций код так и не прошёл проверку слоя 3: дымовой тест в песочнице превысил лимит 300 с на окне примерно в 20,000 часовых баров. Вероятная причина — на каждом баре заново строились карты временных меток и вычислялись пересечения по полной истории всех четырёх активов. Работу остановили до бэктеста, оптимизации или проверки аналитиком, поэтому данных о результативности нет.

Гипотеза

Переведите исполняемую мультиактивную стратегию распределения активов ianzeng123, сохранив предоставленный код, а не исправляя его для соответствия описанию. Торгуйте бессрочными контрактами на BTC, золото, SPY и сырую нефть USDT на Bybit. В коде используются PERIOD_H1, а не бары ковариации по 15 минут, указанные в описании. Сохраните знаковые веса паритета рисков, экспозицию, зависящую от волатильности, начальную ребалансировку, ребалансировку по времени, изменению весов и направления, а также экстренное……Показать большеСвернуть

Переведите исполняемую мультиактивную стратегию распределения активов ianzeng123, сохранив предоставленный код, а не исправляя его для соответствия описанию. Торгуйте бессрочными контрактами на BTC, золото, SPY и сырую нефть USDT на Bybit. В коде используются PERIOD_H1, а не бары ковариации по 15 минут, указанные в описании. Сохраните знаковые веса паритета рисков, экспозицию, зависящую от волатильности, начальную ребалансировку, ребалансировку по времени, изменению весов и направления, а также экстренное частичное сокращение позиций. Значения по умолчанию в исходнике: TRADE_MODE=paper, INIT_CAPITAL=10000 USDT, LOOKBACK=60, EWMA_LAMBDA=0.94, TARGET_VOL=0.15, MAX_LEVERAGE=3, REBALANCE_HOURS=24, DRIFT_THRESHOLD=0.15, POSITION_RATIO=0.95 и MIN_REBAL_USDT=5. Адаптация для платформы использует фактический капитал счёта $100000 и учёт движка, включая реальные комиссии и издержки исполнения; не воспроизводите симулированный PnL исходника без комиссий как результаты бэктеста. Логику распределения из ветки paper исходника сохраняйте отдельно от учёта движка. Оптимизация параметров не разрешена.

Явная просьба пользователя о точном переносе имеет приоритет над выбором другого механизма ради разнообразия. Доля Bybit составляет лишь 2.3%, а этот портфель из четырёх активов решает проблему концентрации в одном инструменте. BTC необходим исходному пулу активов. corpus_concentration пуст, поэтому недавнюю долю конкретного инструмента проверить нельзя. В каталогах с точными путями 1-HOUR есть файлы parquet для всех четырёх активов Bybit. Диапазоны в именах файлов указывают на возможное общее покрытие с 2026-05-14 10:00 UTC по 2026-10-02 00:00 UTC; это не подтверждает непрерывность данных на уровне строк, пересечение временных меток или экономическую идентичность контрактов. Перед написанием кода и бэктестом проверьте это, в том числе что CL — сырая нефть, а SPY отражает предполагаемую экспозицию к акциям. Не подменяйте их похожими токенами или другими активами.

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

Реализация

Точный перенос на Bybit стратегии паритета рисков ianzeng123 RWA версии 2.5. Используются часовые цены закрытия для бессрочных контрактов BTC, XAU, SPY и CL USDT; учитываются только моменты времени, для которых есть бары по всем четырём активам. Ковариация рассчитывается как EWMA (лямбда 0.94, доходности 60, регуляризация 0.001). Решатель паритета рисков со знаковыми весами определяет направление каждого актива по его ковариации с равноволатильным портфелем, ограничивает веса значением +/-0.5 и нацелен на плечо min(0.15/annual_vol, 3). Исходный журнал распределения в режиме paper выполняет начальную перебалансировку, перебалансировку через 24 ч, при смене направления и дрейфе 15%. Он также применяет экстренное правило (неблагоприятное движение на 5% вдвое сокращает позицию актива) и масштабирование по лимиту маржи. Журнал отправляет реальные рыночные ордера по одному активу за раз через движок; учитываются реальные комиссии Bybit.

Итерация 3 исправляет только сбой слоя 2. В синтетическом стенде конфигурация создаётся со значением плеча по умолчанию 1.0, тогда как parameters.leverage остаётся равным 3.0; поэтому проверка жёсткого условия «должно совпадать» нарушала настройку каждого сценария. Эта проверка удалена. В реальной конфигурации по-прежнему заданы leverage=3.0 и parameters.leverage=3.0, что соответствует фиксированному значению из плана. Размер позиции по-прежнему рассчитывается с использованием self.config.leverage: current_leverage = min(TARGET_VOL/annual_vol, MAX_LEVERAGE, config.leverage). Сигнал, решатель, журнал, логика ребалансировки и экстренных действий, параметры и конфигурация не изменены относительно итерации 2.

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

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

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

Проверка не пройдена (слой 1.5 — согласованность гипотезы и конфигурации) [класс=hypothesis_mismatch]: - optimization_plan задаёт фиксированное кредитное плечо 3.0

Проверка не пройдена (слой 2 — синтетические сценарии): Использованные параметры: ['LOOKBACK', 'leverage', 'TARGET_VOL', 'TRADE_MODE', 'EWMA_LAMBDA', 'ANNUAL_HOURS', 'INIT_CAPITAL', 'MAX_LEVERAGE', 'MID_INTERVAL', 'PNL_INTERVAL', 'SOURCE_ORDER', 'FAST_INTERVAL', 'NUMERIC_FLOOR', 'POSITION_DUST', 'SLOW_INTERVAL', 'EMERGENCY_DROP', 'MIN_REBAL_USDT', 'POSITION_RATIO', 'DRIFT_THRESHOLD', 'REBALANCE_HOURS', 'CASH_BUFFER_USDT', 'COV_SCALE_TARGET', 'EMERGENCY_REDUCE', 'MAX_SHORT_WEIGHT', 'SOLVER_TOLERANCE',……Показать большеСвернуть

Проверка не пройдена (слой 2 — синтетические сценарии): Использованные параметры: ['LOOKBACK', 'leverage', 'TARGET_VOL', 'TRADE_MODE', 'EWMA_LAMBDA', 'ANNUAL_HOURS', 'INIT_CAPITAL', 'MAX_LEVERAGE', 'MID_INTERVAL', 'PNL_INTERVAL', 'SOURCE_ORDER', 'FAST_INTERVAL', 'NUMERIC_FLOOR', 'POSITION_DUST', 'SLOW_INTERVAL', 'EMERGENCY_DROP', 'MIN_REBAL_USDT', 'POSITION_RATIO', 'DRIFT_THRESHOLD', 'REBALANCE_HOURS', 'CASH_BUFFER_USDT', 'COV_SCALE_TARGET', 'EMERGENCY_REDUCE', 'MAX_SHORT_WEIGHT', 'SOLVER_TOLERANCE', 'MIN_SOLVER_WEIGHT', 'SOLVER_ITERATIONS', 'COV_REGULARIZATION', '_optimization_plan', 'MIN_ADD_MARGIN_USDT', 'ALIGNMENT_EXTRA_BARS', 'INVALID_VARIANCE_VOL'] Проверьте, что __init__ задаёт все атрибуты на основе self.parameters.get(). - steady_uptrend: Ошибка настройки: ValueError: parameters.leverage должен совпадать с config.leverage - steady_downtrend: Ошибка настройки: ValueError: parameters.leverage должен совпадать с config.leverage - flat_ranging: Ошибка настройки: ValueError: parameters.leverage должен совпадать с config.leverage - volatility_spike: Ошибка настройки: ValueError: parameters.leverage должен совпадать с config.leverage - zero_volume: Ошибка настройки: ValueError: parameters.leverage должен совпадать с config.leverage - price_gap: Ошибка настройки: ValueError: parameters.leverage должен совпадать с config.leverage

Сводка по итогам

В стратегиях с несколькими активами ограничивайте объём работы на каждом баре: обновляйте скользящие окна цен с выравниванием по временным меткам, а не перестраивайте словари и пересечения множеств по всей накопленной истории каждого актива на каждом баре.

Её исключили в цикле проверки после 3 итераций: бэктест в песочнице Layer 3 превысил лимит времени в 300 секунд на окне примерно в 20,000 баров (833 дней по BTCUSDT.BYBIT 1-часовых баров). Вероятная причина — объём работы на каждом баре растёт вместе с длиной истории.

Точный перенос стратегии паритета рисков RWA версии 2.5 от ianzeng123: распределение знаковых весов паритета рисков между бессрочными контрактами на BTC, золото, SPY и сырую нефть USDT на Bybit с использованием часовой ковариации EWMA, таргетирования волатильности (TARGET_VOL=0.15, MAX_LEVERAGE=3) и ребалансировки по времени, дрейфу и смене направления; оптимизация параметров не разрешена.

Данных о результативности нет: стратегия не сформировала отчёт о бэктесте, поэтому доходность, коэффициент Шарпа и число сделок неизвестны; до этапов оптимизации, анализа и оценки рисков дело не дошло.

Анализ

Стратегия паритета рисков для класса активов RWA

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