DeribitEthWeeklyPutWriteTrendGatedOnly
Гипотезы
Deribit ETH Еженедельный Put-Write OTM с Денежным Обеспечением — Только с Трендовым Фильтром, Фиксированная ~25-Дельта, NO Фильтр IV с Долгим Просмотром (Сбор VRP на Одной Ноге; Напрямую Устраняет Тупик Просмотра с 4 Сделками, Из-за Которого Был Отброшен ETH-Еженедельный Аналог)
Гипотезы
SINGLE-LEG, полностью обеспеченная денежным залогом еженедельная PUT-WRITING-программа на опционы Deribit ETH — второй по ликвидности базовый актив криптоопционов, повторно использующая путь исполнения EXACT (выбор страйка через греки, еженедельный расчёт денежными средствами) из продвинутого фабрикой Sharpe-12.2 Deribit-BTC-еженедельного put-write. Она сознательно разработана, чтобы FIX единственную, многократно диагностированную причину, по которой ETH-еженедельный аналог был отброшен после 8 итераций: его двойной фильтр IV-ранг + IV>RV требовал скользящего окна просмотра ~560 дней, что сократило его до всего 4 сделок / metrics_reliable=false — структурный тупик, который разработчик так и не смог решить. Эта версия DROPS долгий фильтр просмотра IV полностью и сохраняет ONLY трендовый фильтр (фильтр, доказавший свою значимость в продвинутом победителе BTC), выписывая фиксированный ~25-дельта OTM ETH пут каждую подходящую неделю. Не имея многолетней зависимости от процентиля IV, она срабатывает ~40-52 раз/год за доступную еженедельную историю Deribit ETH → статистически надёжное количество сделок, устраняя именно тупик с 4 сделками. Она заполняет наиболее недопредставленную площадку (опционы: 5.5% Deribit + 0.1% Binance против цели ≥15%) и диверсифицирует портфель опционов с BTC-только на второй некоррелированный по волатильности базовый актив. Это NOT многоногая структура (L2), NOT ячейка с ограничением по данным (еженедельная цепочка ETH + греки каталогизированы и доказано исполнимы через аналог BTC), NOT направленная. Сознательно 2 параметры (дельта пута, длина трендового фильтра), чтобы противостоять переобучению.
Гипотезы
Итерация 3 устраняет тайм-аут по реальному времени Layer-3 только изменением конфигурации; код стратегии CODE не изменился (он уже прошёл слои 1-2, работа на каждый бар — O(1) через инкрементальную скользящую сумму SMA, и нет сканирований min()/sorted()/истории на каждом баре). Диагностика: итерация 2 корректно перенесла разрешение первичного актива+ноги на 1-DAY, но STILL превысила лимит времени, что доказывает, что узкое место — не количество баров. При чтении src/data/option_chain.py: discover_deribit_chain выполняет сетевой запрос fetch_ohlcv для каждого кандидата страйка каждой еженедельной экспирации EACH, а песочница Layer-3 охватывает lookback_days (expand_rolling_options / значение конвейера по умолчанию 365). Таким образом, стоимость расширения масштабируется с количеством еженедельных экспираций = lookback_days, независимо от таймфрейма. Конфигурация iter-2 содержала lookback_days ~730 (~104 экспираций, что удваивает количество запросов), что превысило бюджет 300с. Возврат lookback_days к 365 (~52 экспираций) сокращает вдвое количество запросов на экспирацию и загрузок ног, соответствуя точному масштабу, при котором проверенные аналоги еженедельного put-write ETH/BTC проходят Layer 3, при этом всё ещё покрывая ~52 подходящих недель, так что количество сделок остаётся статистически надёжным (~30-52 записей после трендового фильтра) и намного выше тупика в 4 сделок. Всё остальное сохранено и проверено: прямое наследование от RollingOptionsStrategy (Layer-1 распознаёт это; абстрактные хуки 4 физически присутствуют), отсутствие smoke-пути (реальные ноги опционов торгуются через расширенное расписание, удовлетворяя options_no_option_trades), единственный трендовый фильтр только по цене в _enter_leg, разрешение первичного актива 1-DAY ETH-PERPETUAL + ноги 1-DAY (то же разрешение, что использует прошедший аналог put-write ETH), размер позиции с денежным обеспечением (risk_frac 0.8, плечо 1.0 согласно лимиту площадки опционов), и дизайн с 2 параметрами (смещение пута + sma_window).
Гипотезы
backtest_failed: RuntimeError: не удалось выполнить расширение rolling_options (ConnectError: ); отказ от запуска с пустым расписанием опционов
Traceback (most recent call last):
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
yield
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request
resp = await self._pool.handle_async_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 256, in handle_async_request
raise exc from None
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 236, in handle_async_request
response = await connection.handle_async_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 101, in handle_async_request
raise exc
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 78, in handle_async_request
stream = await self._connect(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 156, in _connect
stream = await stream.start_tls(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 67, in start_tls
with map_exceptions(exc_map):
File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc) from exc
httpcore.ConnectError
Указанное выше исключение стало непосредственной причиной следующего исключения:
Traceback (most recent call last):
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 49, in expand_rolling_options_into_config
extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/option_chain.py", line 242, in expand_rolling_options
contracts = await discover_deribit_chain(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/option_chain.py", line 143, in discover_deribit_chain
perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 169, in fetch_ohlcv
result = await self._get("/public/get_tradingview_chart_data", {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 86, in _get
response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1768, in get
return await self.request(
^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1540, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send
response = await self._send_handling_auth(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth
response = await self._send_handling_redirects(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects
response = await self._send_single_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request
response = await transport.handle_async_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request
with map_httpcore_exceptions():
File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ConnectError
Указанное выше исключение стало непосредственной причиной следующего исключения:
Traceback (most recent call last):
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 184, in _run_backtest
config = await self._maybe_expand_rolling_options(config, catalog_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 427, in _maybe_expand_rolling_options
config = await expand_rolling_options_into_config(config, catalog_path, self._logger)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 59, in expand_rolling_options_into_config
raise RuntimeError(
RuntimeError: не удалось выполнить расширение rolling_options (ConnectError: ); отказ от запуска с пустым расписанием опционов
Реализация
Выписывание путов на одной ноге с денежным обеспечением еженедельно OTM на европейских опционах ETH Deribit, только с трендовым фильтром. Каждую неделю фреймворк определяет историческую еженедельную цепочку путов Deribit ETH (целясь в страйк ~25-дельта OTM через смещение по денежности -6%) и перекладывает её; стратегия SELLS один пут ~7 дней до экспирации и закрывает его ~24ч до расчёта. Фильтр ONLY — это трендовый фильтр только по цене: он выписывает пут только когда спот ETH выше своей ~50-дневной SMA (дневные бары), пропуская подтверждённые нисходящие тренды. Не имея многолетнего окна процентиля IV, она торгует каждую подходящую неделю (~52/год за окно 365 дней) для статистически надёжного количества сделок, напрямую устраняя тупик просмотра с 4 сделками, из-за которого был отброшен IV-гейтованный ETH-еженедельный аналог. Первичный = ETH-PERPETUAL.DERIBIT на барах 1-DAY (только для тактового цикла перекладки, никогда не торгуется). Размер позиции с денежным обеспечением (risk_frac 0.8), без плеча, 2 настроенные параметры (смещение пута, sma_window).
Результаты верификации
CLEAN RESTART 2026-09-04 — история вердиктов и записи обучения этого запуска были удалены, и он был перезапущен с этапа верификации. Его предыдущее прекращение произошло из-за конвейера, а не из-за рынка: обвязка Layer-2 неправильно привязывала вспомогательные методы @staticmethod (исправлено), QA выносил окончательные вердикты по производительности на неоптимизированном smoke-тесте (удалено — QA теперь оценивает только корректность), а тайм-ауты песочницы были вызваны нехваткой слотов бэктеста (исправлено). Гипотеза и код стратегии не изменились. Проверяйте код по существу; производительность будет определена позже полным бэктестом и оптимизатором.
Результаты верификации
Не требуется.
Результаты верификации
Layer-1 пометил self._win.append() как неограниченный рост, но on_bar обрезает дек на каждом баре (while len > sma_window: popleft()), так что рост ограничен sma_window. Ложное срабатывание.
Iteration History
Верификация не пройдена (Layer 3 — бэктест в песочнице): smoke-тест превысил лимит реального времени 300с. Это почти всегда означает работу на каждый бар, масштабирующуюся с историей — например, повторное сканирование всего ряда funding/дополнительных данных, или перестроение списка с вызовом min()/sorted() внутри calculate_signal()/on_bar() на каждом баре. Предварительно вычисляйте отсортированные массивы временных меток ONCE в __init__ и используйте bisect, либо кэшируйте запросы по ключу временной метки, чтобы стоимость на бар была O(log n), а не O(n).
Iteration History
RuntimeError: не удалось выполнить расширение rolling_options (ConnectError: ); отказ от запуска с пустым расписанием опционов
Traceback (most recent call last):
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
yield
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request
resp = await self._pool.handle_async_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 256, in handle_async_request
raise exc from None
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 236, in handle_async_request
response = await connection.handle_async_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 101, in handle_async_request
raise exc
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 78, in handle_async_request
stream = await self._connect(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 156, in _connect
stream = await stream.start_tls(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 67, in start_tls
with map_exceptions(exc_map):
File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc) from exc
httpcore.ConnectError
Приведённое выше исключение было непосредственной причиной следующего исключения:
Traceback (most recent call last):
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 49, in expand_rolling_options_into_config
extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/option_chain.py", line 242, in expand_rolling_options
contracts = await discover_deribit_chain(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/option_chain.py", line 143, in discover_deribit_chain
perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 169, in fetch_ohlcv
result = await self._get("/public/get_tradingview_chart_data", {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 86, in _get
response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1768, in get
return await self.request(
^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1540, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send
response = await self._send_handling_auth(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth
response = await self._send_handling_redirects(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects
response = await self._send_single_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request
response = await transport.handle_async_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request
with map_httpcore_exceptions():
File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ConnectError
Приведённое выше исключение было непосредственной причиной следующего исключения:
Traceback (most recent call last):
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 184, in _run_backtest
config = await self._maybe_expand_rolling_options(config, catalog_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 427, in _maybe_expand_rolling_options
config = await expand_rolling_options_into_config(config, catalog_path, self._logger)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 59, in expand_rolling_options_into_config
raise RuntimeError(
RuntimeError: не удалось выполнить расширение rolling_options (ConnectError: ); отказ от запуска с пустым расписанием опционов
Причина отказа
backtest_failed: RuntimeError: не удалось выполнить расширение rolling_options (ConnectError: ); отказ от запуска с пустым расписанием опционов
Traceback (most recent call last):
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions
yield
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request
resp = await self._pool.handle_async_request(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 256, in handle_async_request
raise exc from None
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 236, in handle_async_request
response = await connection.handle_async_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 101, in handle_async_request
raise exc
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 78, in handle_async_request
stream = await self._connect(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 156, in _connect
stream = await stream.start_tls(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 67, in start_tls
with map_exceptions(exc_map):
File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc) from exc
httpcore.ConnectError
Указанное выше исключение стало непосредственной причиной следующего исключения:
Traceback (most recent call last):
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 49, in expand_rolling_options_into_config
extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/option_chain.py", line 242, in expand_rolling_options
contracts = await discover_deribit_chain(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/option_chain.py", line 143, in discover_deribit_chain
perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 169, in fetch_ohlcv
result = await self._get("/public/get_tradingview_chart_data", {
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 86, in _get
response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1768, in get
return await self.request(
^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1540, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send
response = await self._send_handling_auth(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth
response = await self._send_handling_redirects(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects
response = await self._send_single_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request
response = await transport.handle_async_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request
with map_httpcore_exceptions():
File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__
self.gen.throw(value)
File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions
raise mapped_exc(message) from exc
httpx.ConnectError
Указанное выше исключение стало непосредственной причиной следующего исключения:
Traceback (most recent call last):
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 184, in _run_backtest
config = await self._maybe_expand_rolling_options(config, catalog_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 427, in _maybe_expand_rolling_options
config = await expand_rolling_options_into_config(config, catalog_path, self._logger)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/strategy-factory/src/agents/backtest_agent.py", line 59, in expand_rolling_options_into_config
raise RuntimeError(
RuntimeError: не удалось выполнить расширение rolling_options (ConnectError: ); отказ от запуска с пустым расписанием опционов
Stratmill — это инструмент для исследований и бумажной торговли, а не финансовая консультация или брокер. Результаты бэктестов и бумажной торговли являются гипотетическими. Торговля сопряжена с риском убытков.