Pine Script backtest 工具对比:wavealgo vs TradingView vs Backtrader
想知道一个 Pine 策略是否站得住脚,有三条路。TradingView 一次只测一个品种,Backtrader 要手工移植,wavealgo 则跑同一张固定的 18 格网格,让两个脚本落在同一把尺子上。
写过或买过一个 Pine Script 策略之后,要验证它是否站得住脚,现实的路只有三条。在 TradingView 里测。移植到 Python,用 Backtrader 或 QuantConnect 跑。或者送进 wavealgo leaderboard 上每个脚本都走过的那张固定网格。三者回答的是不同的问题,常见的错误是拿其中一个去问另一个才该回答的问题。
TradingView 的 Strategy Tester 一次只评估一个品种、一个周期。你可以把图表切到 QQQ 重跑一次,再切到 EURUSD 重跑一次,但既没有固定的标的池,也没有统一的费率模型,所以攒出来的数字跟别人的不可比——中间若动过某个设置,跟你自己上个月的也不可比。更深一层的问题在于这个工具默认呈现给你的东西:在某张图上调出来的策略,恰恰在你正看着的那张图上最好看。
Backtrader 和 QuantConnect 是相反的取舍。执行模型、费率表、滑点假设、组合层面的风险,全都归你。代价是在任何东西跑起来之前,你得把 Pine 一个函数一个函数手工移植过去。对于一个你已经决定认真对待的策略,这份功夫花得对。但要判断它值不值得认真对待,这个顺序就反了。
wavealgo 直接编译 Pine——用的是 resin,一个 Apache-2.0 协议下的开源 Pine 编译器——并且跑同一张不随脚本变动的网格:6 个市场(BTCUSD、ETHUSD、SPX500、QQQ、GOLD、EURUSD)× 3 个周期(1H、4H、1D),只用 out-of-sample 区间,单边 0.05% 费率,next-bar-open 成交,只做多,每次入场投入 100% equity,初始资金 100,000。它的全部说服力就在这个“不变”上。相隔数月审计的两个脚本,用的仍是同一把尺子。
产出是一个 0 到 100 的 alpha 分数——edge 最高 40 分,稳定性最高 25 分,缺陷扣分最低 −25 分,可复现性最高 10 分——外加四种 verdict 之一。Verified 要求综合 Sharpe 不低于 0.9,且 18 个单元中至少 12 个为正。Conditional 指综合 Sharpe 大于零,且至少有一个单元越过 0.9:edge 在某处存在,但并非处处存在。其余一律是 No alpha。Repaints 根本不是业绩结果——它是代码里的静态发现,是编译器不跑 backtest 就能看见的 repaint 或前视(look-ahead)。
wavealgo 让渡的是控制权。你不能设定自己的费率表,不能注入滑点模型,也不能跑组合层面的相关性。可配置的网格会产出谁也无法互相比较的分数,那就失去了公布分数的意义。如果你的问题是哪家券商的费率表能让一个策略在你的资金量上跑得通,那 Backtrader 才是对的工具,一直都是。
playground 是另一回事,值得说明白:它在你的浏览器里编译并运行 Pine,把图画出来。不走服务器,不需要账号,也不出分——打分是产出 leaderboard 的离线流水线,不是 playground 当场替你算的东西。站上所有内容都免费,没有付费档位,也没有次数限制。
所以:用 TradingView 开发和肉眼过一遍,用 wavealgo 看脚本在一张它无权挑选的网格上表现如何,等你已经决定下手、并且需要执行模型归自己掌控时再用 Backtrader。多数时候它们并不互相竞争。