跳至正文
全部策略

策略

Deribit BTC 每周现金担保 OTM 看跌期权卖出 — 仅限趋势门控,固定约25-Delta,NO长回溯 IV门控 (在唯一有效的期权单元上的单腿 VRP收获,约每周频率,2-参数)

结局: 已放弃

DeribitBtcWeeklyPutWriteTrendGatedOnly

Deribit BTC 每周现金担保 OTM 看跌期权卖出 — 仅限趋势门控,固定约25-Delta,NO长回溯 IV门控 (在唯一有效的期权单元上的单腿 VRP收获,约每周频率,2-参数)

假设

在Deribit BTC期权上的SINGLE-LEG、完全现金抵押的周度PUT-WRITING计划——与工厂唯一最高夏普比率的已晋升策略(Deribit BTC周度现金担保卖出看跌,夏普比率12.2)刻意采用相同的SAME标的、场所和执行路径,该策略PROVES此精确单元具有真实优势、已编目的希腊值/IV数据以及可行的期权执行路径(唯一曾通过Layer 3的路径)。它与该优胜策略在一个深思熟虑、基于证据的方面存在差异:它DROPS曾反复放弃ETH周度与BTC/ETH月度同类策略的长回看IV排序/IV>RV双重门控(那些需要约560天滚动IV回看 → 仅4笔交易 → metrics_reliable=false,结构性死胡同)。相反,它ONLY保留趋势过滤器(优胜者标题本身即标明该门控至关重要),并以约周度节奏卖出固定的约25-delta OTM看跌期权。由于不依赖多年IV分位数窗口,它在可用的Deribit BTC周度期权历史上的每个符合条件的周都交易(约40-52/年)——产生统计上可靠的交易次数,并避开了本轮所有其他期权提案折戟的“交易过少”困境。它以可用的最低风险期权押注填补了代表性最不足的场所(期权:Deribit 5.4% + Binance期权0.1%,对比≥15%目标):即已知可执行且盈利的唯一期权单元的变体。刻意2参数(看跌delta、趋势过滤长度)以抵御过拟合(202x杀手)。

迭代3从真正源头修复了反复出现的 Layer-3运行时间超时问题。由于该策略具有NO烟雾路径(根据当前指引,即真实期权腿会参与交易,并通过options_no_option_trades),Layer-3沙盒通过展开真实链来运行FULL期权回测——这与烟雾路径时代的同类策略不同,后者在沙盒中运行快速的仅永续合约交易,而将期权推迟到2小时上限的回测阶段。在1-HOUR下,该完整回测需处理约17.5k根K线,覆盖约52个期权工具(每根K线进行期权估值/盈亏计算),即使在迭代-2已将lookback_days削减至365后仍超过300秒。决定性的最小化修复是放宽时间框架:我已将主永续合约bar_type和rolling_options腿时间框架均切换为1-DAY,这将沙盒K线数量削减约24x(365根日线主K线 + 约360根日线周腿K线,而非约17.5k根小时线),使运行能从容地在上限内完成。这是数据安全的:链展开器以小时分辨率探测合约存在性,但按规格时间框架加载每个腿,且采集器已按“1D”获取Deribit数据(expand_rolling_options中的永续价格序列使用“1D”),因此日线期权K线可按需解析。周度期权仍有约7根日线K线——足以进行入场窗口市况检查、按市值计价以及到期前约24小时平仓。策略CODE基本保持不变(每根K线工作量仍为O(1)增量SMA);仅SMA默认值从1200根小时线改为自然的50-DAY窗口以匹配日线主图,而已通过Layer1-2的趋势门控/展期/仓位逻辑保持不变。它保留了原假设:直接继承RollingOptionsStrategy、单一趋势门控、无IV窗口、约45-52次周度卖出(可靠的数量,远高于4笔交易的死胡同)、单腿现金担保(risk_frac 0.8,杠杆1.0)、Deribit场所、2参数。

backtest_failed:RuntimeError:rolling_options 展开失败 (ReadError: );拒绝使用空期权计划运行 回溯(最近一次调用在最后): 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 101 行,在 map_httpcore_exceptions 中 yield 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 394 行,在 handle_async_request 中 resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件……展开收起

backtest_failed:RuntimeError:rolling_options 展开失败 (ReadError: );拒绝使用空期权计划运行 回溯(最近一次调用在最后): 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 101 行,在 map_httpcore_exceptions 中 yield 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 394 行,在 handle_async_request 中 resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py",第 256 行,在 handle_async_request 中 raise exc from None 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py",第 236 行,在 handle_async_request 中 response = await connection.handle_async_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py",第 103 行,在 handle_async_request 中 return await self._connection.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py",第 136 行,在 handle_async_request 中 raise exc 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py",第 106 行,在 handle_async_request 中 ) = await self._receive_response_headers(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py",第 177 行,在 _receive_response_headers 中 event = await self._receive_event(timeout=timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py",第 217 行,在 _receive_event 中 data = await self._network_stream.read( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py",第 32 行,在 read 中 with map_exceptions(exc_map): 文件 "/usr/lib/python3.12/contextlib.py",第 158 行,在 __exit__ 中 self.gen.throw(value) 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py",第 14 行,在 map_exceptions 中 raise to_exc(exc) from exc httpcore.ReadError 上述异常是以下异常的直接原因: 回溯(最近一次调用在最后): 文件 "/opt/strategy-factory/src/agents/backtest_agent.py",第 49 行,在 expand_rolling_options_into_config 中 extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/data/option_chain.py",第 242 行,在 expand_rolling_options 中 contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/data/option_chain.py",第 143 行,在 discover_deribit_chain 中 perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/data/collectors/deribit_collector.py",第 169 行,在 fetch_ohlcv 中 result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/data/collectors/deribit_collector.py",第 86 行,在 _get 中 response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1768 行,在 get 中 return await self.request( ^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1540 行,在 request 中 return await self.send(request, auth=auth, follow_redirects=follow_redirects) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1629 行,在 send 中 response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1657 行,在 _send_handling_auth 中 response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1694 行,在 _send_handling_redirects 中 response = await self._send_single_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1730 行,在 _send_single_request 中 response = await transport.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 393 行,在 handle_async_request 中 with map_httpcore_exceptions(): 文件 "/usr/lib/python3.12/contextlib.py",第 158 行,在 __exit__ 中 self.gen.throw(value) 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 118 行,在 map_httpcore_exceptions 中 raise mapped_exc(message) from exc httpx.ReadError 上述异常是以下异常的直接原因: 回溯(最近一次调用在最后): 文件 "/opt/strategy-factory/src/agents/backtest_agent.py",第 184 行,在 _run_backtest 中 config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/agents/backtest_agent.py",第 427 行,在 _maybe_expand_rolling_options 中 config = await expand_rolling_options_into_config(config, catalog_path, self._logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/agents/backtest_agent.py",第 59 行,在 expand_rolling_options_into_config 中 raise RuntimeError( RuntimeError:rolling_options 展开失败 (ReadError: );拒绝使用空期权计划运行

实现

在BTC Deribit欧式期权上进行单腿、现金担保的周度OTM卖出,仅采用趋势门控,按日展期时钟运行。每周框架会解析历史Deribit BTC周度看跌期权链(通过-6%虚值偏移瞄准约25-delta的OTM行权价)并进行展期;该策略SELLS一笔距到期约7天的看跌期权,并在结算前约24小时平仓。ONLY门控为纯价格趋势过滤器:仅当BTC现货高于其50日SMA时才卖出看跌期权,在卖出看跌期权尾部风险最差的已确认下跌趋势中空仓观望。无IV分位数窗口,因此在365天窗口内每个符合条件的周都交易(约45-52/年),以获得统计上可靠的交易次数。现金担保仓位(risk_frac 0.8),无杠杆,2调优参数(看跌偏移、sma_window)。

验证结果

CLEAN RESTART 2026-09-04 — 本次运行的判定历史和学习记录已删除,并已从验证阶段重新启动。此前放弃该策略的原因来自流水线,而非市场:Layer-2 测试框架错误绑定了 @staticmethod 辅助函数(已修复),QA 在未经优化的冒烟测试上给出了终局性能判定(已移除——QA 现在只判断正确性),沙箱超时则是由回测时段资源不足导致的(已修复)。假设和策略代码均未改变。请根据代码本身的优劣进行验证;性能将在之后由完整回测和优化器决定。

无需处理。

Layer-1 关于无界追加的警告是误报;on_bar 每根 bar 都会将双端队列裁剪到 sma_window。

迭代历史

验证失败(Layer 3 — 沙箱回测):冒烟测试超过了 300 秒的墙钟时间限制。这几乎总是意味着每根 bar 的工作量会随历史数据增长——例如反复扫描完整的资金费率/补充数据序列,或在每根 bar 的 calculate_signal()/on_bar() 中重建列表并调用 min()/sorted()。在 __init__ 中预先计算已排序的时间戳数组 ONCE 并使用 bisect,或者按时间戳缓存查询结果,使每根 bar 的开销为 O(log n),而非 O(n)。

RuntimeError: rolling_options 扩展失败(ReadError: );拒绝使用空期权计划运行 回溯(最近一次调用在最后): 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 101 行,在 map_httpcore_exceptions 中 yield 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 394 行,在 handle_async_request 中 resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件……展开收起

RuntimeError: rolling_options 扩展失败(ReadError: );拒绝使用空期权计划运行 回溯(最近一次调用在最后): 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 101 行,在 map_httpcore_exceptions 中 yield 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 394 行,在 handle_async_request 中 resp = await self._pool.handle_async_request(req) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py",第 256 行,在 handle_async_request 中 raise exc from None 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection_pool.py",第 236 行,在 handle_async_request 中 response = await connection.handle_async_request( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/connection.py",第 103 行,在 handle_async_request 中 return await self._connection.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py",第 136 行,在 handle_async_request 中 raise exc 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py",第 106 行,在 handle_async_request 中 ) = await self._receive_response_headers(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py",第 177 行,在 _receive_response_headers 中 event = await self._receive_event(timeout=timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py",第 217 行,在 _receive_event 中 data = await self._network_stream.read( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py",第 32 行,在 read 中 with map_exceptions(exc_map): 文件 "/usr/lib/python3.12/contextlib.py",第 158 行,在 __exit__ 中 self.gen.throw(value) 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_exceptions.py",第 14 行,在 map_exceptions 中 raise to_exc(exc) from exc httpcore.ReadError 上述异常是以下异常的直接原因: 回溯(最近一次调用在最后): 文件 "/opt/strategy-factory/src/agents/backtest_agent.py",第 49 行,在 expand_rolling_options_into_config 中 extra_i, extra_bt, sched = await expand_rolling_options(collector, spec, start, end) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/data/option_chain.py",第 242 行,在 expand_rolling_options 中 contracts = await discover_deribit_chain( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/data/option_chain.py",第 143 行,在 discover_deribit_chain 中 perp_bars = await collector.fetch_ohlcv(perp, start_ms, end_ms, "1D") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/data/collectors/deribit_collector.py",第 169 行,在 fetch_ohlcv 中 result = await self._get("/public/get_tradingview_chart_data", { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/data/collectors/deribit_collector.py",第 86 行,在 _get 中 response = await self._client.get(f"{DERIBIT_API_URL}{endpoint}", params=params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1768 行,在 get 中 return await self.request( ^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1540 行,在 request 中 return await self.send(request, auth=auth, follow_redirects=follow_redirects) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1629 行,在 send 中 response = await self._send_handling_auth( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1657 行,在 _send_handling_redirects 中 response = await self._send_handling_redirects( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1694 行,在 _send_handling_redirects 中 response = await self._send_single_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_client.py",第 1730 行,在 _send_single_request 中 response = await transport.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 393 行,在 handle_async_request 中 with map_httpcore_exceptions(): 文件 "/usr/lib/python3.12/contextlib.py",第 158 行,在 __exit__ 中 self.gen.throw(value) 文件 "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpx/_transports/default.py",第 118 行,在 map_httpcore_exceptions 中 raise mapped_exc(message) from exc httpx.ReadError 上述异常是以下异常的直接原因: 回溯(最近一次调用在最后): 文件 "/opt/strategy-factory/src/agents/backtest_agent.py",第 184 行,在 _run_backtest 中 config = await self._maybe_expand_rolling_options(config, catalog_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/agents/backtest_agent.py",第 427 行,在 _maybe_expand_rolling_options 中 config = await expand_rolling_options_into_config(config, catalog_path, self._logger) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件 "/opt/strategy-factory/src/agents/backtest_agent.py",第 59 行,在 expand_rolling_options_into_config 中 raise RuntimeError( RuntimeError: rolling_options 扩展失败(ReadError: );拒绝使用空期权计划运行

放弃原因

backtest_failed: RuntimeError: rolling_options 扩展失败 (ReadError: ); 拒绝在选项计划为空的情况下运行 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……展开收起

backtest_failed: RuntimeError: rolling_options 扩展失败 (ReadError: ); 拒绝在选项计划为空的情况下运行 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 103, in handle_async_request return await self._connection.handle_async_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py", line 136, in handle_async_request raise exc File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py", line 106, in handle_async_request ) = await self._receive_response_headers(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py", line 177, in _receive_response_headers event = await self._receive_event(timeout=timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_async/http11.py", line 217, in _receive_event data = await self._network_stream.read( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/strategy-factory/.venv/lib/python3.12/site-packages/httpcore/_backends/anyio.py", line 32, in read 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.ReadError 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.ReadError 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 扩展失败 (ReadError: ); 拒绝在选项计划为空的情况下运行

Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。