我们为何打造 PineForge
421 笔交易通过 OCA 出场组平仓,笔笔一致。
点击或拖动图表,查看任一点的数值。
累计盈亏(USDT),ETHUSDT 15m,公开测试集 d75b4fa。两份交易列表
以表格形式查看图表数据
| 交易 | 出场时间(UTC) | TradingView | PineForge |
|---|---|---|---|
| 33 | 2025-04-30 14:30 | 129.88 | 129.88 |
| 57 | 2025-05-31 08:45 | 258.48 | 258.48 |
| 88 | 2025-06-30 11:15 | 188.84 | 188.84 |
| 112 | 2025-07-31 23:30 | 29.97 | 29.97 |
| 144 | 2025-08-30 03:15 | 140.67 | 140.67 |
| 175 | 2025-09-28 13:15 | 85.95 | 85.95 |
| 208 | 2025-10-30 20:45 | −14.07 | −14.07 |
| 249 | 2025-11-29 18:30 | −128.25 | −128.25 |
| 271 | 2025-12-29 14:45 | 162.43 | 162.43 |
| 312 | 2026-01-31 23:15 | 205.72 | 205.72 |
| 353 | 2026-02-28 08:15 | 172.19 | 172.19 |
| 385 | 2026-03-31 12:00 | 368.20 | 368.20 |
| 421 | 2026-04-29 21:45 | 305.73 | 305.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
- 一个浏览器中的工作区,用来回测、优化和对比,运行的就是你今天在本地就能运行的同一个引擎。候补名单用户会最先收到消息。
- 集市
- 卖家发布编译后的策略,自行设定许可证限制;买家在自己的数据上运行,看不到源码。