PineForge全201本、PyneCore 137本が「優秀」
中央値でPyneCoreより36倍高速
タップやドラッグで各点の値を確認できます。
出典:summary.md、pineforge-engine 6b45f510、2026-09-29のエンジン比較。
グラフのデータを表で見る
各線では戦略1本が1ステップに対応し、並び順はすべての線で共通です。線が落ち込んでいる箇所は優秀未満と判定された戦略で、落ち込みが深いほど評価ランクは低くなります。
| 評価ランク | PineForge | PyneCore |
|---|---|---|
| 優秀 | 201 | 137 |
| 良好 | 0 | 46 |
| 中程度 | 0 | 12 |
| 低水準 | 0 | 4 |
| 最低水準 | 0 | 1 |
| 取引一覧なし | 0 | 1 |
グラフのデータを表で見る
中央90%:15倍〜131倍
| 戦略 | 高速化率 |
|---|---|
| Anvil percent costs | 32倍 |
| VCP: Vol z-score anomaly | 36倍 |
| Dual stop source order short first | 23倍 |
| OBV EMA cross | 25倍 |
| 非公開スクリプト101 | 73倍 |
| 非公開スクリプト125 | 35倍 |
| 非公開スクリプト150 | 29倍 |
| 非公開スクリプト175 | 60倍 |
| 非公開スクリプト201 | 49倍 |
計測方法
出典:pineforge-engineのコミット6b45f510にあるbenchmarks/results/summary.md。2026-09-29にエンジン35db01c8とPyneCore 6.10.3で実施したエンジン比較です。エンジンv1.10.0のリリースはこの比較より後で、評価ランクはリリース版で再計測していません。
このページの数値はすべて、オープンソースのpineforge-engineリポジトリにあるエンジン比較から得たものです。201本の戦略を同じETHUSDT 15分足フィード(53,929バー)で実行し、各エンジンの取引を、TradingViewがエクスポートした取引一覧と照合して評価しています。公開コーパスの100本は、クリーンクローンからbash benchmarks/run_all.shで再現でき、APIキーは必要ありません。
評価ランクは、エンジンの標準評価基準(scripts/verify_corpus.py)に従います。優秀は、取引数が同じで、90パーセンタイルでエントリー価格と決済価格の差が0.01%以内、損益の差が1%以内、かつTradingViewの取引の99%以上が一致していることを指します。良好では、取引数の差は6%未満、エントリー価格は0.1%以内、決済価格は0.5%以内、損益は100%以内まで許容し、95%以上の一致が必要です。trail_*で決済する戦略には本番用プロファイルを適用し、決済価格は0.05%以内、損益は100%以内とします。その下に、中程度、低水準、最低水準が段階的に続きます。「優秀」では、時刻、価格、方向が完全に同じところに TradingView が二つ以上の異なるエントリー Signals を示す場合、エンジンもそこに同じ数の個別のエントリーを示します(個別エントリーの識別)。
vectorbt: vectorbtへ手作業で移植した13本の戦略. 優秀 4良好 6中程度 2低水準 1
両エンジンで計測した200本の戦略を1本ずつマークで示し、対数スケール上で各戦略の高速化率どおりの位置に置いています。 計測方法:PineForgeはGoogle Benchmarkでインプロセス計測し、バーマグニファイアを有効にしています。PyneCore 6.10.3はサブプロセスとして計測しているため、ウォールクロック時間にインタプリタの起動時間が含まれます。マシンはUbuntu 24.04のAWS c7a.8xlarge(AMD EPYC 9R14、32コア、SMT無効)で、計測プロセスはそれぞれ特定のコアに固定しています。エンジンは35db01c8、計測日は2026-09-29、データはETHUSDT 15分足(53,929バー)のフィード1本です。エンジンv1.10.0のリリースはこの計測より後で、リリース版では再計測していません。ベンチマークの詳細をご覧ください。
評価が分かれるケース
analyzer-parity-percent-of-equity-sizing-01
資産比率によるサイジング
- PineForge
- 優秀(57 / 57)
- PyneCore
- 良好(57 / 57)
mtf-triple-tf-macd-hist-confluence-01
マルチタイムフレーム(request.security)
- PineForge
- 優秀(24 / 24)
- PyneCore
- 中程度(22 / 22)
str.matchによる正規表現フィルター
- PineForge
- 優秀(1,916 / 1,916)
- PyneCore
- 低水準(1,514 / 1,917)
計測方法
PyneCore 6.10.3は、201本中63本が優秀未満と判定され、1本では取引一覧を出力しません(PyneSysコンパイラがソースを受け付けない戦略です)。ベンチマークレポートでは、その原因を追跡しています。32本は、損益の基準だけ(16本)または取引数の基準だけ(16本)で不合格ですが、約定はTradingViewと一致しています。PyneCoreのブローカーはフィードの最初のバーから、つまりTradingViewの期間が始まる5か月前から取引します。そのため、資産比率によるサイジングを通じて、TradingViewには存在しない損益が複利で積み上がります。また、期間の開始時点ですでにポジションを保有していると、期間の端で取引が1件増えます。PyneCoreの以前のリリースでは一部しか再現できなかったマルチタイムフレームのスクリプト9本のうち、4本はrequest.securityの修正によって優秀と判定されるようになりました。ほかの4本は、今もTradingViewの履歴の41.6〜91.7%の再現にとどまっています。グリッドボット3本はFIFO順の決済でずれが生じ、str.matchによる正規表現フィルターの戦略は低水準と判定され、残りはそれ以外の基準で不合格です。公開コーパスから3つの例を紹介します。
analyzer-parity-percent-of-equity-sizing-01: PyneCoreの約定はTradingViewと一致しており、エントリー価格と決済価格は90パーセンタイルで合致しています。それでも損益が90パーセンタイルで2.05%ずれるのは、PyneCoreのブローカーがTradingViewの期間より5か月早く取引を始めたため、資産比率によるサイジングを通じて、TradingViewには存在しない損益がすでに複利で積み上がっていたからです。
mtf-triple-tf-macd-hist-confluence-01: TradingViewがエクスポートした取引は24件です。PyneCoreは39件を出力し、両方の一覧がカバーする期間にあるTradingViewの取引22件とは、22件すべてが一致しています。再現できているのは、TradingViewの履歴の91.7%です。PineForgeの24件の取引は優秀と判定されています。
ta-str-match-regex-filter-01: この戦略はstr.matchでエントリーを絞り込みます。比較期間内で、TradingViewの1,917件に対してPyneCoreは1,514件を出力しており、取引数の差は21%、TradingViewの取引との一致率は51.2%です。PineForgeは、自身の比較期間内の1,916件すべてが一致しています。
各エンジンが向いている用途
3つのランタイムはいずれもオープンソースです。PineForgeとPyneCoreはstrategy.*の注文で戦略を実行します。PineTSは0.9.17以降、strategy.*名前空間を提供していますが、エンジン比較ではPineTSでインジケーターのみを実行しています。比較用のハーネスに、PineTSで戦略を実行するランナーがないためです。戦略をネイティブコードにコンパイルするのはPineForgeだけです。PineForgeとPineTSはお手元のマシンでPineを変換し、PyneCoreはホスト型サービスであるPyneSysコンパイラを通じて変換します。
PineForge
- TradingViewと同じ取引結果が必要なとき。PineForgeは、エンジン比較の201本すべてが優秀と判定されています。
- 大量のバックテストを実行するとき。戦略あたり、中央値でPyneCoreより36倍高速です(PineForgeはインプロセス、PyneCoreはインタプリタの起動時間を含むサブプロセスとして計測)。
- エンジンを組み込みたいとき。Apache-2.0のC++17ランタイムで、追加のみで既存を変更しない安定したC ABIを備えています。
- AIエージェントからバックテストするとき。無料のホスト型MCPエンドポイント、またはお手元のデータ向けのローカルDocker MCPサーバーを使えます。
PyneCore
- 戦略をPythonで書きたいとき。PyneCoreはPine風のPythonをバーごとに実行し、同じコードの中でPythonのデータ処理ライブラリや機械学習ライブラリを使えます。
- インジケーターやプロットの値が必要なとき。PyneCoreはこれらを計算しますが、PineForgeはindicator()スクリプトを受け付けず、何も描画しません。プロット、テーブル、見た目だけを変えるセッター、アラートは受け付けますが効果はなく、描画オブジェクト(line、box、label、linefill、chart.point)は戦略から読み取れるデータとして保持されます。
- Apache-2.0のランタイムを使いたく、ホスト型サービスであるPyneSysコンパイラでPineを変換することに抵抗がないとき。PineForgeのエンジンはApache-2.0ですが、トランスパイラはソースコード公開型(PineForge Source License 1.2、codegen 1.3.0以降)で、OSIの定義するオープンソースではありません。
エンジン比較を再現する
エンジン比較のうち公開されている半分、つまり公開コーパスの100本は、クリーンクローンから再現できます。入力はすべてベンチマークアセットにコミット済みで、APIキーも不要です。非公開のコミュニティスクリプト101本はTradingViewの規約により再配布していないため、こちらの半分はPineForgeの外では再実行できません。
# 1. エンジンと公開ベンチマークアセットをクローン
git clone https://github.com/pineforge-4pass/pineforge-engine.git
cd pineforge-engine
git submodule update --init benchmarks/assets
# 2. ほかのエンジン用のPythonとNodeのツールをインストールしてからビルド
(cd benchmarks && uv sync --python 3.12 && npm install)
cmake -B build -S . -DPINEFORGE_BUILD_TESTS=ON -DPINEFORGE_BUILD_BENCH_STRATEGIES=ON -DPINEFORGE_BUILD_SPEED_BENCH=ON
cmake --build build --target pineforge bench_strategies pineforge_bench -j
# 3. すべてのエンジンをTradingViewと照合して評価
SKIP_BUILD=1 SKIP_SPEED=1 JOBS=8 bash benchmarks/run_all.sh
# 4. 結果を確認:このページの集計の元になった公開コーパス100本分の行
cat benchmarks/results/summary.md