Files
shy3130 d3500b1e76 docs(examples): 示例脚本实测修正 — 演示值按字段语义 / 回测走纯 Polars 引擎 / hello 输出规整
四个示例以真实 Token 完整跑通: 01 行情 / 02 写入+读回 / 03 策略清单+回测 /
04 票据+事件流 (种告警实时收到 4 条 alert)。
- 02: 演示行不再把占位值写进 date/name, 按字段名给合理值
- 03: POST /api/backtest/run 依赖 vectorbt (可选 extra), 改走所有安装自带
  纯 Polars 引擎的 /api/backtest/strategy/run, 近 90 天单标的控制耗时
- 04: hello 帧打印规整
2026-09-26 11:42:22 +08:00

29 lines
1.1 KiB
Python

"""示例 3 — 策略与回测 (scope: read:analysis + run:backtest)。
列出策略清单 → 用纯 Polars 引擎跑一次策略回测 (所有安装自带, 无需 vectorbt)
→ 读关键指标。GET /api/backtest/status 可查历史任务;
POST /api/backtest/run 是 vectorbt 信号回测, 需 `uv sync --extra backtest`。
"""
from datetime import date, timedelta
from common import call
# 1. 策略清单 (read:analysis)
strategies = call("GET", "/api/strategies")["strategies"]
for s in strategies[:5]:
print(f"策略: {s['id']} {s['name']} [{','.join(s.get('tags', []))}]")
if not strategies:
raise SystemExit("(无策略)")
# 2. 策略回测 (run:backtest): 第一个策略, 近 90 天, 限定单标的控制耗时
sid = strategies[0]["id"]
result = call("POST", "/api/backtest/strategy/run", {
"strategy_id": sid,
"symbols": ["600519.SH"],
"start": (date.today() - timedelta(days=90)).isoformat(),
"end": date.today().isoformat(),
})
print(f"回测完成 ({sid}):", {k: v for k, v in result.items() if k in (
"total_return", "annual_return", "max_drawdown", "trades", "win_rate", "sharpe",
)})