PINE SCRIPT / COMPATIBILITY

为什么 Pine 编辑器做不到和 TradingView 100% 一致?98% 是怎么来的?

一、TradingView 的文档,写了什么,没写什么

TradingView 提供图表库,但 Pine 不在其中。Pine 是一套独立的语言与运行时,要在自己的产品里支持它,只能从零实现。

官方文档是公开的,内容也相当完整:函数、参数、返回类型、用法示例。但它描述的是语法——一个函数怎么写、接受什么、返回什么。

它不描述的是行为:这个函数在什么条件下被重新计算、在历史 K 线和当前尚未走完的 K 线上分别取什么值、多周期数据如何对齐、变量如何跨 K 线保持状态、空值如何向下传播。

这不是文档的疏漏。Pine 是闭源的,对 TradingView 而言,它的实现本身就是规范,没有对外公开的必要。

结果是:照着文档实现一遍,代码写对了,跑出来的结果和 TradingView 不一样,而你无法从文档中得知差在哪里。

二、先划边界:一万多个实现点

第一步不是写代码,是把要实现的东西全部列出来。

我们把 Pine 文档完整穷举了一遍,拆解到最小实现单元,每一个函数、每一个参数、每一种用法、每一处行为约定,各自作为一个独立的 cell,最终得到一万多个

这一万多个 cell 就是这项工程的完整边界。它的意义在于:在开始实现之前,先知道要填多少个空,以及填到哪里算完。

其中约六千个能够从文档直接得到完整答案,照实现即可。

剩下的几千个不行——文档只给了语法没给行为,或者表述含糊、存在多种可能的解释。这部分只能靠实验确定。

TradeFlow Pine 实现单元明细表

三、黑箱怎么填:构造 probe 脚本反推

对于文档无法确定的 cell,做法是构造实验。

针对某一个具体的行为疑点,编写一个专门的 probe 脚本。这类脚本不做任何交易逻辑,唯一作用是把该处的中间计算结果以表格形式打在图上。把它放到 TradingView 上实际运行,观察它在不同 K 线状态、不同周期、不同参数下输出什么。

结果反过来告诉我们两件事:一是我们的理解错在哪里,二是我们原本不知道自己不知道什么

TradingView 上运行的 probe 脚本与中间计算表格
图中左下角的表格,是 probe 脚本输出的中间计算数值。这些数值在正常使用中不可见,但它们是判断 TradingView 内部实际行为的唯一依据。

一个 cell 一个 cell 地这样确定下来,黑箱内部的实际行为逐步被还原。文档中表述模糊的部分,同样用这个办法定死。

这个阶段结束后,通过率约 80%。

四、批量对拍:一千个一批

80% 意味着框架和主要行为已经正确,但仍有大量边缘情况没有被 probe 覆盖到——它们只在真实指标的复杂组合中才会出现。

此后进入批量对拍:一次取一千个未曾测试过的真实指标,在 TradingView 与 TradeFlow 上分别运行,逐个比对结果。

举一个具体轮次说明。假设当时的稳定通过率是 90%,新一批一千个指标首次运行,通过 920 个,不通过 80 个。这 80 个拆下来,通常是七八类共性问题,加上十几个各自独立的长尾问题,分别定位、分别修复。

修复之后,这一千个指标全部可以通过。但这一批的成绩仍然记 92%,不记 100%。

因为记录的是修复之前、首次运行时的成绩。修完再跑当然全过,那是背答案。只有"没见过、没改过"的首次成绩,才代表这套引擎面对一个陌生指标时的真实表现。

至今累计测试的指标已超过两万个

五、通过率怎么才算数

单批 92% 不构成通过率的提升。判定规则是:

  • 连续三批(A、B、C),全部为新样本全部记首次运行成绩,且均达到目标值,才认定这个数字
  • 例如 A 批 92%、B 批 92%、C 批 91%,这一轮作废,通过率仍然记为原来的 90%,回到迭代流程,重新开始计轮

"作废"是字面意思:前两批的达标不折算、不累计、不取平均。

现在页面上的 98%,是按这套规则跑出来的。

这是这个数字的失败条件。

六、剩下的 2%

分两类,性质完全不同。

不会支持的

不是实现问题,是国内不存在对应的数据源:

  • 依赖海外非公开数据与基本面预测的脚本,如 request.financial()、海外情绪指标
  • 重度依赖海外品种跨市场数据的脚本,如海外冷门币种、全球衍生品代码
  • 依赖特殊图表类型的脚本(砖型图、卡吉图、点数图等图表本身可正常使用,但基于其构建的 Pine 脚本暂不支持)

这类脚本在国内合规数据体系中没有对应映射,不会改变。

仍在收敛的

少数长尾语法与运行时行为差异。每一轮批量测试仍能发现若干,修复后下一轮再出现若干——数量在减少,尚未归零。这部分持续修复,修复记录见更新日志。

如果你的指标无法正常运行,请发给我们。 批量测试的样本来自 TradingView 社区,用户自行编写的私有脚本不在样本范围内,这类反馈是发现长尾问题的重要来源。

七、兼容不等于结果完全相同

即使一个指标完全兼容,数值也可能与 TradingView 存在差异。

原因不在代码,在数据。A股 尤其明显:行情数值本身、复权算法、历史深度、周期分桶方式,国内平台与 TradingView 的处理并不一致。同一段计算逻辑吃进不同的数据,结果自然不同。

这是数据差异,不是兼容性问题。

TradeFlow 的数据处理向国内主流软件看齐。如果你主要交易 A股,这个方向对你更合适。

八、不必相信这个数字,自己跑一次

98% 描述的是一千个指标的整体情况,不是对某一个指标的保证。

免费试用期间全功能开放,包括 Pine 编辑器。把你最核心的那个指标粘贴进来运行一次,几分钟就有答案。