跳到正文

我们为何打造 PineForge

421 笔交易通过 OCA 出场组平仓,笔笔一致。

−2000200
2025年7月2025年10月2026年1月2026年4月
USDT

点击或拖动图表,查看任一点的数值。

累计盈亏(USDT),ETHUSDT 15m,公开测试集 d75b4fa。两份交易列表

以表格形式查看图表数据
每月最后一笔交易时的累计盈亏(USDT)
交易出场时间(UTC)TradingViewPineForge
332025-04-30 14:30129.88129.88
572025-05-31 08:45258.48258.48
882025-06-30 11:15188.84188.84
1122025-07-31 23:3029.9729.97
1442025-08-30 03:15140.67140.67
1752025-09-28 13:1585.9585.95
2082025-10-30 20:45−14.07−14.07
2492025-11-29 18:30−128.25−128.25
2712025-12-29 14:45162.43162.43
3122026-01-31 23:15205.72205.72
3532026-02-28 08:15172.19172.19
3852026-03-31 12:00368.20368.20
4212026-04-29 21:45305.73305.73
测量方法

oca-exit-bracket-internal-cancel-01 通过 OCA 组出场。TradingView 的交易记录是粗线,PineForge 的是嵌在其中的细线:两份记录中各 421 笔交易的平仓时间都相同,累计盈亏精确到分也完全相同。

我们起步时并没有做到严格一致。如今公开测试集有 312 套策略:311 套优秀,另有 1 例已声明的异常;基于引擎 main 分支的 2026‑11‑03 基线,对照 TradingView 自己的交易,9 个市场上的 7,989 个回测 100.00% 评为优秀或良好。差距不是靠多写代码生成逻辑补上的,而是靠逐一追查偏差补上的。

来源:pineforge-engine 中的 scripts/check_corpus_parity.sh,提交 35db01c8,第 86 行;pineforge-corpus 提交 d75b4fa

来源:内部评测记录(未公开),基线 pineforge-parity-baseline-20261103-release-tag-3d8717c4(快照 sha256 3d8717c4…73ad,总体 cf857209…b062);脚本来源:pineforge-engine README.md(d1d18867);交易数:pineforge-release facts.json。

这些工作大多围绕 TradingView 对「exit / fill / trail」的自然语言定义展开;文档给 API,语义藏在成交列表 diff 里 —— 我们就一条条对齐。

公开测试集中仅剩的一个例外是 anomaly-equity-mirror-strategy-equity-01。它被声明为异常,因此测试集门禁将其记为异常,而不是失败。测试集备注记录了最初的诊断:在恰好 1 倍权益时,TradingView 的保证金检查放行了部分超出权益的入场,却拒绝了部分低于权益的入场。这一诊断正在复核:2026‑11‑03 一致性基线将这个探针评为优秀。

为何执着离线可复现

绝大多数 Pine 策略活在 TradingView —— 图表迭代快、社区厚,这没错。缺的是离线运行时:锁不住引擎版本,CI 里跑不了同一批成交,换机器无法做到比特级一致的复盘。

刷灵感无所谓;要上真金白银,就得要审计链路。我们要弥合「浏览器里看到一个数」与「手里有一条版本化的成交记录」之间的鸿沟 —— 而且不抛弃 Pine 语法。

为什么不全力投入 PyneCore

PyneCore 是最具雄心的开源 PineScript 引擎,我们自己也把它当作第二意见。PineForge 之所以是独立的引擎,有两个原因:

运行时模型
PyneCore 运行的是经 PyneSys 编译器转换成 Python 的 Pine。PineForge 则把 Pine 转译为 C++,再编译成 .so。速度不同,一致性上的取舍不同,分发方式也不同。两者都没有错,但不把两边都重写一遍,就没法把一方直接嫁接到另一方上。
分发方式
编译后的 .so 可以让卖家在不公开源码的情况下分发策略:这是集市的构想,仍在规划中,尚未开发。这与 PyneCore 是不同的产品。

我们把 PyneCore 当作第二个参照来源:引擎仓库中的基准测试(引擎 main 分支)在同样的 201 套策略上,对照 TradingView 为 PineForge 和 PyneCore 评级。两个引擎结果不一致的地方,差异本身就指明了该从哪里查起。

来源:pineforge-engine 中的 benchmarks/results/summary.md 和 indicator_comparison.md,提交 6b45f510

为何不扩展 Backtrader

Backtrader 是 Python 世界的工作马;形状不对。它是通用回测框架,而 Pine 自带 request.security() 前瞻、oca_name、子 bar 撮合 —— 写再多 Python 也模拟不像。

再者 BT 策略本体仍是 .py 明文;要做二进制集市必须多一层可信转译 —— 这层不在其模型里。

接下来

规划中

参数优化
托管式的策略输入参数搜索,按你选定的目标寻优。
Studio
一个浏览器中的工作区,用来回测、优化和对比,运行的就是你今天在本地就能运行的同一个引擎。候补名单用户会最先收到消息。
集市
卖家发布编译后的策略,自行设定许可证限制;买家在自己的数据上运行,看不到源码。

引擎