الانتقال إلى المحتوى

عرض الأصل

DeribitEthWeeklyPutWriteTrendGatedOnly

الفرضيات

بيع خيار البيع (Put-Write) الأسبوعي المضمون نقدًا OTM على ETH في Deribit — بوابة اتجاه فقط، دلتا ثابتة ~25، NO بوابة IV ذات الاسترجاع الطويل (حصاد VRP أحادي الأرجل؛ يُصلح مباشرةً عائق استرجاع 4 صفقة الذي أدى إلى التخلي عن الاستراتيجية الشقيقة الأسبوعية ETH)

الفرضيات

برنامج SINGLE-LEG أسبوعي PUT-WRITING مضمون نقدًا بالكامل على خيارات ETH في Deribit — ثاني أكثر الأصول الأساسية سيولةً في خيارات العملات المشفرة، يعيد استخدام مسار التنفيذ EXACT (اختيار سعر التنفيذ عبر اليونانيات (greeks)، والتسوية النقدية الأسبوعية) الخاص باستراتيجية بيع خيار البيع (put-write) الأسبوعية BTC على Deribit التي تمت ترقيتها بواسطة Sharpe-12.2 في المصنع (factory). وقد صُمم عمدًا لـFIX السبب الوحيد الذي تم تشخيصه مرارًا وراء التخلي عن الاستراتيجية الشقيقة الأسبوعية ETH عبر 8 تكرارات: البوابة المزدوجة المكونة من ترتيب IV + IV>RV تطلبت فترة استرجاع متجددة (rolling lookback) تبلغ حوالي 560 يومًا، مما قلّصها إلى 4 صفقات فقط / metrics_reliable=false — طريق مسدود هيكليًا لم يستطع المطور حله أبدًا. تُلغي هذه النسخة بوابة IV ذات الاسترجاع الطويل DROPS تمامًا وتحتفظ بـONLY مرشح الاتجاه (البوابة التي ثبت أنها أساسية في الفائز BTC الذي تمت ترقيته)، حيث تكتب خيار بيع OTM ETH ثابتًا بدلتا (delta) تبلغ حوالي 25 في كل أسبوع مؤهل. ونظرًا لعدم وجود اعتماد على نسبة مئوية (percentile) متعددة السنوات IV، فإنها تُنفَّذ حوالي 40-52 مرة/سنويًا عبر تاريخ ETH الأسبوعي المتاح على Deribit → عدد صفقات موثوق إحصائيًا، مما يُزيل تمامًا عائق 4 صفقة. وهي تملأ المنصة الأقل تمثيلاً (الخيارات: 5.5% على Deribit + 0.1% على Binance مقابل هدف ≥15%)، وتُنوّع دفتر الخيارات من الاقتصار على BTC فقط إلى أصل أساسي ثانٍ ذي تقلب غير مترابط (uncorrelated-vol). وهي NOT هيكل متعدد الأرجل (L2)، وNOT خلية محاطة بجدار بيانات (data-walled cell) (سلسلة ETH الأسبوعية واليونانيات موثقة ومُثبتة قابلية التنفيذ عبر الاستراتيجية الشقيقة BTC)، وNOT اتجاهية. تم عمدًا 2 المعاملات (دلتا خيار البيع، طول مرشح الاتجاه) لمقاومة الإفراط في المطابقة (overfit).

الفرضيات

يُصلح التكرار 3 مهلة الوقت الفعلي (wall-clock timeout) لـ Layer-3 من خلال تغيير في الإعداد (config) فقط؛ كود الاستراتيجية CODE لم يتغير (فقد اجتاز بالفعل Layers 1-2، والعمل لكل شمعة هو O(1) عبر مجموع تراكمي تدريجي (incremental running-sum) SMA، ولا توجد عمليات مسح min()/sorted()/history لكل شمعة). التشخيص: نقل التكرار 2 بشكل صحيح حل الأصل الأساسي + الأرجل إلى 1-DAY، لكن STILL تجاوز المهلة، مما يثبت أن الاختناق (bottleneck) ليس عدد الشموع. بقراءة src/data/option_chain.py: يُصدر discover_deribit_chain استقصاء شبكة fetch_ohlcv لكل سعر تنفيذ مرشح لكل تاريخ انتهاء أسبوعي EACH، وتمتد البيئة المعزولة (sandbox) لـ Layer-3 عبر lookback_days (expand_rolling_options / الافتراضي في خط الأنابيب 365). لذا تتناسب تكلفة التوسيع مع عدد تواريخ الانتهاء الأسبوعية = lookback_days، بغض النظر عن الإطار الزمني. حمل إعداد iter-2 القيمة lookback_days ~730 (~104 تاريخ انتهاء، مما ضاعف عدد الاستقصاءات)، الأمر الذي تجاوز ميزانية 300 ثانية. إن إعادة lookback_days إلى 365 (~52 تاريخ انتهاء) تُنصّف عدد استقصاءات تواريخ الانتهاء وتنزيلات الأرجل، بما يطابق تمامًا المقياس الذي تجتاز عنده الاستراتيجيات الشقيقة المُثبتة لبيع خيار البيع الأسبوعي ETH/BTC طبقة Layer 3، مع الاستمرار في تغطية ~52 أسبوعًا مؤهلاً بحيث يبقى عدد الصفقات موثوقًا إحصائيًا (~30-52 عملية كتابة بعد بوابة الاتجاه) وأعلى بكثير من طريق 4 صفقة المسدود. كل شيء آخر محفوظ ومُثبت: التفرع المباشر من RollingOptionsStrategy (يتعرف عليه Layer-1؛ خطافات 4 المجردة موجودة فعليًا)، بدون مسار دخان (smoke path) (أرجل الخيارات الحقيقية تُتداول عبر الجدول الموسّع، بما يُحقق 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: )؛ يُرفض التشغيل بجدول خيارات فارغ

التنفيذ

بيع خيار بيع (put-writing) أسبوعي أحادي الأرجل ومضمون نقدًا على خيارات ETH الأوروبية من نوع OTM على Deribit، ببوابة اتجاه فقط. في كل أسبوع، يحل الإطار سلسلة خيارات البيع الأسبوعية التاريخية ETH على Deribit (بهدف تحقيق دلتا حوالي 25 عند سعر تنفيذ OTM عبر إزاحة -6% في مستوى الربحية (moneyness offset)) ثم يُجدّدها (rolls)؛ تكتب الاستراتيجية SELLS خيار بيع واحد يبعد حوالي 7 أيام عن انتهاء الصلاحية وتُغلقه قبل حوالي 24 ساعة من التسوية. بوابة ONLY هي مرشح اتجاه قائم على السعر فقط: تكتب خيار البيع فقط عندما يكون السعر الفوري لـETH أعلى من متوسطه SMA لفترة حوالي 50 يومًا (شموع يومية)، متجنبةً الاتجاهات الهبوطية المؤكدة. ونظرًا لعدم وجود نافذة نسبة مئوية IV متعددة السنوات، فإنها تُنفَّذ في كل أسبوع مؤهل (~52/سنويًا عبر نافذة 365 يومًا) لتحقيق عدد صفقات موثوق إحصائيًا، مما يُزيل مباشرةً عائق استرجاع الصفقات 4 الذي أدى إلى التخلي عن الاستراتيجية الشقيقة الأسبوعية ETH ذات البوابة IV. الأصل الأساسي (Primary) = ETH-PERPETUAL.DERIBIT على شموع 1-DAY (لتوقيت التجديد فقط، ولا يتم تداوله أبدًا). الحجم مضمون نقدًا (risk_frac 0.8)، بدون رافعة مالية، مع 2 معاملات مضبوطة (إزاحة خيار البيع، sma_window).

نتائج التحقق

CLEAN RESTART 2026-09-04 — تمت إزالة سجل الأحكام وسجلات التعلم الخاصة بهذه الدورة، وأُعيد تشغيلها من مرحلة التحقق. جاء التخلي عنها سابقًا من خط الأنابيب (pipeline)، وليس من السوق: قام إطار العمل الخاص بـ Layer-2 بربط مساعدات @staticmethod بشكل خاطئ (تم إصلاح ذلك)، وأصدر QA أحكامًا نهائية على الأداء بناءً على اختبار دخان (smoke test) غير مُحسَّن (تمت إزالة ذلك — الآن يحكم QA على الصحة فقط)، وجاءت انتهاءات مهلة البيئة المعزولة (sandbox) من تجويع فتحات الاختبار الخلفي (backtest-slot starvation) (تم إصلاح ذلك). الفرضية وكود الاستراتيجية لم يتغيرا. تحقق من الكود بناءً على مزاياه؛ يتم تحديد الأداء لاحقًا بواسطة الاختبار الخلفي الكامل والمُحسِّن (optimizer).

نتائج التحقق

لا حاجة لذلك.

نتائج التحقق

أشارت Layer-1 إلى self._win.append() باعتبارها غير محدودة (unbounded)، لكن on_bar تُقلّص deque في كل شمعة (while len > sma_window: popleft())، لذا فإن النمو محدود بـ sma_window. إنذار كاذب (False positive).

Iteration History

فشل التحقق (Layer 3 — اختبار خلفي في بيئة معزولة): تجاوز اختبار الدخان (smoke test) الحد الزمني الفعلي البالغ 300 ثانية. يعني هذا غالبًا وجود عمل لكل شمعة (bar) يتناسب حجمه مع طول التاريخ — مثل إعادة مسح سلسلة التمويل/البيانات الإضافية بالكامل، أو إعادة بناء قائمة واستدعاء min()/sorted() داخل calculate_signal()/on_bar() في كل شمعة. احسب مسبقًا مصفوفات الطوابع الزمنية المرتبة ONCE في __init__ واستخدم bisect، أو خزّن نتائج البحث مؤقتًا (cache) مفهرسة بالطابع الزمني، بحيث تكون تكلفة كل شمعة 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 هي أداة بحث وتداول تجريبي وليست استشارة مالية أو وسيطًا. نتائج الاختبار الخلفي والتداول التجريبي افتراضية. ينطوي التداول على مخاطر الخسارة.