Saltar para o conteúdo
Todas as estratégias

Estratégias

Deribit ETH Venda Semanal de Puts OTM com Garantia em Numerário — Apenas com Filtro de Tendência, Delta Fixo de ~25, Filtro IV de Longo Lookback de NO (Recolha VRP de Perna Única; Corrige Diretamente a Barreira de Lookback de 4 Transações que Abandonou a Estratégia Irmã ETH-Semanal)

Resultado: Abandonado

DeribitEthWeeklyPutWriteTrendGatedOnly

Deribit ETH Venda Semanal de Puts OTM com Garantia em Numerário — Apenas com Filtro de Tendência, Delta Fixo de ~25, Filtro IV de Longo Lookback de NO (Recolha VRP de Perna Única; Corrige Diretamente a Barreira de…

Hipótese

Um programa semanal SINGLE-LEG em opções PUT-WRITING da Deribit ETH, totalmente colateralizado em numerário — o segundo ativo subjacente de opções de criptomoedas mais líquido, reutilizando o percurso de execução EXACT (seleção do preço de exercício através das gregas, liquidação semanal em numerário) da estratégia put-write semanal Deribit-BTC da fábrica, promovida por Sharpe-12.2. Foi concebido deliberadamente para FIX a razão, diagnosticada repetidamente, pela qual o seu congénere ETH-semanal foi abandonado ao……Mostrar maisMostrar menos

Um programa semanal SINGLE-LEG em opções PUT-WRITING da Deribit ETH, totalmente colateralizado em numerário — o segundo ativo subjacente de opções de criptomoedas mais líquido, reutilizando o percurso de execução EXACT (seleção do preço de exercício através das gregas, liquidação semanal em numerário) da estratégia put-write semanal Deribit-BTC da fábrica, promovida por Sharpe-12.2. Foi concebido deliberadamente para FIX a razão, diagnosticada repetidamente, pela qual o seu congénere ETH-semanal foi abandonado ao longo de 8 iterações: a sua dupla condição IV-rank + IV>RV exigia uma janela móvel de ~560 dias, reduzindo-o a apenas 4 transações / metrics_reliable=false — um impasse estrutural que o programador nunca conseguiu resolver. Esta versão DROPS por completo a condição IV de janela longa e mantém ONLY o filtro de tendência (a condição comprovadamente essencial na estratégia vencedora BTC promovida), vendendo uma put OTM ETH de delta fixo ~25 em cada semana elegível. Sem dependência de percentis IV plurianuais, é acionada ~40-52 vezes/ano ao longo do histórico semanal ETH disponível da Deribit → uma contagem de transações estatisticamente fiável, eliminando o exato limite de 4 transações. Preenche o venue mais sub-representado (opções: 5.5% Deribit + 0.1% Binance face a um objetivo ≥15%) e diversifica a carteira de opções, passando de apenas BTC para um segundo ativo subjacente com volatilidade não correlacionada. Não é NOT uma estrutura com várias pernas (L2), nem NOT uma célula limitada por falta de dados (a cadeia semanal ETH + as gregas estão catalogadas e a sua execução foi comprovada através do congénere BTC); é NOT direcional. Os parâmetros foram deliberadamente 2 (delta da put, duração do filtro de tendência) para resistir ao sobreajustamento.

A iteração 3 corrige o timeout de tempo de relógio de Layer-3 com uma alteração apenas à configuração; a CODE da estratégia não foi alterada (já tinha passado as Layers 1-2, o trabalho por barra é O(1) através de uma SMA incremental de soma acumulada, e não há chamadas a min()/sorted() nem varrimentos do histórico por barra). Diagnóstico: a iteração 2 transferiu corretamente a resolução do ativo principal + perna para 1-DAY, mas STILL excedeu o tempo limite, o que prova que o estrangulamento não se deve ao número……Mostrar maisMostrar menos

A iteração 3 corrige o timeout de tempo de relógio de Layer-3 com uma alteração apenas à configuração; a CODE da estratégia não foi alterada (já tinha passado as Layers 1-2, o trabalho por barra é O(1) através de uma SMA incremental de soma acumulada, e não há chamadas a min()/sorted() nem varrimentos do histórico por barra). Diagnóstico: a iteração 2 transferiu corretamente a resolução do ativo principal + perna para 1-DAY, mas STILL excedeu o tempo limite, o que prova que o estrangulamento não se deve ao número de barras. A leitura de src/data/option_chain.py mostra que discover_deribit_chain efetua uma verificação de rede fetch_ohlcv para cada preço de exercício candidato de cada vencimento semanal EACH, e a sandbox de Layer-3 abrange lookback_days (expand_rolling_options / predefinição do pipeline 365). Assim, o custo de expansão aumenta com o número de vencimentos semanais = lookback_days, independentemente do intervalo temporal. A configuração de iter-2 tinha lookback_days ~730 (~104 vencimentos, duplicando o número de verificações), o que excedeu o orçamento de 300s. Repor lookback_days para 365 (~52 vencimentos) reduz para metade as verificações dos vencimentos e as transferências das pernas, correspondendo à escala em que os congéneres comprovados de put-write semanal ETH/BTC passam Layer 3, cobrindo ainda ~52 semanas elegíveis para manter a contagem de transações estatisticamente fiável (~30-52 vendas após o filtro de tendência), muito acima do impasse de 4 transações. Todo o resto está preservado e comprovado: subclasse direta de RollingOptionsStrategy (Layer-1 reconhece-a; os hooks abstratos 4 estão presentes no código), sem percurso smoke (as pernas de opções reais são transacionadas através do calendário expandido, cumprindo options_no_option_trades), uma única condição de tendência baseada apenas no preço em _enter_leg, resolução do ativo principal 1-DAY ETH-PERPETUAL + resolução das pernas 1-DAY (a resolução usada pelo congénere de put-write ETH que passou), dimensionamento com garantia em numerário (risk_frac 0.8, alavancagem 1.0 segundo o limite do venue de opções) e conceção com 2 parâmetros (desvio da put + sma_window).

backtest_failed: RuntimeError: a expansão de rolling_options falhou (ConnectError: ); recusa de execução com um calendário de opções vazio Rastreio (chamada mais recente por último): Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 101, em map_httpcore_exceptions yield Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 394, em handle_async_request resp = await self._pool.handle_async_request(req)……Mostrar maisMostrar menos

backtest_failed: RuntimeError: a expansão de rolling_options falhou (ConnectError: ); recusa de execução com um calendário de opções vazio Rastreio (chamada mais recente por último): Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 101, em map_httpcore_exceptions yield Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 394, em handle_async_request resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", linha 256, em handle_async_request raise exc from None Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", linha 236, em handle_async_request response = await connection.handle_async_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 101, em handle_async_request raise exc Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 78, em handle_async_request stream = await self._connect(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 156, em _connect stream = await stream.start_tls(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", linha 67, em start_tls with map_exceptions(exc_map): Ficheiro "/usr/lib/python3.12/contextlib.py", linha 158, em __exit__ self.gen.throw(value) Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", linha 14, em map_exceptions raise to_exc(exc) from exc httpcore.ConnectError A exceção acima foi a causa direta da exceção seguinte: Rastreio (chamada mais recente por último): Ficheiro "/opt/strategy-factory/src/agents/backtest_agent.py", linha 49, em expand_rolling_options_into_config extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/data/option_chain.py", linha 242, em expand_rolling_options contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/data/option_chain.py", linha 143, em discover_deribit_chain perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/data/collectors/deribit_collector.py", linha 169, em fetch_ohlcv result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/data/collectors/deribit_collector.py", linha 86, em _get response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1768, em get return await self.request( ^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1540, em request return await self.send(request, auth=auth, follow_redirects=follow_redirects) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1629, em send response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1657, em _send_handling_auth response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1694, em _send_handling_redirects response = await self._send_single_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1730, em _send_single_request response = await transport.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 393, em handle_async_request with map_httpcore_exceptions(): Ficheiro "/usr/lib/python3.12/contextlib.py", linha 158, em __exit__ self.gen.throw(value) Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 118, em map_httpcore_exceptions raise mapped_exc(message) from exc httpx.ConnectError A exceção acima foi a causa direta da exceção seguinte: Rastreio (chamada mais recente por último): Ficheiro "/opt/strategy-factory/src/agents/backtest_agent.py", linha 184, em _run_backtest config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/agents/backtest_agent.py", linha 427, em _maybe_expand_rolling_options config = await expand_rolling_options_into_config(config, catalog_path, self._logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/agents/backtest_agent.py", linha 59, em expand_rolling_options_into_config raise RuntimeError( RuntimeError: a expansão de rolling_options falhou (ConnectError: ); recusa de execução com um calendário de opções vazio

Implementação

Venda de puts semanais OTM com garantia em numerário sobre opções europeias da Deribit ETH, apenas com filtro de tendência. Todas as semanas, a framework resolve a cadeia histórica semanal de puts ETH da Deribit (visando um preço de exercício OTM com delta ~25, através de um desvio de moneyness -6%) e faz o rollover; a estratégia SELLS uma put a ~7 dias do vencimento e fecha-a ~24h antes da liquidação. A condição ONLY é um filtro de tendência baseado apenas no preço: vende a put apenas quando o spot ETH está……Mostrar maisMostrar menos

Venda de puts semanais OTM com garantia em numerário sobre opções europeias da Deribit ETH, apenas com filtro de tendência. Todas as semanas, a framework resolve a cadeia histórica semanal de puts ETH da Deribit (visando um preço de exercício OTM com delta ~25, através de um desvio de moneyness -6%) e faz o rollover; a estratégia SELLS uma put a ~7 dias do vencimento e fecha-a ~24h antes da liquidação. A condição ONLY é um filtro de tendência baseado apenas no preço: vende a put apenas quando o spot ETH está acima da sua SMA de ~50 dias (barras diárias), ficando de fora em tendências descendentes confirmadas. Sem uma janela plurianual de percentil IV, negoceia em todas as semanas elegíveis (~52/ano ao longo da janela de 365 dias), gerando uma contagem de transações estatisticamente fiável e eliminando diretamente o limite de janela de 4 transações que levou ao abandono do congénere semanal ETH condicionado por IV. Principal = ETH-PERPETUAL.DERIBIT em barras de 1-DAY (apenas para o relógio do rollover, nunca é objeto de transação). Dimensionamento com garantia em numerário (risk_frac 0.8), sem alavancagem, 2 parâmetros afinados (desvio da put, sma_window).

Resultados da Verificação

CLEAN RESTART 2026-09-04 — o histórico de veredictos e os registos de aprendizagem desta execução foram removidos e esta foi reiniciada a partir da verificação. O abandono anterior deveu-se ao pipeline, não ao mercado: o harness Layer-2 associou incorretamente os auxiliares @staticmethod (corrigido), QA emitiu veredictos terminais de desempenho com base num teste smoke não otimizado (removido — QA avalia agora apenas a correção), e os timeouts da sandbox deveram-se à falta de slots de backtest (corrigido). A hipótese e o código da estratégia não foram alterados. Verifique o código pelos seus méritos; o desempenho será decidido mais tarde pelo backtest completo e pelo otimizador.

Nenhum necessário.

Layer-1 assinalou self._win.append() como não limitado, mas on_bar trunca o deque em cada barra (while len > sma_window: popleft()), pelo que o crescimento está limitado a sma_window. Falso positivo.

Histórico de Iterações

Verificação falhada (Layer 3 — backtest na sandbox): o teste smoke excedeu o limite de 300s de tempo de relógio. Isto significa quase sempre trabalho por barra que aumenta com o histórico — por exemplo, voltar a percorrer toda a série de funding/suplementar ou reconstruir uma lista e chamar min()/sorted() dentro de calculate_signal()/on_bar() em cada barra. Pré-calcule arrays de timestamps ordenados ONCE em __init__ e use bisect, ou guarde em cache as consultas indexadas por timestamp, para que o custo por barra seja O(log n), e não O(n).

RuntimeError: falha na expansão de rolling_options (ConnectError: ); recusa a execução com um calendário de opções vazio 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……Mostrar maisMostrar menos

RuntimeError: falha na expansão de rolling_options (ConnectError: ); recusa a execução com um calendário de opções vazio 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 A exceção acima foi a causa direta da seguinte exceção: 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 A exceção acima foi a causa direta da seguinte exceção: 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: falha na expansão de rolling_options (ConnectError: ); recusa a execução com um calendário de opções vazio

Motivo do Abandono

backtest_failed: RuntimeError: a expansão de rolling_options falhou (ConnectError: ); recusa de execução com um calendário de opções vazio Rastreio (chamada mais recente por último): Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 101, em map_httpcore_exceptions yield Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 394, em handle_async_request resp = await self._pool.handle_async_request(req)……Mostrar maisMostrar menos

backtest_failed: RuntimeError: a expansão de rolling_options falhou (ConnectError: ); recusa de execução com um calendário de opções vazio Rastreio (chamada mais recente por último): Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 101, em map_httpcore_exceptions yield Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 394, em handle_async_request resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", linha 256, em handle_async_request raise exc from None Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", linha 236, em handle_async_request response = await connection.handle_async_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 101, em handle_async_request raise exc Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 78, em handle_async_request stream = await self._connect(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 156, em _connect stream = await stream.start_tls(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", linha 67, em start_tls with map_exceptions(exc_map): Ficheiro "/usr/lib/python3.12/contextlib.py", linha 158, em __exit__ self.gen.throw(value) Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", linha 14, em map_exceptions raise to_exc(exc) from exc httpcore.ConnectError A exceção acima foi a causa direta da exceção seguinte: Rastreio (chamada mais recente por último): Ficheiro "/opt/strategy-factory/src/agents/backtest_agent.py", linha 49, em expand_rolling_options_into_config extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/data/option_chain.py", linha 242, em expand_rolling_options contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/data/option_chain.py", linha 143, em discover_deribit_chain perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/data/collectors/deribit_collector.py", linha 169, em fetch_ohlcv result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/data/collectors/deribit_collector.py", linha 86, em _get response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1768, em get return await self.request( ^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1540, em request return await self.send(request, auth=auth, follow_redirects=follow_redirects) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1629, em send response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1657, em _send_handling_auth response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1694, em _send_handling_redirects response = await self._send_single_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1730, em _send_single_request response = await transport.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 393, em handle_async_request with map_httpcore_exceptions(): Ficheiro "/usr/lib/python3.12/contextlib.py", linha 158, em __exit__ self.gen.throw(value) Ficheiro "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 118, em map_httpcore_exceptions raise mapped_exc(message) from exc httpx.ConnectError A exceção acima foi a causa direta da exceção seguinte: Rastreio (chamada mais recente por último): Ficheiro "/opt/strategy-factory/src/agents/backtest_agent.py", linha 184, em _run_backtest config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/agents/backtest_agent.py", linha 427, em _maybe_expand_rolling_options config = await expand_rolling_options_into_config(config, catalog_path, self._logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Ficheiro "/opt/strategy-factory/src/agents/backtest_agent.py", linha 59, em expand_rolling_options_into_config raise RuntimeError( RuntimeError: a expansão de rolling_options falhou (ConnectError: ); recusa de execução com um calendário de opções vazio

O Stratmill é uma ferramenta de investigação e paper trading, não constitui aconselhamento financeiro nem é uma corretora. Os resultados de backtest e paper trading são hipotéticos. Negociar envolve risco de perda.