Vai al contenuto
Tutte le strategie

Strategie

Scrittura di put OTM con copertura in contanti settimanale su ETH — solo con filtro di tendenza, delta fisso di circa 25, filtro IV a lungo periodo di NO (incasso a gamba singola VRP; risolve direttamente il limite di lookback di 4 operazioni che ha abbandonato la strategia gemella a ETH settimane)

Esito: Abbandonato

DeribitEthWeeklyPutWriteTrendGatedOnly

Scrittura di put OTM con copertura in contanti settimanale su ETH — solo con filtro di tendenza, delta fisso di circa 25, filtro IV a lungo periodo di NO (incasso a gamba singola VRP; risolve direttamente il limite di…

Ipotesi

Un programma SINGLE-LEG settimanale PUT-WRITING, interamente garantito da liquidità, sulle opzioni Deribit ETH — il sottostante cripto con il secondo maggior volume di scambi di opzioni — che riutilizza il percorso di esecuzione EXACT (selezione dello strike tramite greche, regolamento settimanale in contanti) della strategia put-write settimanale su Deribit BTC, promossa dalla factory con Sharpe-12.2. È progettato deliberatamente per FIX l’unica ragione, diagnosticata più volte, per cui il progetto gemello……Mostra altroMostra meno

Un programma SINGLE-LEG settimanale PUT-WRITING, interamente garantito da liquidità, sulle opzioni Deribit ETH — il sottostante cripto con il secondo maggior volume di scambi di opzioni — che riutilizza il percorso di esecuzione EXACT (selezione dello strike tramite greche, regolamento settimanale in contanti) della strategia put-write settimanale su Deribit BTC, promossa dalla factory con Sharpe-12.2. È progettato deliberatamente per FIX l’unica ragione, diagnosticata più volte, per cui il progetto gemello ETH-weekly è stato abbandonato nel corso di 8 iterazioni: il suo doppio filtro IV-rank + IV>RV richiedeva una finestra mobile di circa 560 giorni, riducendolo a soli 4 trade / metrics_reliable=false — un vicolo cieco strutturale che lo sviluppatore non è mai riuscito a risolvere. Questa versione DROPS del tutto il filtro IV con lookback lungo e mantiene ONLY il filtro di trend (il filtro di cui è stato dimostrato il ruolo determinante nella strategia vincitrice BTC promossa), scrivendo ogni settimana idonea una put OTM ETH a delta fisso di circa 25. Senza dipendere da una percentuale IV calcolata su più anni, opera circa 40-52 volte l’anno lungo la cronologia disponibile delle opzioni settimanali Deribit ETH → un numero di trade statisticamente affidabile, eliminando così l’esatto ostacolo dei 4 trade. Colma la lacuna della sede di negoziazione più sottorappresentata (opzioni: 5.5% Deribit + 0.1% Binance contro un obiettivo ≥15%) e diversifica il portafoglio di opzioni, passando da un’esposizione esclusiva a BTC a un secondo sottostante con volatilità non correlata. Non è NOT una struttura multi-leg (L2), NOT una strategia limitata dalla disponibilità dei dati (la catena settimanale ETH e le greche sono catalogate e di esecuzione comprovata tramite la strategia gemella BTC), NOT direzionale. Mantiene deliberatamente 2 pochi parametri (delta della put, durata del filtro di trend) per resistere all’overfitting.

L’iterazione 3 risolve il timeout del limite di tempo reale di Layer-3 con una modifica alla sola configurazione; la strategia CODE è invariata (aveva già superato i Layer 1-2, il lavoro per barra è O(1) grazie a una SMA con somma mobile incrementale e non ci sono scansioni della cronologia né chiamate per barra a min()/sorted()). Diagnosi: l’iterazione 2 ha spostato correttamente la risoluzione dello strumento principale e della gamba a 1-DAY, ma STILL è andato in timeout, il che dimostra che il collo di……Mostra altroMostra meno

L’iterazione 3 risolve il timeout del limite di tempo reale di Layer-3 con una modifica alla sola configurazione; la strategia CODE è invariata (aveva già superato i Layer 1-2, il lavoro per barra è O(1) grazie a una SMA con somma mobile incrementale e non ci sono scansioni della cronologia né chiamate per barra a min()/sorted()). Diagnosi: l’iterazione 2 ha spostato correttamente la risoluzione dello strumento principale e della gamba a 1-DAY, ma STILL è andato in timeout, il che dimostra che il collo di bottiglia non è il numero di barre. Dalla lettura di src/data/option_chain.py: discover_deribit_chain esegue una verifica di rete fetch_ohlcv per ogni strike candidato di ogni scadenza settimanale EACH e il sandbox Layer-3 copre lookback_days (expand_rolling_options / valore predefinito della pipeline 365). Pertanto il costo dell’espansione cresce con il numero di scadenze settimanali = lookback_days, indipendentemente dall’intervallo temporale. La configurazione di iter-2 copriva lookback_days circa 730 (circa 104 scadenze, raddoppiando il numero di verifiche), superando il budget di 300s. Ripristinare lookback_days a 365 (circa 52 scadenze) dimezza le verifiche delle scadenze e i download delle gambe, riportandoli alla scala esatta alla quale i progetti gemelli con put-write settimanali ETH/BTC comprovati superano Layer 3, pur coprendo circa 52 settimane idonee affinché il numero di trade resti statisticamente affidabile (circa 30-52 scritture dopo il filtro di trend) e ben al di sopra del vicolo cieco dei 4 trade. Tutto il resto è mantenuto e comprovato: sottoclassificazione diretta di RollingOptionsStrategy (Layer-1 la riconosce; gli hook astratti 4 sono presenti nel codice), nessun percorso di smoke test (le gambe di opzioni reali vengono negoziate tramite la pianificazione espansa, soddisfacendo options_no_option_trades), l’unico filtro di trend basato sul prezzo in _enter_leg, risoluzione dello strumento principale a 1-DAY ETH-PERPETUAL e della gamba a 1-DAY (la risoluzione usata dal progetto gemello put-write ETH, che ha superato la verifica), dimensionamento garantito da liquidità (risk_frac 0.8, leva 1.0 secondo il limite della sede di negoziazione delle opzioni) e design con 2 parametri (offset della put + sma_window).

backtest_failed: RuntimeError: espansione di rolling_options non riuscita (ConnectError: ); impossibile procedere con una pianificazione delle opzioni vuota 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)……Mostra altroMostra meno

backtest_failed: RuntimeError: espansione di rolling_options non riuscita (ConnectError: ); impossibile procedere con una pianificazione delle opzioni vuota 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 L'eccezione sopra riportata è stata la causa diretta della seguente eccezione: 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 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 L'eccezione sopra riportata è stata la causa diretta della seguente eccezione: 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: espansione di rolling_options non riuscita (ConnectError: ); impossibile procedere con una pianificazione delle opzioni vuota

Implementazione

Scrittura di put settimanali OTM su opzioni europee ETH Deribit, a gamba singola, garantita da liquidità e con il solo filtro di trend. Ogni settimana il framework risolve la catena storica di put settimanali Deribit ETH (puntando a uno strike OTM con delta di circa 25 tramite un offset di moneyness -6%) e la rinnova; la strategia SELLS una put a circa 7 giorni dalla scadenza e la chiude circa 24 ore prima del regolamento. Il filtro ONLY è un filtro di trend basato solo sul prezzo: scrive la put solo quando lo……Mostra altroMostra meno

Scrittura di put settimanali OTM su opzioni europee ETH Deribit, a gamba singola, garantita da liquidità e con il solo filtro di trend. Ogni settimana il framework risolve la catena storica di put settimanali Deribit ETH (puntando a uno strike OTM con delta di circa 25 tramite un offset di moneyness -6%) e la rinnova; la strategia SELLS una put a circa 7 giorni dalla scadenza e la chiude circa 24 ore prima del regolamento. Il filtro ONLY è un filtro di trend basato solo sul prezzo: scrive la put solo quando lo spot ETH è sopra la sua SMA a circa 50 giorni (barre giornaliere), restando fuori dai downtrend confermati. In assenza di una finestra pluriennale del percentile IV, opera ogni settimana idonea (circa 52 all’anno nella finestra di 365 giorni), per un numero di trade statisticamente affidabile ed eliminando direttamente l’ostacolo dei 4 trade dovuto al lookback che ha portato all’abbandono del progetto gemello ETH-weekly con filtro IV. Principale = ETH-PERPETUAL.DERIBIT su barre 1-DAY (solo orologio di rinnovo, mai negoziato). Dimensionamento garantito da liquidità (risk_frac 0.8), nessuna leva, 2 parametri da ottimizzare (offset della put, sma_window).

Risultati di verifica

CLEAN RESTART 2026-09-04 — la cronologia dei verdetti e i record di apprendimento di questa esecuzione sono stati rimossi ed è stata riavviata dalla verifica. Il precedente abbandono è dipeso dalla pipeline, non dal mercato: l’harness Layer-2 associava in modo errato gli helper @staticmethod (corretto), QA emetteva verdetti definitivi sulle prestazioni basandosi su uno smoke test non ottimizzato (rimosso — QA ora giudica solo la correttezza) e i timeout del sandbox erano dovuti alla mancanza di slot per il backtest (corretta). L’ipotesi e il codice della strategia sono invariati. Verifica il codice in base ai suoi meriti; le prestazioni saranno decise in seguito dal backtest completo e dall’ottimizzatore.

Non serve nulla.

Layer-1 ha segnalato self._win.append() come non limitato, ma on_bar ridimensiona il deque a ogni barra (while len > sma_window: popleft()), quindi la crescita è limitata a sma_window. Falso positivo.

Cronologia iterazioni

Verifica non riuscita (Layer 3 — backtest nel sandbox): lo smoke test ha superato il limite di tempo reale di 300s. Quasi sempre ciò indica un carico di lavoro per barra che cresce con la cronologia, per esempio una nuova scansione completa della serie di funding o delle serie supplementari, oppure la ricostruzione di una lista e la chiamata a min()/sorted() dentro calculate_signal()/on_bar() a ogni barra. Precalcola gli array ordinati di timestamp ONCE in __init__ e usa bisect, oppure memorizza nella cache le ricerche indicizzandole per timestamp, così che il costo per barra sia O(log n) e non O(n).

RuntimeError: espansione di rolling_options non riuscita (ConnectError: ); esecuzione rifiutata con una pianificazione delle opzioni vuota 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)……Mostra altroMostra meno

RuntimeError: espansione di rolling_options non riuscita (ConnectError: ); esecuzione rifiutata con una pianificazione delle opzioni vuota 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 L’eccezione precedente è stata la causa diretta della seguente eccezione: 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 L’eccezione precedente è stata la causa diretta della seguente eccezione: 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: espansione di rolling_options non riuscita (ConnectError: ); esecuzione rifiutata con una pianificazione delle opzioni vuota

Motivo abbandono

backtest_failed: RuntimeError: espansione di rolling_options non riuscita (ConnectError: ); impossibile procedere con una pianificazione delle opzioni vuota 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)……Mostra altroMostra meno

backtest_failed: RuntimeError: espansione di rolling_options non riuscita (ConnectError: ); impossibile procedere con una pianificazione delle opzioni vuota 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 L'eccezione sopra riportata è stata la causa diretta della seguente eccezione: 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 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 L'eccezione sopra riportata è stata la causa diretta della seguente eccezione: 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: espansione di rolling_options non riuscita (ConnectError: ); impossibile procedere con una pianificazione delle opzioni vuota

Stratmill è uno strumento di ricerca e paper trading, non una consulenza finanziaria né un broker. I risultati di backtest e paper trading sono ipotetici. Il trading comporta un rischio di perdita.