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

Стратегии

ETH Deribit: недельный пут-кредитный спред — сбор премии за риск волатильности + нисходящую асимметрию (опционы с ограниченным риском, вход по асимметрии, 3 параметров)

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

EthDeribitWeeklyPutCreditSpreadSkewVrp

ETH Deribit: недельный пут-кредитный спред — сбор премии за риск волатильности + нисходящую асимметрию (опционы с ограниченным риском, вход по асимметрии, 3 параметров)

Гипотеза

A DEFINED-RISK, одно-площадочная опционная стратегия на недельных экспирациях DERIBIT ETH, которая продает persistently переоцененный нижний край крипто-поверхности волатильности. Один раз в недельный цикл (ближняя экспирация ~5-7 DTE), и ONLY когда защита от падения demonstrably дорогая (пут 25-дельта IV богаче, чем ATM IV на skew-маржу AND ATM IV выше скользящей реализованной волатильности), она открывает PUT CREDIT SPREAD: SELL один пут ~25-дельта и BUY один пут ~10-дельта той же экспирации. Макс. убыток……Показать большеСвернуть

A DEFINED-RISK, одно-площадочная опционная стратегия на недельных экспирациях DERIBIT ETH, которая продает persistently переоцененный нижний край крипто-поверхности волатильности. Один раз в недельный цикл (ближняя экспирация ~5-7 DTE), и ONLY когда защита от падения demonstrably дорогая (пут 25-дельта IV богаче, чем ATM IV на skew-маржу AND ATM IV выше скользящей реализованной волатильности), она открывает PUT CREDIT SPREAD: SELL один пут ~25-дельта и BUY один пут ~10-дельта той же экспирации. Макс. убыток ограничен на (ширина страйков − чистый кредит), поэтому счет не может быть ликвидирован хвостовым движением — это напрямую отвечает на главную озабоченность риск-ревью по short-vol стратегиям. Это намеренно закрывает самый крупный портфельный пробел фабрики: опционы составляют 4.7% книги против квоты ≥15%, при практически нулевом прежнем покрытии. Она намеренно отличается от простого короткого стрэнгла — другой базовый актив (ETH), другая структура (вертикаль с определенным риском, а не голая двусторонняя), и другой сигнал (richness пут-SKEW + VRP, а не сырая IV/RV). Только 3 настраиваемых параметров, чтобы противостоять переобучению, которое погубило 259 прежних гипотез. NOT funding-carry (L33), NOT портфель momentum/trend-confluence (исчерпан), NOT разворот/затухание цены — источник P&L — это структурная страховая премия плюс премия крипто пут-скью, а не направленный прогноз цены.

У Layer-3 «No trades produced / 0 evaluated bars» было две конкретные причины, и ни одна из них не связана с порогом входа (в обратной связи верно указано, что пороги ослаблять не следует). Во-первых, строка «0 evaluated bars» для этого семейства вводит в заблуждение: RollingOptionsStrategy.on_bar полностью переопределяет FactoryStrategy.on_bar и никогда не доходит до _process_primary, поэтому bars_seen равен 0 для каждой стратегии rolling-options, включая те, что торгуют нормально, — я подтвердил это, прочитав……Показать большеСвернуть

У Layer-3 «No trades produced / 0 evaluated bars» было две конкретные причины, и ни одна из них не связана с порогом входа (в обратной связи верно указано, что пороги ослаблять не следует). Во-первых, строка «0 evaluated bars» для этого семейства вводит в заблуждение: RollingOptionsStrategy.on_bar полностью переопределяет FactoryStrategy.on_bar и никогда не доходит до _process_primary, поэтому bars_seen равен 0 для каждой стратегии rolling-options, включая те, что торгуют нормально, — я подтвердил это, прочитав rolling_options_template.py и base_template.py, а не добавляя вызов super().on_bar(), который направил бы первичные бары в барьер кросс-ног выравнивания базового класса, где прерывистые опционные ноги (тот же таймфрейм 1-DAY, что и у первичного) заблокировали бы обработку навсегда. Во-вторых, фактические блокировки: (a) ANNUALIZATION MISMATCH — унаследованные настройки реализованной волатильности были часовыми (rv_window=168, bars_per_year=8760), тогда как прогон выполняется на барах 1-DAY, поэтому дневные лог-доходности аннуализировались через sqrt(8760) вместо sqrt(365), завышая RV в 4.90x раза (обычная лента 3%/день ETH читается как 281% вместо 57%); гейт VRP iv >= rv*(1+margin) затем сравнивал ~60% IV против ~281% RV и был False на каждом цикле. Исправлено выводом bars_per_year из настроенного типа баров и выражением окна RV в календарных днях, чтобы дрейф не мог повториться ни на одном интервале (проверено: 1-DAY -> 365, 1-HOUR -> 8760, 4-HOUR -> 2190, и гейт теперь проходит на нормальной ленте). (b) ROLE MAPPING — унаследованный каркас ключировал ноги по виду опциона и требовал один колл плюс один пут (стрэнгл), поэтому две P-ноги пут-спреда сталкивались на одном ключе, вторая отклонялась как дубликат, проверка готовности требовала несуществующую колл-ногу, и каждая нога отправлялась SELL (два голых коротких пута, а не вертикаль с определенным риском). Теперь ноги отображаются по страйку на short/long, шорт продается, а лонг покупается на том же кэшированном количестве контрактов, атомарно. Я также удалил унаследованный стоп по мультипликатору премии: длинное крыло уже ограничивает убыток, поэтому стоп на capped-структуре лишь досрочно реализует ограниченный убыток и добавляет комиссии. Арифметика сайзинга проверена сквозным образом (спред шириной 150, кредит $22, макс. убыток $128 -> 15 контрактов = 1.9% риска на капитал). Я сохранил без изменений все, что прошло Layers 1-2: чистые импорты, свободную функцию _bar_ts на уровне модуля, которая исправляет TypeError от rebinding статического метода Layer-2, парсер DVOL, инверсию IV по Блэку-Шоулзу и непрерывный calculate_signal. lookback_days равен 49 (7 циклов, 14 опционных ног), потому что загрузчик каталога per-bar-type стоит ~10с на ногу, а более крупная цепочка рискует превысить wall clock Layer-3; это ограничивает начальную выборку и является свойством загрузчика, а не свойством гипотезы.

verification_loop: Проверка не пройдена (Layer 4 — ревью QA) [class=code_defect]: - [edge_concern] Sandbox avg_trade_return_pct равен -45.45% на 2 сделках с metrics_reliable=false и data_days=1 — это не вердикт по эффективности (доходность на номинал не показательна для опционных ног, где премиальный номинал << номинала крыла, а песочница — это 1-дневный smoke-тест). Это переносится только как контекст: если описанная ниже проблема загрузчика/глубины будет решена и накопится реальная выборка недельных опционов,……Показать большеСвернуть

verification_loop: Проверка не пройдена (Layer 4 — ревью QA) [class=code_defect]: - [edge_concern] Sandbox avg_trade_return_pct равен -45.45% на 2 сделках с metrics_reliable=false и data_days=1 — это не вердикт по эффективности (доходность на номинал не показательна для опционных ног, где премиальный номинал << номинала крыла, а песочница — это 1-дневный smoke-тест). Это переносится только как контекст: если описанная ниже проблема загрузчика/глубины будет решена и накопится реальная выборка недельных опционов, аналитику следует перепроверить, покрывает ли собранный чистый кредит round-trip комиссии Deribit 0.03%/сторона по 4 ногам (открытие+закрытие x шорт+лонг) плюс любое проскальзывание при исполнении, поскольку per-notional преимущество пут-кредит-спреда структурно тонкое. - [critical] rolling_options.lookback_days=49 ограничивает ENTIRE разрешаемую опционную цепочку бэктеста ANY примерно 49 днями, заканчивающимися «сейчас» = ~7 недельных циклов / ~14 опционных ног, независимо от 6.5-летней истории опционов ETH на Deribit. В остальной части окна стратегия стоит во флэте и торгует только в хвосте. Песочница подтверждает это эмпирически: bars_processed=2400 (~6.5 лет), но data_days=1 и total_trades=2 (trades_count=4). Преимущество variance-risk-premium + skew нельзя отличить от шума на ~7 циклах / ~14 ногах — намного ниже ~30-100 сделок, необходимых для измеримой опционной выборки. Это именно та ловушка loader-cost-vs-sample-size-22, из-за которой почти идентичный BtcDeribitWeeklyDeltaHedgedAtmStraddleVrp (та же площадка, тот же lookback_days=49) был заброшен на Layer 4 несколько дней назад. Собственное обоснование разработчика признает ограничение («lookback_days равен 49 (7 циклов, 14 опционных ног), потому что загрузчик каталога per-bar-type стоит ~10с на ногу, а более крупная цепочка рискует превысить wall clock Layer-3»). В такой конфигурации стратегия никогда не сможет дать измеримый полный бэктест. — fix: Не пропускать на ~7 циклах. Перед повторной отправкой устраните ловушку loader-cost vs sample-size-22: пакетируйте/параллелизуйте или кэшируйте загрузки per-leg catalog.bars() между барами, чтобы lookback_days мог охватить много лет недельных циклов (~200-300 циклов), не нарушая wall-clock песочницы, затем установите lookback_days на покрытие всего тестового окна. Если загрузчик действительно не может разрешить измеримую историю недельных опционов в пределах бюджета времени, это семейство нетестируемо в текущем харнесе на недельном ритме и должно быть перепроектировано (например, меньше, более длинные месячные циклы на весь диапазон), а скорее

Реализация

Пут-кредит-спред с определенным риском на недельных опционах Deribit ETH. В каждом недельном цикле экспирации (~7 DTE) фреймворк rolling-options разрешает две пут-ноги (~5% и ~10% OTM); стратегия отображает их по страйку на короткую (более высокий страйк, ~25-дельта) и длинную (более низкий страйк, ~10-дельта) ногу, SELLS шорт и BUYS лонг при идентичном количестве контрактов 1:1 и держит до буфера ролла перед европейским денежным расчетом. Вход ограничен двумя тестами richness, измеренными в entry-окне цикла:……Показать большеСвернуть

Пут-кредит-спред с определенным риском на недельных опционах Deribit ETH. В каждом недельном цикле экспирации (~7 DTE) фреймворк rolling-options разрешает две пут-ноги (~5% и ~10% OTM); стратегия отображает их по страйку на короткую (более высокий страйк, ~25-дельта) и длинную (более низкий страйк, ~10-дельта) ногу, SELLS шорт и BUYS лонг при идентичном количестве контрактов 1:1 и держит до буфера ролла перед европейским денежным расчетом. Вход ограничен двумя тестами richness, измеренными в entry-окне цикла: нижний skew (short-put IV >= Deribit DVOL ATM IV x (1 + skew_margin)) и variance risk premium (ATM IV >= скользящая 14-дневная реализованная волатильность x (1 + vrp_margin)). IV ног инвертируются из собственного бара премии USD каждой ноги по Блэку-Шоулзу. Макс. убыток на спред равен (ширина страйков - чистый кредит), фиксируется на входе, и сайзинг рискует ровно этим: контракты = floor(капитал x risk_frac / max_loss), ограничен сверху так, чтобы валовая ширина спреда оставалась внутри 50% капитала, и снизу минимумом Deribit 1-контракт ETH. 3 настраиваемых параметров (skew_margin, vrp_margin, risk_frac); плечо 1.0; нет пути торговли perp/базовым активом.

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

Проверка не пройдена (слой 4 — проверка QA) [class=code_defect]: - [edge_concern] Результат песочницы avg_trade_return_pct составляет -45.45% по 2 сделкам при metrics_reliable=false и data_days=1 — это не оценка доходности (доходность на единицу номинала не имеет смысла для опционных позиций, где номинал премии << номинала крыла, а песочница представляет собой дымовой тест на 1 дней). Этот результат приводится только как контекст: если проблема загрузчика/периода ретроспективных данных будет решена и наберётся……Показать большеСвернуть

Проверка не пройдена (слой 4 — проверка QA) [class=code_defect]: - [edge_concern] Результат песочницы avg_trade_return_pct составляет -45.45% по 2 сделкам при metrics_reliable=false и data_days=1 — это не оценка доходности (доходность на единицу номинала не имеет смысла для опционных позиций, где номинал премии << номинала крыла, а песочница представляет собой дымовой тест на 1 дней). Этот результат приводится только как контекст: если проблема загрузчика/периода ретроспективных данных будет решена и наберётся реальная выборка недельных опционов, аналитику следует повторно проверить, покрывает ли полученный чистый кредит круговую комиссию Deribit в размере 0.03%/сторону по 4 ногам (открытие+закрытие × короткая+длинная), а также возможное проскальзывание при исполнении. Структурное преимущество спреда кредитных путов на единицу номинала невелико. - [критично] rolling_options.lookback_days=49 ограничивает доступную для разрешения цепочку опционов ENTIRE бэктеста ANY примерно 49 днями, заканчивающимися «сейчас» = примерно 7 недельными циклами / 14 опционными ногами, независимо от 6.5-летней истории опционов Deribit ETH. В остальную часть периода стратегия не открывает позиции и торгует только в конце. Песочница подтверждает это эмпирически: bars_processed=2400 (примерно 6.5 лет), однако data_days=1 и total_trades=2 (trades_count=4). Преимущество за счёт премии за риск дисперсии и перекоса нельзя отличить от шума на выборке примерно в 7 циклов / 14 ног — это намного меньше примерно 30-100 сделок, необходимых для измеримой опционной выборки. Именно эта проблема компромисса между стоимостью загрузчика и размером выборки -22 привела к тому, что почти идентичная BtcDeribitWeeklyDeltaHedgedAtmStraddleVrp (та же площадка, то же lookback_days=49) была отклонена на слое 4 несколько дней назад. Обоснование самого разработчика признаёт ограничение («lookback_days составляет 49 (7 циклов, 14 опционных ног), поскольку загрузка каталога для каждого типа бара стоит примерно 10 с на ногу, а более крупная цепочка грозит превысить лимит времени слоя -3»). В текущей конфигурации стратегия никогда не сможет обеспечить измеримый полный бэктест. — исправление: не останавливайтесь на примерно 7 циклах. Прежде чем отправлять повторно, устраните проблему компромисса между стоимостью загрузчика и размером выборки -22: выполняйте пакетную/параллельную загрузку или кэшируйте вызовы catalog.bars() для каждой ноги по барам, чтобы lookback_days мог охватить много лет недельных циклов (примерно 200-300 циклов), не превышая лимит времени песочницы, а затем установите lookback_days, чтобы покрыть весь период тестирования. Если загрузчик действительно не способен получить измеримую историю недельных опционов в рамках доступного времени, это семейство стратегий нельзя тестировать в текущей инфраструктуре с недельной периодичностью; его следует переработать (например, использовать меньшее число более долгосрочных месячных циклов на всём временном интервале), а не

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

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['contracts', 'leg_sides', 'risk_frac', 'rv_window', 'atm_offset', 'skew_margin', 'iv_rv_margin', 'bars_per_year', 'min_contracts', 'iv_stale_hours', 'rv_slow_window', 'long_put_offset', 'rolling_options', 'short_put_offset', 'max_notional_frac', 'min_bars_required', 'roll_buffer_hours', 'entry_window_hours'] Проверьте, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError:……Показать большеСвернуть

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['contracts', 'leg_sides', 'risk_frac', 'rv_window', 'atm_offset', 'skew_margin', 'iv_rv_margin', 'bars_per_year', 'min_contracts', 'iv_stale_hours', 'rv_slow_window', 'long_put_offset', 'rolling_options', 'short_put_offset', 'max_notional_frac', 'min_bars_required', 'roll_buffer_hours', 'entry_window_hours'] Проверьте, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - zero_volume: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - price_gap: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000)

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['contracts', 'leg_sides', 'risk_frac', 'rv_window', 'stop_mult', 'put_offset', 'call_offset', 'iv_rv_margin', 'bars_per_year', 'min_contracts', 'iv_stale_hours', 'rv_slow_window', 'max_delta_ratio', 'rolling_options', 'max_notional_frac', 'min_bars_required', 'roll_buffer_hours', 'entry_window_hours'] Проверьте, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts()……Показать большеСвернуть

Проверка не пройдена (уровень 2 — синтетические сценарии): Использованные параметры: ['contracts', 'leg_sides', 'risk_frac', 'rv_window', 'stop_mult', 'put_offset', 'call_offset', 'iv_rv_margin', 'bars_per_year', 'min_contracts', 'iv_stale_hours', 'rv_slow_window', 'max_delta_ratio', 'rolling_options', 'max_notional_frac', 'min_bars_required', 'roll_buffer_hours', 'entry_window_hours'] Проверьте, что __init__ задаёт все атрибуты из self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - zero_volume: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000) - price_gap: TypeError: FactoryStrategy._bar_ts() принимает 1 позиционный аргумент, но передано 2 (временная метка бара: 1735691040000)

Проверка не пройдена (Уровень 3 — бэктест в песочнице): сделки отсутствуют Использованный тип бара: ETH-PERPETUAL.DERIBIT-1-DAY-LAST-EXTERNAL, обработано баров: 2400 Диагностика: calculate_signal() ни разу не вычислялся (0 вычисленных баров) -> ни один первичный бар не достиг сигнального пути базового шаблона -> если вы переопределяете on_bar(), вызовите super().on_bar(bar); проверьте, что bar_type соответствует данным инструмента. Не NOT ослабляйте пороги входа — логика входа ни разу не выполнялась. Убедитесь, что ваша стратегия дает сделки с заданными данными и параметрами.

Проверка не пройдена (Layer 4 — ревью QA) [class=hypothesis_mismatch]: - [edge_concern] Не является основанием для вердикта — блок связан с фиделити, а не с эффективностью. (Для протокола песочница также отрицательная: -2.9%, PF 0.13, win 0.125, хвост -$2,149 на якобы остановленной книге — но это результат чужой стратегии.) - WHOLE-STRATEGY SWAP / MISLINK. Гипотеза — это ETH недельный Deribit PUT CREDIT SPREAD (продать пут ~25d, BUY пут ~10d — вертикаль с определенным риском). Код — это BTC недельный……Показать большеСвернуть

Проверка не пройдена (Layer 4 — ревью QA) [class=hypothesis_mismatch]: - [edge_concern] Не является основанием для вердикта — блок связан с фиделити, а не с эффективностью. (Для протокола песочница также отрицательная: -2.9%, PF 0.13, win 0.125, хвост -$2,149 на якобы остановленной книге — но это результат чужой стратегии.) - WHOLE-STRATEGY SWAP / MISLINK. Гипотеза — это ETH недельный Deribit PUT CREDIT SPREAD (продать пут ~25d, BUY пут ~10d — вертикаль с определенным риском). Код — это BTC недельный дельта-нейтральный Deribit SHORT STRANGLE (имя класса, docstring, обоснование iter-3 и каждый механизм — это стрэнгл). Инструмент AND и механизм оба отличаются → неверно сгенерированный/привязанный артефакт, а не эта гипотеза. Перегенерируйте/перепривяжите правильный ETH put-credit-spread. - Неверный инструмент: гипотеза — ETH, но instrument_id и bar_type — это BTC-PERPETUAL.DERIBIT и rolling_options.underlying равен 'BTC'. ETH нет нигде. - Неверная структура / не определенный риск: гипотеза ограничивает макс. убыток крылом пута PURCHASED ~10d. Код отправляет TWO SELL ноги с NO купленным крылом; хвост ограничен только мягким стопом по премии следующего бара (песочница largest_loss -$2,149 против avg_win ~$214 показывает, что он не ограничивает хвост) — именно тот неограниченный профиль, которого избегает гипотеза. - Основное преимущество отсутствует: сигнал гипотезы — richness нижнего SKEW (25d-пут IV против ATM IV) плюс IV>RV. Код не считает skew — только средний стрэнгл IV/RV VRP. Сбор пут-скью, который отличает эту гипотезу, не реализован.

Причина отказа

verification_loop: Проверка не пройдена (Layer 4 — ревью QA) [class=code_defect]: - [edge_concern] Sandbox avg_trade_return_pct равен -45.45% на 2 сделках с metrics_reliable=false и data_days=1 — это не вердикт по эффективности (доходность на номинал не показательна для опционных ног, где премиальный номинал << номинала крыла, а песочница — это 1-дневный smoke-тест). Это переносится только как контекст: если описанная ниже проблема загрузчика/глубины будет решена и накопится реальная выборка недельных опционов,……Показать большеСвернуть

verification_loop: Проверка не пройдена (Layer 4 — ревью QA) [class=code_defect]: - [edge_concern] Sandbox avg_trade_return_pct равен -45.45% на 2 сделках с metrics_reliable=false и data_days=1 — это не вердикт по эффективности (доходность на номинал не показательна для опционных ног, где премиальный номинал << номинала крыла, а песочница — это 1-дневный smoke-тест). Это переносится только как контекст: если описанная ниже проблема загрузчика/глубины будет решена и накопится реальная выборка недельных опционов, аналитику следует перепроверить, покрывает ли собранный чистый кредит round-trip комиссии Deribit 0.03%/сторона по 4 ногам (открытие+закрытие x шорт+лонг) плюс любое проскальзывание при исполнении, поскольку per-notional преимущество пут-кредит-спреда структурно тонкое. - [critical] rolling_options.lookback_days=49 ограничивает ENTIRE разрешаемую опционную цепочку бэктеста ANY примерно 49 днями, заканчивающимися «сейчас» = ~7 недельных циклов / ~14 опционных ног, независимо от 6.5-летней истории опционов ETH на Deribit. В остальной части окна стратегия стоит во флэте и торгует только в хвосте. Песочница подтверждает это эмпирически: bars_processed=2400 (~6.5 лет), но data_days=1 и total_trades=2 (trades_count=4). Преимущество variance-risk-premium + skew нельзя отличить от шума на ~7 циклах / ~14 ногах — намного ниже ~30-100 сделок, необходимых для измеримой опционной выборки. Это именно та ловушка loader-cost-vs-sample-size-22, из-за которой почти идентичный BtcDeribitWeeklyDeltaHedgedAtmStraddleVrp (та же площадка, тот же lookback_days=49) был заброшен на Layer 4 несколько дней назад. Собственное обоснование разработчика признает ограничение («lookback_days равен 49 (7 циклов, 14 опционных ног), потому что загрузчик каталога per-bar-type стоит ~10с на ногу, а более крупная цепочка рискует превысить wall clock Layer-3»). В такой конфигурации стратегия никогда не сможет дать измеримый полный бэктест. — fix: Не пропускать на ~7 циклах. Перед повторной отправкой устраните ловушку loader-cost vs sample-size-22: пакетируйте/параллелизуйте или кэшируйте загрузки per-leg catalog.bars() между барами, чтобы lookback_days мог охватить много лет недельных циклов (~200-300 циклов), не нарушая wall-clock песочницы, затем установите lookback_days на покрытие всего тестового окна. Если загрузчик действительно не может разрешить измеримую историю недельных опционов в пределах бюджета времени, это семейство нетестируемо в текущем харнесе на недельном ритме и должно быть перепроектировано (например, меньше, более длинные месячные циклы на весь диапазон), а скорее

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