脚本输出: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 输出的划分发生在渲染器统计窗格数量之前。

形态及其字段

规范化之后,自定义脚本可提交的输出形态
形态字段应用的默认值
linepoints [{time, value|null}]、style {color, width, style}颜色 #7ed321;宽度限制在 0.5–12;样式可为 solid、dashed 或 dots
histogrampoints [{time, value}]、positiveColor、negativeColor正值 #22c55e,负值 #ef4444;没有有限值的 K 线不产生点
bandsupper、basis、lower 三个点数组,fillAlpha、stylefillAlpha 0.12,限制在 0–1;style 与 line 相同
markersmarkers [{time, price, kind, color, label?}]kind 默认 dot,也可为 arrow-up、arrow-down 或 square;颜色 #7ed321
levelslevels [{price, from, to|null, color, label?, style?}]to 为 null 表示延伸到右边缘;只有 price 和 from 是必填
tabletitle?、columns [{key, label, align?}]、rows [{key: string|number|null}]没有列时被拒绝;最多 8 列 50 行;未知的行键会被丢弃
paneltitle?、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 则会画出一段虚假的线段。
我能移动表格卡片并保留它的位置吗?
可以。用标题栏拖动它;位置会按输出保存在本地存储中,重新打开图表时恢复。