Μετάβαση στο περιεχόμενο

Προβολή πρωτοτύπου

DeribitEthWeeklyPutWriteTrendGatedOnly

Υποθέσεις

Deribit ETH Εβδομαδιαίο Cash-Secured Put-Write OTM — Μόνο με Πύλη Τάσης (Trend-Gated), Σταθερό ~25-Delta, NO Πύλη Μεγάλου Lookback IV (Συλλογή VRP Ενός Σκέλους· Επιλύει Άμεσα το Τείχος Lookback των 4-Trades Που Εγκατέλειψε το Αδελφό ETH-Weekly)

Υποθέσεις

Ένα SINGLE-LEG, πλήρως cash-collateralized εβδομαδιαίο πρόγραμμα PUT-WRITING σε options ETH στο Deribit — το δεύτερο πιο ρευστό υποκείμενο crypto options, επαναχρησιμοποιώντας το μονοπάτι εκτέλεσης EXACT (επιλογή strike μέσω greeks, εβδομαδιαίος διακανονισμός σε μετρητά) του promoted Deribit-BTC-weekly put-write με Sharpe-12.2 της φάμπρικας. Έχει σχεδιαστεί σκόπιμα ώστε να FIX τον μοναδικό, επανειλημμένα διαγνωσμένο λόγο για τον οποίο το αδελφό ETH-weekly εγκαταλείφθηκε σε 8 επαναλήψεις: η διπλή του πύλη IV-rank + IV>RV απαιτούσε ένα κυλιόμενο (rolling) lookback ~560 ημερών, το οποίο το περιόρισε σε μόλις 4 trades / metrics_reliable=false — ένα δομικό αδιέξοδο που ο developer δεν μπόρεσε ποτέ να επιλύσει. Αυτή η έκδοση DROPS εντελώς την πύλη IV μεγάλου lookback και διατηρεί ONLY το φίλτρο τάσης (trend filter) (η πύλη που αποδείχθηκε καθοριστική στον promoted νικητή BTC), γράφοντας ένα σταθερό ~25-delta OTM ETH put κάθε επιλέξιμη εβδομάδα. Χωρίς εξάρτηση από πολυετές IV-percentile, ενεργοποιείται ~40-52 φορές/έτος στο διαθέσιμο εβδομαδιαίο ιστορικό ETH του Deribit → ένας στατιστικά αξιόπιστος αριθμός trades, εξαλείφοντας ακριβώς το τείχος των 4-trades. Καλύπτει το πιο υποεκπροσωπούμενο venue (options: 5.5% Deribit + 0.1% Binance έναντι στόχου ≥15%) και διαφοροποιεί το βιβλίο options από αποκλειστικά BTC σε ένα δεύτερο μη συσχετισμένο υποκείμενο μεταβλητότητας. Δεν είναι NOT πολυσκελής δομή (L2), δεν είναι NOT ένα data-walled κελί (η εβδομαδιαία αλυσίδα ETH και τα greeks είναι καταλογογραφημένα και αποδεδειγμένα εκτελέσιμα μέσω του αδελφού BTC), δεν είναι NOT κατευθυντική. Σκόπιμα 2 παραμέτρους (delta put, μήκος φίλτρου τάσης) για αντίσταση στο overfit.

Υποθέσεις

Η επανάληψη 3 διορθώνει το wall-clock timeout του Layer-3 με μια αλλαγή μόνο στο config· η CODE της στρατηγικής παραμένει αμετάβλητη (πέρασε ήδη τα Layers 1-2, η εργασία ανά bar είναι O(1) μέσω ενός SMA αθροιστικού τρέχοντος αθροίσματος (running-sum), και δεν υπάρχουν σαρώσεις min()/sorted()/ιστορικού ανά bar). Διάγνωση: η επανάληψη 2 μετέφερε σωστά την επίλυση primary+leg στο 1-DAY αλλά το STILL έφτασε σε timeout, κάτι που αποδεικνύει ότι το bottleneck δεν είναι ο αριθμός bar. Διαβάζοντας το src/data/option_chain.py: το discover_deribit_chain εκδίδει ένα δικτυακό probe fetch_ohlcv για κάθε υποψήφιο strike κάθε εβδομαδιαίας λήξης EACH, και το sandbox του Layer-3 καλύπτει lookback_days (expand_rolling_options / προεπιλογή pipeline 365). Άρα το κόστος επέκτασης κλιμακώνεται με τον αριθμό των εβδομαδιαίων λήξεων = lookback_days, ανεξάρτητα από το timeframe. Το config της iter-2 έφερε lookback_days ~730 (~104 λήξεις, διπλασιάζοντας τον αριθμό probe), κάτι που ξεπέρασε τον προϋπολογισμό των 300s. Η επαναφορά του lookback_days σε 365 (~52 λήξεις) υποδιπλασιάζει τα probes λήξης και τις λήψεις legs, ταιριάζοντας ακριβώς με την κλίμακα στην οποία τα αποδεδειγμένα αδελφά put-write ETH/BTC εβδομαδιαία περνούν το Layer 3, ενώ εξακολουθεί να καλύπτει ~52 επιλέξιμες εβδομάδες, οπότε ο αριθμός trades παραμένει στατιστικά αξιόπιστος (~30-52 writes μετά την πύλη τάσης) και πολύ πάνω από το αδιέξοδο των 4-trades. Όλα τα υπόλοιπα διατηρούνται και είναι αποδεδειγμένα: άμεση υποκλάση RollingOptionsStrategy (το Layer-1 το αναγνωρίζει· τα abstract hooks 4 είναι φυσικά παρόντα), χωρίς smoke path (πραγματικά option legs κάνουν trade μέσω του επεκταμένου χρονοδιαγράμματος, ικανοποιώντας το options_no_option_trades), η μοναδική πύλη τάσης βασισμένη μόνο στην τιμή στο _enter_leg, επίλυση primary 1-DAY ETH-PERPETUAL + leg 1-DAY (η επίλυση που χρησιμοποιεί το αδελφό put-write ETH που περνάει τα tests), sizing cash-secured (risk_frac 0.8, μόχλευση 1.0 σύμφωνα με το ανώτατο όριο του options venue), και ο σχεδιασμός 2-παραμέτρων (offset put + 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: )· άρνηση εκτέλεσης με κενό πρόγραμμα δικαιωμάτων προαίρεσης

Υλοποίηση

Πώληση put μονού σκέλους, cash-secured, εβδομαδιαία, σε ευρωπαϊκά options OTM στο ETH Deribit, μόνο με πύλη τάσης (trend-gated). Κάθε εβδομάδα το framework επιλύει την ιστορική εβδομαδιαία αλυσίδα put ETH του Deribit (στοχεύοντας ένα strike ~25-delta OTM μέσω μιας μετατόπισης moneyness -6%) και το κυλάει (rolls)· η στρατηγική SELLS ένα put ~7 ημέρες πριν τη λήξη και το κλείνει ~24h πριν τον διακανονισμό. Η πύλη ONLY είναι ένα φίλτρο τάσης βασισμένο μόνο στην τιμή: γράφει το put μόνο όταν το spot ETH είναι πάνω από τον ~50-ημερών SMA του (ημερήσια bars), μένοντας εκτός σε επιβεβαιωμένες πτωτικές τάσεις. Χωρίς πολυετές παράθυρο IV-percentile, κάνει trade κάθε επιλέξιμη εβδομάδα (~52/έτος στο παράθυρο 365 ημερών) για έναν στατιστικά αξιόπιστο αριθμό trades, εξαλείφοντας άμεσα το τείχος lookback των 4-trades που εγκατέλειψε το αδελφό IV-gated ETH-weekly. Primary = ETH-PERPETUAL.DERIBIT σε bars 1-DAY (μόνο ρολόι κύλισης, ποτέ δεν γίνεται trade). Sizing cash-secured (risk_frac 0.8), χωρίς μόχλευση, 2 συντονισμένες παραμέτρους (offset put, sma_window).

Αποτελέσματα Επαλήθευσης

CLEAN RESTART 2026-09-04 — το ιστορικό verdict και τα αρχεία εκμάθησης αυτής της εκτέλεσης αφαιρέθηκαν και επανεκκινήθηκε από την επαλήθευση (verification). Η προηγούμενη εγκατάλειψή της προήλθε από το pipeline, όχι από την αγορά: το harness του Layer-2 συνέδεε λανθασμένα τους βοηθούς @staticmethod (διορθώθηκε), το QA εξέδωσε τελικά verdict απόδοσης σε ένα μη βελτιστοποιημένο smoke test (αφαιρέθηκε — το QA τώρα κρίνει μόνο την ορθότητα), και τα timeouts του sandbox προέκυψαν από λιμοκτονία backtest-slot (διορθώθηκε). Η υπόθεση (hypothesis) και ο κώδικας της στρατηγικής παραμένουν αμετάβλητα. Επαλήθευσε τον κώδικα με βάση τα ίδια του τα χαρακτηριστικά· η απόδοση αποφασίζεται αργότερα από το πλήρες backtest και τον optimizer.

Αποτελέσματα Επαλήθευσης

Δεν χρειάζεται τίποτα.

Αποτελέσματα Επαλήθευσης

Το Layer-1 επισήμανε το self._win.append() ως μη φραγμένο, αλλά το on_bar περικόπτει το deque σε κάθε bar (while len > sma_window: popleft()), οπότε η αύξηση περιορίζεται σε sma_window. Ψευδώς θετικό (false positive).

Iteration History

Η επαλήθευση απέτυχε (Layer 3 — backtest σε sandbox): το smoke test υπερέβη το χρονικό όριο wall-clock των 300s. Αυτό σχεδόν πάντα σημαίνει εργασία ανά bar που κλιμακώνεται με το ιστορικό — π.χ. επανασάρωση ολόκληρης της σειράς funding/συμπληρωματικών δεδομένων, ή ανακατασκευή μιας λίστας και κλήση min()/sorted() μέσα στο calculate_signal()/on_bar() σε κάθε bar. Προϋπολόγισε ταξινομημένους πίνακες timestamp ONCE στο __init__ και χρησιμοποίησε bisect, ή αποθήκευσε στην cache τα lookups με κλειδί το timestamp, ώστε το κόστος ανά bar να είναι O(log n) και όχι O(n).

Iteration History

RuntimeError: rolling_options expansion failed (ConnectError: ); refusing to run with an empty option schedule 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 The above exception was the direct cause of the following exception: 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 The above exception was the direct cause of the following exception: 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 expansion failed (ConnectError: ); refusing to run with an empty option schedule

Λόγος Εγκατάλειψης

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 είναι εργαλείο έρευνας και εικονικών συναλλαγών (paper trading), όχι επενδυτική συμβουλή ή χρηματιστηριακός μεσίτης. Τα αποτελέσματα backtest και paper trading είναι υποθετικά. Οι συναλλαγές ενέχουν κίνδυνο απώλειας.