Estratégias
Put-write semanal de OTM com garantia em dinheiro na Deribit ETH — somente com filtro de tendência, delta fixo de ~25, NO filtro IV de janela longa (geração de renda com VRP de perna única; corrige diretamente o limite de janela de 4 operações que levou ao abandono da estratégia irmã semanal de ETH)
Resultado: Abandonada
DeribitEthWeeklyPutWriteTrendGatedOnly
Put-write semanal de OTM com garantia em dinheiro na Deribit ETH — somente com filtro de tendência, delta fixo de ~25, NO filtro IV de janela longa (geração de renda com VRP de perna única; corrige diretamente o limite…
Hipótese
Um SINGLE-LEG, programa semanal PUT-WRITING totalmente colateralizado em caixa sobre opções de ETH na Deribit — o segundo subjacente de opções cripto mais líquido, reutilizando o caminho de execução EXACT (seleção de strike via gregas, liquidação semanal em caixa) do put-write semanal Deribit-BTC-semanal promovido com Sharpe-12.2 da factory. Ele foi deliberadamente projetado para FIX o único motivo, repetidamente diagnosticado, pelo qual o irmão ETH-semanal foi abandonado ao longo de 8 iterações: seu gate duplo……Mostrar maisMostrar menos
Um SINGLE-LEG, programa semanal PUT-WRITING totalmente colateralizado em caixa sobre opções de ETH na Deribit — o segundo subjacente de opções cripto mais líquido, reutilizando o caminho de execução EXACT (seleção de strike via gregas, liquidação semanal em caixa) do put-write semanal Deribit-BTC-semanal promovido com Sharpe-12.2 da factory. Ele foi deliberadamente projetado para FIX o único motivo, repetidamente diagnosticado, pelo qual o irmão ETH-semanal foi abandonado ao longo de 8 iterações: seu gate duplo de IV-rank + IV>RV exigia um lookback móvel de ~560 dias, o que o reduziu a apenas 4 trades / metrics_reliable=false — um beco sem saída estrutural que o desenvolvedor nunca conseguiu resolver. Esta versão DROPS inteiramente o gate de IV de longo lookback e mantém ONLY o filtro de tendência (o gate comprovadamente estrutural no vencedor BTC promovido), vendendo uma put OTM ETH fixa de ~25-delta toda semana elegível. Sem dependência de percentil IV plurianual, dispara ~40-52 vezes/ano ao longo do histórico semanal disponível de ETH na Deribit → uma contagem de trades estatisticamente confiável, eliminando a exata barreira de 4-trades. Preenche o venue mais sub-representado (opções: 5.5% Deribit + 0.1% Binance vs uma meta ≥15%) e diversifica o book de opções de apenas BTC para um segundo subjacente de vol não correlacionada. Ele NOT é uma estrutura multi-leg (L2), NOT é uma célula com barreira de dados (cadeia semanal de ETH + gregas são catalogadas e com execução comprovada via o irmão BTC), NOT direcional. Deliberadamente 2 parâmetros (delta da put, comprimento do filtro de tendência) para resistir a overfit.
A iteração 3 corrige o timeout de relógio de parede da Layer-3 com uma alteração apenas de configuração; a estratégia CODE permanece inalterada (ela já passou pelas Layers 1-2, o trabalho por barra é O(1) por meio de uma soma móvel incremental SMA, e não há varreduras de min()/sorted()/histórico por barra). Diagnóstico: a iteração 2 moveu corretamente a resolução de ativo primário + perna para 1-DAY, mas STILL atingiu o timeout, o que prova que o gargalo não é a quantidade de barras. Lendo……Mostrar maisMostrar menos
A iteração 3 corrige o timeout de relógio de parede da Layer-3 com uma alteração apenas de configuração; a estratégia CODE permanece inalterada (ela já passou pelas Layers 1-2, o trabalho por barra é O(1) por meio de uma soma móvel incremental SMA, e não há varreduras de min()/sorted()/histórico por barra). Diagnóstico: a iteração 2 moveu corretamente a resolução de ativo primário + perna para 1-DAY, mas STILL atingiu o timeout, o que prova que o gargalo não é a quantidade de barras. Lendo src/data/option_chain.py: discover_deribit_chain faz uma sondagem de rede fetch_ohlcv para cada preço de exercício candidato de EACH vencimento semanal, e o sandbox da Layer-3 abrange lookback_days (expand_rolling_options / padrão do pipeline 365). Portanto, o custo de expansão escala com o número de vencimentos semanais = lookback_days, independentemente do período. A configuração da iter-2 incluía lookback_days ~730 (~104 vencimentos, dobrando a quantidade de sondagens), o que excedeu o orçamento de 300s. Reverter lookback_days para 365 (~52 vencimentos) reduz pela metade as sondagens de vencimento e os downloads de pernas, correspondendo à escala exata em que as estratégias irmãs comprovadas de venda semanal de puts ETH/BTC passam pela Layer 3, enquanto ainda cobre ~52 semanas elegíveis para manter a contagem de operações estatisticamente confiável (~30-52 vendas após o filtro de tendência) e bem acima do impasse de 4 operações. Todo o restante é preservado e comprovado: herança direta de RollingOptionsStrategy (a Layer-1 a reconhece; os hooks abstratos 4 estão fisicamente presentes), nenhum caminho de smoke test (pernas reais de opções são negociadas por meio do cronograma expandido, atendendo a options_no_option_trades), o único filtro de tendência baseado apenas no preço em _enter_leg, resolução do ativo primário 1-DAY ETH-PERPETUAL + resolução da perna 1-DAY (a resolução usada pela estratégia irmã de venda de puts ETH aprovada), dimensionamento com garantia em dinheiro (risk_frac 0.8, alavancagem 1.0 conforme o limite da corretora de opções) e o projeto com 2 parâmetros (offset da put + sma_window).
backtest_failed: RuntimeError: falha na expansão de rolling_options (ConnectError: ); recusando-se a executar com um cronograma de opções vazio Rastreamento (chamada mais recente por último): Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 101, em map_httpcore_exceptions yield Arquivo "/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: falha na expansão de rolling_options (ConnectError: ); recusando-se a executar com um cronograma de opções vazio Rastreamento (chamada mais recente por último): Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 101, em map_httpcore_exceptions yield Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", linha 256, em handle_async_request raise exc from None Arquivo "/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( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 101, em handle_async_request raise exc Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 78, em handle_async_request stream = await self._connect(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 156, em _connect stream = await stream.start_tls(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", linha 67, em start_tls with map_exceptions(exc_map): Arquivo "/usr/lib/python3.12/contextlib.py", linha 158, em __exit__ self.gen.throw(value) Arquivo "/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 seguinte exceção: Rastreamento (chamada mais recente por último): Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/src/data/option_chain.py", linha 242, em expand_rolling_options contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/src/data/collectors/deribit_collector.py", linha 169, em fetch_ohlcv result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1768, em get return await self.request( ^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1629, em send response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1657, em _send_handling_auth response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 393, em handle_async_request with map_httpcore_exceptions(): Arquivo "/usr/lib/python3.12/contextlib.py", linha 158, em __exit__ self.gen.throw(value) Arquivo "/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 seguinte exceção: Rastreamento (chamada mais recente por último): Arquivo "/opt/strategy-factory/src/agents/backtest_agent.py", linha 184, em _run_backtest config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/src/agents/backtest_agent.py", linha 59, em expand_rolling_options_into_config raise RuntimeError( RuntimeError: falha na expansão de rolling_options (ConnectError: ); recusando-se a executar com um cronograma de opções vazio
Implementação
Venda de puts semanais OTM com garantia em dinheiro, em opções europeias ETH da Deribit, somente com filtro de tendência. A cada semana, o framework resolve a cadeia histórica semanal de puts ETH da Deribit (buscando um strike OTM com delta de ~25, por meio de um deslocamento de moneyness de -6%) e faz o roll; a estratégia SELLS um put a ~7 dias do vencimento e o encerra ~24h antes da liquidação. O filtro ONLY é um filtro de tendência baseado apenas no preço: vende o put somente quando o spot de ETH está acima de……Mostrar maisMostrar menos
Venda de puts semanais OTM com garantia em dinheiro, em opções europeias ETH da Deribit, somente com filtro de tendência. A cada semana, o framework resolve a cadeia histórica semanal de puts ETH da Deribit (buscando um strike OTM com delta de ~25, por meio de um deslocamento de moneyness de -6%) e faz o roll; a estratégia SELLS um put a ~7 dias do vencimento e o encerra ~24h antes da liquidação. O filtro ONLY é um filtro de tendência baseado apenas no preço: vende o put somente quando o spot de ETH está acima de sua SMA de ~50 dias (barras diárias), ficando de fora em tendências de baixa confirmadas. Sem uma janela de percentil IV de vários anos, opera em toda semana elegível (~52/ano ao longo da janela de 365 dias), gerando uma quantidade de operações estatisticamente confiável e eliminando diretamente o limite de janela de 4 operações que levou ao abandono da estratégia irmã semanal de ETH com filtro IV. Principal = ETH-PERPETUAL.DERIBIT em barras de 1-DAY (somente relógio de roll, nunca negociado). Dimensionamento com garantia em dinheiro (risk_frac 0.8), sem alavancagem, 2 parâmetros ajustados (deslocamento do put, sma_window).
Resultados da verificação
CLEAN RESTART 2026-09-04 — o histórico de vereditos e os registros de aprendizado desta execução foram removidos, e ela foi reiniciada a partir da verificação. O abandono anterior ocorreu por causa do pipeline, não do mercado: o harness Layer-2 vinculava incorretamente os auxiliares @staticmethod (corrigido), QA emitia vereditos definitivos de desempenho em um teste smoke não otimizado (removido — QA agora avalia apenas a correção), e os timeouts do sandbox eram causados pela falta de slots de backtest (corrigido). A hipótese e o código da estratégia não mudaram. Verifique o código por seus próprios méritos; o desempenho será decidido depois pelo backtest completo e pelo otimizador.
Nenhum necessário.
Layer-1 sinalizou self._win.append() como ilimitado, mas on_bar remove itens do deque a cada barra (while len > sma_window: popleft()), portanto o crescimento é limitado a sma_window. Falso positivo.
Histórico de Iterações
Verificação falhou (Layer 3 — backtest no sandbox): o teste smoke ultrapassou o limite de tempo de parede de 300s. Isso quase sempre significa que o trabalho por barra escala com o histórico — por exemplo, reexaminar toda a série de funding/dados suplementares 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 armazene em cache as consultas indexadas pelo 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: ); recusando-se a executar com uma programação de opções vazia 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)……Mostrar maisMostrar menos
RuntimeError: falha na expansão de rolling_options (ConnectError: ); recusando-se a executar com uma programação de opções vazia 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_single_request 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 return 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: ); recusando-se a executar com uma programação de opções vazia
Motivo do Abandono
backtest_failed: RuntimeError: falha na expansão de rolling_options (ConnectError: ); recusando-se a executar com um cronograma de opções vazio Rastreamento (chamada mais recente por último): Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 101, em map_httpcore_exceptions yield Arquivo "/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: falha na expansão de rolling_options (ConnectError: ); recusando-se a executar com um cronograma de opções vazio Rastreamento (chamada mais recente por último): Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 101, em map_httpcore_exceptions yield Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", linha 256, em handle_async_request raise exc from None Arquivo "/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( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 101, em handle_async_request raise exc Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 78, em handle_async_request stream = await self._connect(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", linha 156, em _connect stream = await stream.start_tls(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", linha 67, em start_tls with map_exceptions(exc_map): Arquivo "/usr/lib/python3.12/contextlib.py", linha 158, em __exit__ self.gen.throw(value) Arquivo "/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 seguinte exceção: Rastreamento (chamada mais recente por último): Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/src/data/option_chain.py", linha 242, em expand_rolling_options contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/src/data/collectors/deribit_collector.py", linha 169, em fetch_ohlcv result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1768, em get return await self.request( ^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1629, em send response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", linha 1657, em _send_handling_auth response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", linha 393, em handle_async_request with map_httpcore_exceptions(): Arquivo "/usr/lib/python3.12/contextlib.py", linha 158, em __exit__ self.gen.throw(value) Arquivo "/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 seguinte exceção: Rastreamento (chamada mais recente por último): Arquivo "/opt/strategy-factory/src/agents/backtest_agent.py", linha 184, em _run_backtest config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Arquivo "/opt/strategy-factory/src/agents/backtest_agent.py", linha 59, em expand_rolling_options_into_config raise RuntimeError( RuntimeError: falha na expansão de rolling_options (ConnectError: ); recusando-se a executar com um cronograma de opções vazio
Stratmill é uma ferramenta de pesquisa e paper trading, não uma consultoria financeira ou corretora. Resultados de backtest e paper trading são hipotéticos. Negociar envolve risco de perda.