Pine Script のバックテストツール比較 — wavealgo・TradingView・Backtrader
Pine strategy が通用するかを確かめる方法は 3 つある。TradingView は一度に 1 銘柄、Backtrader は手作業の移植が要る。wavealgo は固定された 18 セルのグリッドを 1 つだけ回すので、2 本のスクリプトが同じ物差しに乗る。
Pine Script の strategy を書いた、あるいは買ったとする。それが通用するかを確かめる現実的な方法は 3 つだ。TradingView の中でテストする。Python に移植して Backtrader か QuantConnect で回す。あるいは wavealgo の leaderboard に載っているスクリプトが全部通ったのと同じ固定グリッドにかける。3 つは別々の問いに答えるものであり、よくある間違いは、ある道具に別の道具のための問いをぶつけることだ。
TradingView の Strategy Tester が評価するのは、一度に 1 銘柄・1 時間軸だ。チャートを QQQ に切り替えて再実行し、次に EURUSD に切り替えて再実行することはできる。しかし固定されたユニバースも共通の手数料モデルもないので、集まった数字は他人のものと比較できない。その間に設定が動いていれば、先月の自分の数字とも比較できない。より根の深い問題は、この道具が既定で何を見せるかにある。一つのチャートでチューニングされた strategy は、まさにいま見ているそのチャートで最良に見える。
Backtrader と QuantConnect は逆のトレードオフをくれる。執行モデル、手数料体系、スリッページの仮定、ポートフォリオ単位のリスクは自分のものになる。代わりに、何かが動き出す前に Pine を関数単位で手作業で移植しなければならない。すでに真面目に扱うと決めた strategy なら、その作業は正しい作業だ。真面目に扱うかどうかを決める段階では、手順が逆である。
wavealgo は Pine を直接コンパイルする — Apache-2.0 のオープンソース Pine コンパイラ、resin だ — そしてスクリプトごとに動かないグリッドを 1 つだけ回す。6 市場 (BTCUSD, ETHUSD, SPX500, QQQ, GOLD, EURUSD) × 3 時間軸 (1H, 4H, 1D)、out-of-sample のみ、片道 0.05% の手数料、翌バー寄り付きでの約定、long-only、エントリーごとに equity の 100%、初期資金 100,000。この固定性こそが、これを使う理由のすべてだ。数か月離れて監査された 2 本のスクリプトが、それでも同じ物差しに乗る。
出てくるのは 0 から 100 の alpha スコア — edge が最大 40 点、安定性が最大 25 点、欠陥ペナルティが下は −25 点まで、再現性が最大 10 点 — と、4 つの判定のうち 1 つだ。Verified には合成 Sharpe 0.9 以上、かつ 18 セルのうち 12 セル以上が正であることが要る。Conditional は合成 Sharpe が 0 を超え、少なくとも 1 セルが 0.9 を超えている状態。どこかには存在するが、どこにでもあるわけではない edge だ。それ以外はすべて No alpha。Repaints はそもそもパフォーマンスの結果ではない。バックテストを走らせずともコンパイラが見つけられる、コード上の静的な指摘 — リペイントか先読み — である。
wavealgo が差し出すトレードオフは制御権だ。自分の手数料体系を設定することも、スリッページモデルを注入することも、ポートフォリオ単位の相関を計算することもできない。設定可能なグリッドは、誰にも比較できないスコアを生む。それでは公開する意味がなくなる。どのブローカーの手数料体系なら自分の資金で strategy が成立するか、が問いなら、正しい道具は Backtrader であり、初めからそうだった。
playground は別物なので、はっきり書いておく。ブラウザ内で Pine をコンパイルして実行し、チャートを描く。サーバーもアカウントもスコアもない。スコアリングは leaderboard を生成するオフラインのパイプラインであって、待っている間に playground がやることではない。サイト上のものはすべて無料で、有料プランも実行回数の上限もない。
まとめると、開発と目視は TradingView、スクリプトが自分で選べなかったグリッドでどうなるかを見るのは wavealgo、決めたあとで執行モデルを自分のものにする必要が出たら Backtrader。これらはたいてい競合しない。