رفتن به محتوا

مشاهده نسخه اصلی

DeribitEthWeeklyPutWriteTrendGatedOnly

فرضیه‌ها

پوت-رایتینگ هفتگی با وثیقه‌ی نقدی OTM Deribit ETH — فقط دروازه‌شده با روند، دلتای ثابت ~25، NO دروازه‌ی IV با بازه‌ی نگاه به گذشته‌ی طولانی (برداشت تک‌پایه VRP؛ رفع مستقیم دیوار بازه‌ی نگاه به گذشته با 4 معامله که باعث کنار گذاشته شدن استراتژی خواهر هفتگی ETH شد)

فرضیه‌ها

یک برنامه‌ی SINGLE-LEG، کاملاً وثیقه‌گذاری‌شده به‌صورت نقدی، برای PUT-WRITING هفتگی روی اختیارهای ETH در Deribit — دومین دارایی پایه‌ی اختیار معامله از نظر نقدشوندگی در حوزه‌ی کریپتو، که مسیر اجرای EXACT (انتخاب قیمت اعمال از طریق گریک‌ها، تسویه‌ی نقدی هفتگی) از استراتژی put-write هفتگی-BTC-Deribit ترفیع‌یافته با Sharpe-12.2 کارخانه را دوباره به‌کار می‌گیرد. این استراتژی عمداً برای FIX تنها دلیلی طراحی شده که به‌طور مکرر تشخیص داده شده و باعث کنار گذاشته شدن استراتژی خواهر هفتگی ETH در طول 8 تکرار شده است: دروازه‌ی دوگانه‌ی رتبه‌ی IV + IV>RV آن به یک بازه‌ی نگاه به گذشته‌ی غلتان ~560 روزه نیاز داشت که آن را به تنها 4 معامله / metrics_reliable=false کاهش می‌داد — یک بن‌بست ساختاری که توسعه‌دهنده هرگز نتوانست آن را حل کند. این نسخه دروازه‌ی IV با بازه‌ی نگاه به گذشته‌ی طولانی را به‌طور کامل DROPS و فیلتر روند را ONLY نگه می‌دارد (دروازه‌ای که در برنده‌ی ترفیع‌یافته‌ی BTC اثبات‌شده حیاتی است)، و هر هفته‌ی واجد شرایط یک پوت ETH OTM با دلتای ثابت ~25 می‌نویسد. بدون وابستگی به صدک چندساله‌ی IV، این استراتژی حدود 40-52 بار در سال در طول تاریخچه‌ی هفتگی موجود ETH Deribit فعال می‌شود → تعداد معامله‌ای که از نظر آماری قابل اعتماد است، که دقیقاً دیوار 4 معامله را از میان برمی‌دارد. این استراتژی کم‌نمایش‌ترین پلتفرم را پر می‌کند (اختیار معامله: 5.5% Deribit + 0.1% Binance در برابر هدف ≥15%) و کتاب اختیار معامله را از تنها BTC به یک دارایی پایه‌ی دوم با نوسان غیرهمبسته متنوع می‌سازد. این استراتژی NOT یک ساختار چندپایه (L2) است، NOT یک سلول محصورشده در داده (زنجیره‌ی هفتگی ETH + گریک‌ها فهرست‌بندی شده و از طریق استراتژی خواهر BTC اثبات‌شده اجراپذیرند)، و NOT جهت‌دار است. پارامترها (دلتای پوت، طول فیلتر روند) عمداً 2 نگه داشته شده‌اند تا در برابر بیش‌برازش مقاوم باشد.

فرضیه‌ها

تکرار 3 با یک تغییر فقط در پیکربندی، مهلت زمانی لایه-3 را برطرف می‌کند؛ استراتژی CODE بدون تغییر باقی مانده است (این استراتژی پیش‌تر لایه‌های 1-2 را پشت سر گذاشته است، کار به‌ازای هر میله برابر با O(1) از طریق یک مجموع تجمعی افزایشی SMA است، و هیچ پویش min()/sorted()/history به‌ازای هر میله وجود ندارد). تشخیص: تکرار 2 به‌درستی حل ابزار اصلی و پایه را به 1-DAY منتقل کرد، اما STILL از مهلت زمانی فراتر رفت، که ثابت می‌کند گلوگاه، تعداد میله‌ها نیست. با خواندن src/data/option_chain.py: discover_deribit_chain برای هر قیمت اعمال نامزد از سررسید هفتگی EACH یک پروب شبکه‌ای fetch_ohlcv صادر می‌کند، و جعبه‌ایمنی لایه-3 دربرگیرنده lookback_days است (expand_rolling_options / پیش‌فرض خط لوله 365). بنابراین هزینه گسترش با تعداد سررسیدهای هفتگی = lookback_days مقیاس می‌شود، صرف‌نظر از بازه زمانی. پیکربندی iter-2 شامل lookback_days ~730 بود (~104 سررسید، که تعداد پروب‌ها را دو برابر کرد)، که بودجه 300 ثانیه‌ای را منفجر کرد. بازگرداندن lookback_days به 365 (~52 سررسید) پروب‌های سررسید و بارگیری‌های پایه را به نصف کاهش می‌دهد، و با مقیاس دقیقی که هم‌خانواده‌های اثبات‌شده فروش اختیار فروش هفتگی ETH/BTC لایه 3 را پشت سر می‌گذارند مطابقت می‌کند، در حالی که همچنان حدود 52 هفته واجد شرایط را پوشش می‌دهد تا تعداد معاملات از نظر آماری قابل‌اعتماد باقی بماند (~30-52 فروش پس از دروازه‌بندی روند) و بسیار بالاتر از بن‌بست معامله‌ای 4-تایی قرار گیرد. همه چیز دیگر حفظ و اثبات شده است: زیرکلاس‌بندی مستقیم RollingOptionsStrategy (لایه-1 آن را می‌شناسد؛ قلاب‌های انتزاعی 4 از نظر فیزیکی حضور دارند)، بدون مسیر آزمایشی (پاهای اختیار واقعی از طریق برنامه گسترش‌یافته معامله می‌شوند، که options_no_option_trades را برآورده می‌کند)، دروازه روند تک‌قیمتی در _enter_leg، حل ابزار اصلی و پایه 1-DAY ETH-PERPETUAL + 1-DAY (همان حلی که هم‌خانواده فروش اختیار فروش ETH که پذیرفته شده است استفاده می‌کند)، اندازه‌بندی تضمین‌شده با وجه نقد (risk_frac 0.8، اهرم 1.0 طبق سقف بورس اختیارات)، و طراحی 2-پارامتری (افست اختیار فروش + sma_window).

فرضیه‌ها

backtest_failed: RuntimeError: انبساط rolling_options ناموفق بود (ConnectError: )؛ از اجرا با زمان‌بندی اختیارات خالی خودداری می‌شود Traceback (most recent call last): File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions yield File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 256, in handle_async_request raise exc from None File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 236, in handle_async_request response = await connection.handle_async_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 101, in handle_async_request raise exc File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 78, in handle_async_request stream = await self._connect(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 156, in _connect stream = await stream.start_tls(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 67, in start_tls with map_exceptions(exc_map): File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__ self.gen.throw(value) File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions raise to_exc(exc) from exc httpcore.ConnectError استثنای فوق دلیل مستقیم استثنای زیر بود: Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 49, in expand_rolling_options_into_config extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/option_chain.py", line 242, in expand_rolling_options contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/option_chain.py", line 143, in discover_deribit_chain perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 169, in fetch_ohlcv result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 86, in _get response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1768, in get return await self.request( ^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1540, in request return await self.send(request, auth=auth, follow_redirects=follow_redirects) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects response = await self._send_single_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request response = await transport.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request with map_httpcore_exceptions(): File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__ self.gen.throw(value) File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions raise mapped_exc(message) from exc httpx.ConnectError استثنای فوق دلیل مستقیم استثنای زیر بود: Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 184, in _run_backtest config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/agents/backtest_agent.py", line 427, in _maybe_expand_rolling_options config = await expand_rolling_options_into_config(config, catalog_path, self._logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/agents/backtest_agent.py", line 59, in expand_rolling_options_into_config raise RuntimeError( RuntimeError: انبساط rolling_options ناموفق بود (ConnectError: )؛ از اجرا با زمان‌بندی اختیارات خالی خودداری می‌شود

پیاده‌سازی

پوت-رایتینگ هفتگی تک‌پایه و با وثیقه‌ی نقدی روی اختیارهای اروپایی ETH در Deribit، تنها با دروازه‌ی روند OTM. هر هفته چارچوب، زنجیره‌ی پوت هفتگی تاریخی ETH Deribit را تحلیل می‌کند (با هدف قیمت اعمالی با دلتای ~25 OTM از طریق آفست ارزش ذاتی -6%) و آن را رول می‌کند؛ استراتژی SELLS یک پوت با ~7 روز تا سررسید را باز و آن را حدود 24 ساعت پیش از تسویه می‌بندد. دروازه‌ی ONLY یک فیلتر روند صرفاً قیمتی است: تنها زمانی پوت را می‌نویسد که اسپات ETH بالاتر از SMA ~50 روزه‌ی خود باشد (بارهای روزانه)، و در روندهای نزولی تأییدشده کنار می‌نشیند. بدون هیچ پنجره‌ی صدک چندساله‌ی IV، در هر هفته‌ی واجد شرایط معامله می‌کند (~52 بار در سال در طول پنجره‌ی 365 روزه) که تعدادی از نظر آماری قابل اعتماد می‌دهد و به‌طور مستقیم دیوار بازه‌ی نگاه به گذشته با 4 معامله را که باعث کنار گذاشته شدن استراتژی خواهر هفتگی ETH با دروازه‌ی IV شده بود، از میان برمی‌دارد. اصلی = ETH-PERPETUAL.DERIBIT روی بارهای 1-DAY (فقط ساعت رول، هرگز معامله نمی‌شود). اندازه‌گیری با وثیقه‌ی نقدی (risk_frac 0.8)، بدون اهرم، پارامترهای 2 تنظیم‌شده (آفست پوت، sma_window).

نتایج تأیید

CLEAN RESTART 2026-09-04 — تاریخچه‌ی احکام و رکوردهای یادگیری این اجرا حذف شد و از مرحله‌ی تأیید مجدداً آغاز گردید. کنار گذاشته شدن قبلی آن ناشی از خط لوله بود، نه از بازار: هارنس Layer-2 کمک‌متدهای @staticmethod را به‌اشتباه متصل کرده بود (رفع شد)، QA احکام نهایی عملکرد را بر اساس یک تست دودی بهینه‌نشده صادر می‌کرد (حذف شد — اکنون QA فقط صحت را قضاوت می‌کند)، و تایم‌اوت‌های سندباکس ناشی از گرسنگی اسلات بک‌تست بود (رفع شد). فرضیه و کد استراتژی بدون تغییر باقی مانده‌اند. کد را بر اساس شایستگی‌های خودش تأیید کنید؛ عملکرد بعداً توسط بک‌تست کامل و بهینه‌ساز تعیین می‌شود.

نتایج تأیید

نیازی نیست.

نتایج تأیید

لایه‌ی -1 متد self._win.append() را به‌عنوان نامحدود علامت‌گذاری کرد، اما on_bar در هر بار deque را کوتاه می‌کند (while len > sma_window: popleft())، بنابراین رشد به sma_window محدود می‌شود. مثبت کاذب.

Iteration History

تأیید ناموفق بود (لایه 3 — بک‌تست سندباکس): تست دودی از محدودیت زمانی 300 ثانیه‌ای (wall-clock) فراتر رفت. این تقریباً همیشه به معنای کاری در سطح هر بار (bar) است که با اندازه‌ی تاریخچه مقیاس می‌یابد — مثلاً اسکن مجدد کل سری فاندینگ/مکمل، یا بازسازی یک لیست و فراخوانی min()/sorted() داخل calculate_signal()/on_bar() در هر بار. آرایه‌های تایم‌استمپ مرتب‌شده‌ی ONCE را در __init__ از پیش محاسبه کنید و از bisect استفاده کنید، یا جستجوها را با کلید تایم‌استمپ کش کنید، تا هزینه‌ی هر بار O(log n) باشد نه O(n).

Iteration History

RuntimeError: بسط rolling_options ناموفق بود (ConnectError: )؛ از اجرا با یک زمان‌بندی اختیار معامله‌ی خالی خودداری می‌شود Traceback (most recent call last): File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions yield File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 256, in handle_async_request raise exc from None File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 236, in handle_async_request response = await connection.handle_async_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 101, in handle_async_request raise exc File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 78, in handle_async_request stream = await self._connect(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 156, in _connect stream = await stream.start_tls(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 67, in start_tls with map_exceptions(exc_map): File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__ self.gen.throw(value) File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions raise to_exc(exc) from exc httpcore.ConnectError استثنای فوق، علت مستقیم استثنای زیر بود: Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 49, in expand_rolling_options_into_config extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/option_chain.py", line 242, in expand_rolling_options contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/option_chain.py", line 143, in discover_deribit_chain perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 169, in fetch_ohlcv result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 86, in _get response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1768, in get return await self.request( ^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1540, in request return await self.send(request, auth=auth, follow_redirects=follow_redirects) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects response = await self._send_single_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request response = await transport.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request with map_httpcore_exceptions(): File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__ self.gen.throw(value) File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions raise mapped_exc(message) from exc httpx.ConnectError استثنای فوق، علت مستقیم استثنای زیر بود: Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 184, in _run_backtest config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/agents/backtest_agent.py", line 427, in _maybe_expand_rolling_options config = await expand_rolling_options_into_config(config, catalog_path, self._logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/agents/backtest_agent.py", line 59, in expand_rolling_options_into_config raise RuntimeError( RuntimeError: بسط rolling_options ناموفق بود (ConnectError: )؛ از اجرا با یک زمان‌بندی اختیار معامله‌ی خالی خودداری می‌شود

دلیل کنارگذاری

backtest_failed: RuntimeError: انبساط rolling_options ناموفق بود (ConnectError: )؛ از اجرا با زمان‌بندی اختیارات خالی خودداری می‌شود Traceback (most recent call last): File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions yield File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 394, in handle_async_request resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 256, in handle_async_request raise exc from None File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py", line 236, in handle_async_request response = await connection.handle_async_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 101, in handle_async_request raise exc File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 78, in handle_async_request stream = await self._connect(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py", line 156, in _connect stream = await stream.start_tls(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 67, in start_tls with map_exceptions(exc_map): File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__ self.gen.throw(value) File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions raise to_exc(exc) from exc httpcore.ConnectError استثنای فوق دلیل مستقیم استثنای زیر بود: Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 49, in expand_rolling_options_into_config extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/option_chain.py", line 242, in expand_rolling_options contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/option_chain.py", line 143, in discover_deribit_chain perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 169, in fetch_ohlcv result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/data/collectors/deribit_collector.py", line 86, in _get response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1768, in get return await self.request( ^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1540, in request return await self.send(request, auth=auth, follow_redirects=follow_redirects) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1629, in send response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1657, in _send_handling_auth response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1694, in _send_handling_redirects response = await self._send_single_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py", line 1730, in _send_single_request response = await transport.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 393, in handle_async_request with map_httpcore_exceptions(): File "/usr/lib/python3.12/contextlib.py", line 158, in __exit__ self.gen.throw(value) File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions raise mapped_exc(message) from exc httpx.ConnectError استثنای فوق دلیل مستقیم استثنای زیر بود: Traceback (most recent call last): File "/opt/strategy-factory/src/agents/backtest_agent.py", line 184, in _run_backtest config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/agents/backtest_agent.py", line 427, in _maybe_expand_rolling_options config = await expand_rolling_options_into_config(config, catalog_path, self._logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/src/agents/backtest_agent.py", line 59, in expand_rolling_options_into_config raise RuntimeError( RuntimeError: انبساط rolling_options ناموفق بود (ConnectError: )؛ از اجرا با زمان‌بندی اختیارات خالی خودداری می‌شود
گزارش استراتژی

Stratmill ابزاری برای پژوهش و معامله آزمایشی است، نه مشاوره مالی یا کارگزار. نتایج بک‌تست و معامله آزمایشی فرضی هستند. معامله‌گری با ریسک زیان همراه است.