自定义指标编辑器:编写、运行并显示你自己的指标
「自定义指标」对话框让你编写指标脚本、在当前图表的真实 K 线上运行它并保存。保存后的脚本会进入指标面板的「我的脚本」分组,像内置指标一样开关。
Senzoukria · 文档 · 更新于 2026 年 9 月
位置
- 位置
- Replay 图表 → 「脚本」标签(提示「编写你自己的指标(在沙箱中运行)」);脚本页面 → 「在图表上显示」开关
- 存储
- localStorage 键 orderflow.userIndicators.v1;每个图表的可见性存在指标设置存储中
- 运行范围
- 最多最近 600 根 K 线,真实图表数据,2 秒沙箱预算
- 图表上的节奏
- 每个脚本同时最多一次运行,两次运行之间至少间隔 400 毫秒
它做什么
对话框标题为「自定义指标」。左侧列表按绘制目标列出每个已保存的脚本;「+ 新建指标」会创建一个名为「我的指标」的脚本,带默认代码(20 周期 SMA)和两个参数:Period(20,范围 1 到 500)和 Color(#7ed321)。右侧是名称字段(最多 48 个字符)、绘制目标选择器,以及与脚本页面相同的代码编辑器,带行号和 Tab 缩进。
关键按钮是「▶ 在当前图表上运行」。它会在沙箱中用图表的真实 K 线(最多 600 根)执行脚本,然后报告「✓ N 个输出,耗时 X 毫秒——基于 N 根 K 线」,或者把错误连同行号显示在最前面。控制台区块列出脚本用 log() / console.log()(JavaScript)或 print()(Python)打印的内容;什么都没打印时,会有一条提示说明该用哪个函数。按 Escape 关闭对话框。
设置项
| 控件 | 默认值 | 它改变什么 |
|---|---|---|
| 指标名称 | 我的指标 | 显示在列表、指标面板以及表格/面板上的标签;最多 48 个字符 |
| 绘制目标 | 叠加在图表上 | 「叠加在图表上」画在价格之上;「独立窗格」在图表下方分配一个专用窗格 |
| Period 参数 | 20(最小 1,最大 500,步长 1) | 以 params.period 传给脚本;之后可在指标面板中调整 |
| Color 参数 | #7ed321 | 以 params.color 传入 |
| 在当前图表上运行 | — | 在最多 600 根真实 K 线上运行脚本,并显示输出、耗时、日志或出错行 |
| 保存 | — | 持久化脚本;未保存的修改会在对话框关闭时丢失 |
| 删除 | — | 移除该脚本并选中下一个 |
把脚本显示到图表上
保存脚本并不会把它画出来。在脚本页面,「在图表上显示」开关说明了这一点:「该指标会绘制到图表上,并进入指标面板的「我的脚本」分组——在那里像其他指标一样开关。」从脚本页面保存一个新指标时会自动打开它。在指标面板中,每个脚本的名称旁会显示「图表叠加」或「独立窗格」;脚本失败时,该位置显示错误信息。
在图表上,自定义脚本在一个 worker 中按自己的循环运行:每个脚本同时最多一次执行,两次运行之间有 400 毫秒下限,因此慢脚本只会推迟自己的绘制,绝不会冻结图表。切换品种或周期时结果会被丢弃,仅仅是 K 线重新发布则不会。在指标面板中设置的参数值会覆盖脚本中声明的默认值,并且每个声明的键都必定收到一个值。
逐脚本报告的错误
| 代码 | 含义 | 该怎么办 |
|---|---|---|
| threw | compute 抛出异常,或沙箱中断了它(2 秒预算);会显示错误信息和行号 | 修正所引用的那一行;之前的绘制会被清除,以免过期曲线被当成正常工作的结果 |
| shape | 某个输出的形态是渲染器不认识的 | 请返回 line、histogram、bands、markers、levels、table 或 panel 中的一种 |
| empty | 脚本运行没有报错,但什么也没画 | 对于没有可标记内容的标记类脚本这是正常的;否则请检查预热期和 K 线的倒序 |
限制与陷阱
- 脚本收到的 K 线是最新在前:bars[0] 是最近的一根。套用任何公式之前请先反转顺序。
- 语言随脚本一起保存(默认 JavaScript,也可在脚本页面选择 Python 或 C++)。Python 脚本由 Python 引擎运行,而不是当作 JavaScript 执行。
- 时间与任何 K 线都对不上的点会被丢弃;非有限值会变成缺口。脚本无法在图表之外绘制。
- 编辑器刻意不做语法高亮;「运行」按钮和它给出的确切错误取代了这一功能。
相关页面
其他语言版本
常见问题
- 我保存了脚本,但图表上什么都没出现,为什么?
- 保存和显示是两个不同的动作。请在脚本页面打开「在图表上显示」,或在指标面板的「我的脚本」分组中勾选该脚本。
- 脚本能收到多少根 K 线?
- 最多是图表最近的 600 根,编辑器里的「运行」和实时图表上都是如此。把一整天带逐档明细的 K 线序列化,代价会超过计算本身。
- 我的脚本能访问网络或我的经纪商吗?
- 不能。脚本运行在一个 worker 中,fetch、XMLHttpRequest、WebSocket、importScripts 和全局 eval 在你的代码运行之前就被覆盖,Tauri 接口从不导入,沙箱协议还加上了 default-src 'none' 策略。没有文件访问,也没有经纪商接口。