脚本输出:line、histogram、bands、markers、levels、table、panel
自定义脚本返回一个输出数组,每个输出由一种形态标识。其中五种绘制在画布上(line、histogram、bands、markers、levels),两种渲染成可拖动的 DOM 卡片(table、panel)。每个输出在到达渲染器之前都会被规范化,无法识别的内容会被报告出来,而不是悄悄丢弃。
Senzoukria · 文档 · 更新于 2026 年 9 月
位置
- 位置
- 任何自定义脚本中 compute() 的返回值;脚本被显示时绘制到图表上
- 绘制目标
- 「叠加在图表上」或「独立窗格」(图表下方 90 px 的窗格)
- DOM 上限
- 表格:50 行、8 列;面板:50 条;超出部分被截断
- 时间键
- point.time 必须等于某根 K 线的 bucketTsNs(纳秒时间戳);其他点会被丢弃
它做什么
渲染器只认识 SeriesOutput 值;它从不知道是哪个脚本产生了它们。因此内置指标和自定义脚本共用同样的形态和同样的规范化规则:可见 K 线之外的点会被丢弃,非有限值变成缺口(value: null),而刻意写入的 null——例如均线预热期——会被保留为抬笔,而不是画成一段虚假的线段。
绘制目标按脚本选择。「叠加在图表上」覆盖在价格之上;「独立窗格」保留一个由渲染器固定为 90 px 高的窗格。由于表格和面板是 DOM 元素,一个窗格脚本如果剩下的输出只有表格,就不会占用一个空窗格:画布输出与 DOM 输出的划分发生在渲染器统计窗格数量之前。
形态及其字段
| 形态 | 字段 | 应用的默认值 |
|---|---|---|
| line | points [{time, value|null}]、style {color, width, style} | 颜色 #7ed321;宽度限制在 0.5–12;样式可为 solid、dashed 或 dots |
| histogram | points [{time, value}]、positiveColor、negativeColor | 正值 #22c55e,负值 #ef4444;没有有限值的 K 线不产生点 |
| bands | upper、basis、lower 三个点数组,fillAlpha、style | fillAlpha 0.12,限制在 0–1;style 与 line 相同 |
| markers | markers [{time, price, kind, color, label?}] | kind 默认 dot,也可为 arrow-up、arrow-down 或 square;颜色 #7ed321 |
| levels | levels [{price, from, to|null, color, label?, style?}] | to 为 null 表示延伸到右边缘;只有 price 和 from 是必填 |
| table | title?、columns [{key, label, align?}]、rows [{key: string|number|null}] | 没有列时被拒绝;最多 8 列 50 行;未知的行键会被丢弃 |
| panel | title?、entries [{label, value, color?}] | 最多 50 条;value 既不是字符串也不是有限数字的条目会被跳过 |
表格与面板卡片
表格和面板渲染成图表之上的浮动卡片,原因有二:表格必须能够阅读、选中和复制,这是画布做不到的;而 90 px 的窗格只放得下三行。每张卡片以脚本名称作为标题,若输出带有标题,则在后面加上「 · 」和该标题。卡片通过标题栏拖动;拖动结束时,其位置按输出保存在键 orderflow.seriesTables.v1 下。没有保存过位置时,卡片从右上角层叠展开(向下 60 px、向内 12 px,每多一张卡片再偏移 26 px 和 14 px),因此两张卡片绝不会完全重叠。
DOM 每个动画帧更新一次,而不是按 4 Hz 的 K 线发布频率更新;空单元格打印为「—」而不是 0。列对齐默认靠左;希望数字靠右的脚本可在列上设置 align: "right"。
怎么用
lib 辅助函数可以构建常见形态:lib.line(chronoBars, values, color, width)、lib.histogram、lib.markers、lib.levels、lib.table(columns, rows, title) 和 lib.panel。传给 lib 辅助函数的数组必须按时间正序排列,所以要先把最新在前的 K 线反转。一个脚本可以返回多个输出,例如为带 sigma 通道的 VWAP 同时返回一个 bands 和一条 line。
被拒绝的形态不会凭空消失:该脚本会在指标面板中被标记,名称下方那行会变成「无法识别的返回值。指标应返回一条序列、线或标记——参见\"指标:需要返回什么\"。」,取代原本的绘制目标。返回的输出什么都没画出来的脚本会被标记为「empty」,从而把「它不工作」和「本来就没有可显示的东西」区分开。
限制与陷阱
- 小于 0.5 px 或大于 12 px 的宽度会被截断;未知的样式名称回退为 solid。
- 取值为 null 或非有限的柱状图点会被整个移除,这与 line 不同——在 line 中 null 表示缺口。
- levels 是以 price 和 from 为键的线段;它们不按 K 线时间过滤,因此早于已加载历史的 from 时间戳只会从左边缘开始画。
- 超过 50 行的表格会被截断;如果行数本身有意义,请自己在标题中写明这一截断。
相关页面
其他语言版本
常见问题
- 为什么我的表格不在我选定的窗格里?
- 无论绘制目标是什么,表格和面板始终渲染为图表之上的 DOM 卡片。目标只影响 line、histogram 等画布形态。
- 预热期怎样显示缺口而不是一条归零的线?
- 这些点请返回 value: null。渲染器会抬笔;返回 0 则会画出一段虚假的线段。
- 我能移动表格卡片并保留它的位置吗?
- 可以。用标题栏拖动它;位置会按输出保存在本地存储中,重新打开图表时恢复。