Ⅳ · 研究与可视化 — 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

2024-01-02 UTC32 bars5 zones shownbundled · no API
静态打包样本,拖拽缩放,双击重置,悬停查看 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 优先服务持续运行时的图表呈现。

两条基本纪律

  1. cell 可以乱序执行。要输出可用于判断的结果,先重启 kernel 并从头执行,避免屏幕代码与内存变量不一致。
  2. .ipynb 会保存输出。提交版本库前应清理无关输出,并把用于重现的参数、数据版本与结果摘要写入可读文件。