本文へスキップ

PineForge全201本、PyneCore 137本が「優秀」

中央値でPyneCoreより36倍高速

優秀良好中程度低水準最低水準取引一覧なし
公開コーパス公開コーパスの戦略100本非公開スクリプト非公開のコミュニティスクリプト101本(名称は非表示)

タップやドラッグで各点の値を確認できます。

出典:summary.md、pineforge-engine 6b45f510、2026-09-29のエンジン比較。

グラフのデータを表で見る

各線では戦略1本が1ステップに対応し、並び順はすべての線で共通です。線が落ち込んでいる箇所は優秀未満と判定された戦略で、落ち込みが深いほど評価ランクは低くなります。

評価ランクPineForgePyneCore
優秀201137
良好046
中程度012
低水準04
最低水準01
取引一覧なし01
計測方法

出典: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のリリースはこの計測より後で、リリース版では再計測していません。ベンチマークの詳細をご覧ください。

評価が分かれるケース

  1. analyzer-parity-percent-of-equity-sizing-01

    資産比率によるサイジング

    PineForge
    優秀(57 / 57)
    PyneCore
    良好(57 / 57)
  2. mtf-triple-tf-macd-hist-confluence-01

    マルチタイムフレーム(request.security)

    PineForge
    優秀(24 / 24)
    PyneCore
    中程度(22 / 22)
  3. ta-str-match-regex-filter-01

    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