Ⅳ · 研究与可视化 — 4.2
研究轨:Notebook 与交互式 Plotly 输出
Jupyter 负责可重复的研究过程;Plotly 把一段数据、标注与统计结果变成可检查的交互输出。
先看实际交互输出
下面的图表不是截图,也不依赖 workstation 或任何后端。页面构建时已将 32 根 EURUSD 15 分钟 OHLC 与 5 个候选 FVG 区间打包进浏览器脚本;打开页面后只在本机动态载入 Plotly 并绘制,不发起 API、WebSocket 或 SSH 请求。可在图中拖拽缩放、悬停查看 OHLC,并通过工具栏或按钮回到全局视图。
ACTUAL PLOTLY OUTPUT
EURUSD · 15 min · FVG candidate overlay
静态打包样本,拖拽缩放,双击重置,悬停查看 OHLC;半透明区域是按三根 K 线条件筛出的候选区间。
workstation 的 LEAN 离线评估目录只在制作样本时提供过原始分钟 quote。它不是这个页面的运行依赖;发布后的静态站保留的是已整理的示例数据。样本用于验证“数据读取 → 聚合 → 标注 → Plotly 输出”的研究链路,不是策略结果或市场统计结论。
Notebook 在研究过程中的位置
Notebook 不是交易引擎,也不替代回测器。它适合把一次研究拆成可检查的步骤:读取数据、定义规则、观察标注、计算统计、记录假设。每个 cell 的变量会留在 kernel 内存中,因此改动阈值或筛选条件时,不必重复完成整个数据加载过程。
# 研究阶段:查询已落地的 Parquet,再按 15 分钟聚合
bars = duckdb.sql("""
SELECT time_bucket(INTERVAL '15 minutes', ts) AS ts,
first(open) AS open, max(high) AS high,
min(low) AS low, last(close) AS close
FROM 'data/EURUSD/minute/*.parquet'
GROUP BY 1 ORDER BY 1
""").df()
fvg = detect_fvg(bars, min_pips=0.5)
fig = chart_fvg(bars, fvg)
fig.show()
代码本身不是重点。重要的是中间对象都能被重新检查:某个矩形来自哪三根 K 线、阈值改变后候选数如何变化、一个分组统计是否真的对应图上的样本。
Plotly 与 KLineCharts 分别服务什么
| 工具 | 典型输入 | 主要使用位置 | 读者操作 |
|---|---|---|---|
| Plotly | DataFrame、指标结果、回测统计 | Jupyter、研究报告、临时分析页 | 缩放、hover、筛选、导出 HTML |
| KLineCharts | K 线序列、几何标注、订单与状态事件 | 浏览器内的运行监看界面 | 看盘、检查标注、展示运行状态 |
两者可以消费同一套已序列化数据,但不承担同一职责。Plotly 优先帮助研究者追溯一次结论;KLineCharts 优先服务持续运行时的图表呈现。
两条基本纪律
- cell 可以乱序执行。要输出可用于判断的结果,先重启 kernel 并从头执行,避免屏幕代码与内存变量不一致。
.ipynb会保存输出。提交版本库前应清理无关输出,并把用于重现的参数、数据版本与结果摘要写入可读文件。