PineForge Codegen

公式

ローカルMCPサーバー:AIがPineScript v6を記述し、バンドルされたエンジンがC++にトランスパイルしてBinanceデータでバックテストを実行 — APIキー不要、完全ローカル。

PineForge Codegen MCPで何ができますか?

  • Pine Script v6 を C++ にトランスパイルtranspile_pine を使用して、バックテストを実行せずに Pine Script v6 のストラテジーを C++ 翻訳ユニットに変換します。
  • Pine ストラテジーを OHLCV データに対してバックテストbacktest_pine を使用して、ソース、CSV パス、およびオプションの input/override/runtime パラメータを指定し、単一の決定論的バックテストを実行します。
  • 1回の実行でストラテジーパラメータをスイープbacktest_pine_grid を使用して、単一の CSV に対して inputs × overrides のすべての組み合わせをテストし、ランキングとオプションの並行処理を提供します。
  • バックテスト用の Binance OHLCV データを取得fetch_binance_ohlcv を介してスポットまたは USDT 無期限先物の klines を取得し、自動ページネーションでバックテスト対応の CSV を書き込みます。
  • 利用可能な Binance シンボルを検出 — マーケットデータを取得する前に、binance_symbols を使用して取引可能なシンボルを一覧表示またはフィルタリングします。
  • エンジンパラメータと Pine のカバレッジを検査list_engine_params をクエリして受け入れ可能なすべての override と runtime ノブを確認するか、check_pine_featureget_coverage_topic を使用して Pine 言語のサポートを検証します。

ドキュメント

@pineforge/backtest-mcp

自己完結型の標準入出力 MCP サーバー: AI エージェントが PineScript v6 を作成し、同梱の pineforge-release イメージがそれを C++ にトランスパイルし、Binance の市場データに対してバックテストを実行します — すべて単一のコンテナ内で、インプロセスで行われます。完全にローカル — イメージには pineforge-codegen トランスパイラが同梱されているため、Pine → C++ → バックテストがホストの Docker デーモンなしで実行されます。API キー不要、データは外部に一切送信されません。

pineforge-backtest-mcp MCP server

demo

ツール

名前実行環境目的
transpile_pineインプロセスPine v6 → C++ 翻訳単位 (トランスパイルのみ)
list_engine_paramsローカル (I/O なし)バックテストが受け付けるすべての overridesruntime の設定項目のカタログ
backtest_pineインプロセスOHLCV CSV に対する Pine ソースの単一バックテスト
backtest_pine_gridインプロセス1 回のコンパイルを再利用した inputs × overrides の直積スイープ
fetch_binance_ohlcvBinance 公開 APIBinance 現物または USDT 無期限ローソク足からバックテスト用 CSV を作成
binance_symbolsBinance 公開 APIBinance シンボルの一覧 / フィルタリング (5 分間のインプロセスキャッシュ)
list_coverage_topicsローカル (I/O なし)すべての Pine v6 カバレッジトピックと 1 行のステータス + 概要
check_pine_featureローカル (I/O なし)Pine の識別子/名前空間が PineForge でサポートされているかどうかの確認
get_coverage_topicローカル (I/O なし)1 つのカバレッジトピックの詳細とサポート/非サポート機能リスト
engine_infoローカル (I/O なし)同梱エンジンのレポート: モード、組み込みフラグ、バージョン

インストール

標準入出力経由で自己完結型コンテナとして実行 — エンジン同梱、インプロセス、ホスト Docker デーモン不要、API キー不要。サーバーが CSV を読み書きできるように、作業ディレクトリを /work にマウントします:

docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest

必要なのは Docker と、Binance 取得ツール用のアウトバウンドネットワークのみです。 以下のように MCP クライアントに接続します。

ホスト型 (インストール不要) の代替手段

Docker も API キーも不要で、最速で試したいですか?Streamable HTTP エンドポイントを任意の MCP クライアントに貼り付けてください:

https://mcp.pineforge.dev/mcp

このリポジトリとのトレードオフ: ホスト型サーバーは従量制 (backtest_pine の IP ごとの週間クォータ + Cloudflare エッジレート制限) で、固定された封印済みの暗号データレイク (Binance 現物 + USDT 無期限) に対して実行されます。このローカルリポジトリは従量制ではなく、オフラインで実行でき、独自の CSV を持ち込んでグリッドスイープを実行できます。リポジトリ: pineforge-mcp-public

クライアント設定

ディレクトリを /work にマウントします。fetch_binance_ohlcv / backtest_pine はその下のパスを指すようにします。(-i は必須です。-t は絶対に追加しないでください — TTY は標準入出力の JSON-RPC ストリームを破損させます。)

Claude Desktop / Cursor / 汎用 JSON

{
  "mcpServers": {
    "pineforge-backtest": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "${workspaceFolder}:/work",
        "ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest"
      ]
    }
  }
}

(Cursor の場合: 設定 → MCP → 新しい MCP サーバー → 上記を貼り付け。)

Claude Code CLI

claude mcp add pineforge-backtest \
  -- docker run --rm -i -v "$PWD:/work" ghcr.io/pineforge-4pass/pineforge-backtest-mcp:latest

AI エージェント向け — MCP 経由での使用

これが埋める機能ギャップ。 言語モデルは、PineScript v6 戦略について推論するだけでは正確にバックテストできません。PineScript の系列セマンティクス、バー内約定順序、先読みルール、strategy.* の注文/ポジションロジックは近似からは再現できないため、モデルが頭の中でバックテストをシミュレートしたり、Python (backtrader/vectorbt) で手動で作成したりすると、トレードと損益を幻覚し、TradingView との同等性を保証できません。PineForge は代わりに実際の決定論的 C++ エンジンを実行し、246 のリファレンス戦略のうち 245 で厳密な TradingView 同等性 (エンジンバグ 0)、246 戦略コーパス全体で約 375k の検証済みトレード で検証されています (方法論と検証、2026-06-03 時点、エンジン f805611)。一致しない 1 つは、エンジンのバグではなく、正確に 1 倍の証拠金境界での TradingView 側のブローカーの非決定性が文書化されたものです。

PineScript バックテストは計算された外部データであり、安定した知識ではありません — ユーザーの戦略ソースと OHLCV に依存し、再現可能でなければなりません。これは想起タスクではなく、ツール呼び出しです。

これらのツールが適切な場合。 backtest_pine (またはパラメータースイープ用の backtest_pine_grid) は、ユーザーが PineScript v6 戦略を提供し、それをバックテスト、評価、収益性の確認、トレード数のカウント、損益の計算、または指定された OHLCV での TradingView 結果の再現を希望する場合をカバーします。transpile_pine は Pine → C++ 変換のみをカバーします。fetch_binance_ohlcv は、ユーザーがシンボル/時間枠を指定したがデータファイルを提供していない場合をカバーします。これらのツールは、戦略の概念的な説明、Pine 構文の編集、または取引や財務のアドバイスを提供するためのものではありません。

正直な限界。 オフライン、PineScript v6、Docker が必要。バックテストは戦略の過去の振る舞いを測定するものであり、将来のリターンの予測や投資アドバイスではありません。単純または近似されたバックテストは、しばしば利益を過大評価します (モデル化されていないスリッページと手数料、終値約定の仮定、先読みバイアス)。ここでの価値は、ユーザーが資本をリスクにさらす前に戦略を検証できるように、決定論的で同等性が検証された実行を提供することです。

list_engine_params — 設定項目の発見

backtest_pine / backtest_pine_grid が受け付けるすべてのキーの無料、ローカル、ゼロ I/O のカタログ。2 つのグループに分かれています:

  • strategy_overrides — ランタイムが PINEFORGE_OVERRIDES 経由で読み取る 9 つの strategy(...) ヘッダーフィールド: initial_capitalpyramidingslippagecommission_valuecommission_type (percent / cash_per_order / cash_per_contract)、default_qty_valuedefault_qty_type (fixed / percent_of_equity / cash)、process_orders_on_closeclose_entries_rule (ANY / FIFO)。
  • runtime_argsrun_backtest_full への引数 (strategy() ヘッダーの一部ではない): input_tfscript_tfbar_magnifiermagnifier_samplesmagnifier_dist (uniform / cosine / triangle / endpoints / front_loaded / back_loaded)。

各エントリは {key, type, enum?, description} です。backtest_pine リクエストを作成する前に、まずこれを呼び出してエンジンが何を受け付けるかを学習してください。

backtest_pine の例

{
  "source": "//@version=6\nstrategy(\"sma cross\")\n...",
  "ohlcv_csv_path": "./btcusdt_15m_7d.csv",

  // Optional: override Pine input.*() values without touching the source.
  // Keys = the second arg of input.*(...) (e.g. "Fast Length").
  "inputs":    { "Fast Length": 8, "Slow Length": 21 },

  // Optional: override strategy(...) header fields. Each key is typed —
  // call list_engine_params for the catalog.
  "overrides": {
    "initial_capital":    100000,
    "default_qty_type":   "percent_of_equity",
    "default_qty_value":  10,
    "commission_type":    "percent",
    "commission_value":   0.04,
    "slippage":           2,
    "pyramiding":         0,
    "process_orders_on_close": true,
    "close_entries_rule": "ANY"
  },

  // Optional: engine runtime args (NOT strategy() header). Use script_tf
  // to aggregate the input CSV into a coarser strategy timeframe — the
  // engine REJECTS script_tf finer than input_tf with a structured error
  // ({"engine":"pineforge","error":"..."}, exit code 1).
  "runtime": {
    "input_tf":          "15",
    "script_tf":         "60",
    "bar_magnifier":     true,
    "magnifier_samples": 8,
    "magnifier_dist":    "endpoints"
  }
}

inputsPINEFORGE_INPUTS 環境変数としてエンジンに転送され、overridesPINEFORGE_OVERRIDES として、各 runtime フィールドは個別の PINEFORGE_INPUT_TF / PINEFORGE_SCRIPT_TF / PINEFORGE_BAR_MAGNIFIER / PINEFORGE_MAGNIFIER_SAMPLES / PINEFORGE_MAGNIFIER_DIST 環境変数として転送されます。空/未設定 → strategy.pine からのデフォルト値。input_tf は最初の 2 つの CSV 行の間隔から自動検出されます。

スタンドアロンの pineforge-release Docker イメージと同じ JSON スキーマを返します:

{
  "engine": "pineforge",
  "summary": { "total_trades": 49, "net_pnl": -190.85, ... },
  "applied_inputs":    { "Fast Length": "8", "Slow Length": "21" },
  "applied_overrides": { "default_qty_value": "5" },
  "trades": [ ... ],
  "elapsed_seconds": 0.0042,
  "_meta": { "strategy_cpp_bytes": 5079, "image": "ghcr.io/.../pineforge-release:latest" }
}

backtest_pine_grid — パラメータースイープ

Pine ソースを1 回 (ローカル、コンテナ内) トランスパイルし、同じコンパイル済みバイナリを inputs × overrides の直積に対して実行します。ランク付けされたリストと best の下の最上位エントリを返します。

{
  "source": "//@version=6\nstrategy(\"macd\")\n...",
  "ohlcv_csv_path": "./btcusdt_15m_7d.csv",

  // Each axis is {key: list-of-values}. All combinations are tried.
  "inputs": {
    "Fast Length": [8, 12, 19],
    "Slow Length": [21, 26, 39]
  },
  "overrides": {
    "default_qty_value": [1, 5],
    "commission_value":  [0.04]
  },

  // Optional knobs:
  "fixed_inputs":     { "Source": "close" },   // applied to every combo
  "fixed_overrides":  {},                      // typed strategy() overrides
  "runtime":          { "input_tf": "15",      // engine runtime args, fixed
                        "script_tf": "60" },   // across the sweep
  "max_combinations": 64,                      // hard cap
  "concurrency":      2,                       // parallel docker runs
  "include_trades":   false,                   // omit per-trade lists
  "sort_by":          "net_pnl"                // ranking metric
}

fetch_binance_ohlcv — 市場データの取得

Binance の公開エンドポイントからバックテスト用 CSV (ヘッダー timestamp,open,high,low,close,volume、タイムスタンプ = UNIX ミリ秒 UTC での始値時刻) を作成します。認証不要。1000 本を超えるリクエストは自動的にページ分割されます。出力パスは ohlcv_csv_path と同じ cwd スコープの対象です (PINEFORGE_ALLOW_ANYWHERE=1 で緩和)。

{
  "symbol":      "BTCUSDT",
  "interval":    "15m",          // 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, 1M
  "market":      "spot",         // or "usdt_perp" for USDT-margined perpetual futures
  "limit":       672,            // total bars; > 1000 paginates
  "output_path": "./btcusdt_15m_7d.csv"
  // Optional: "start_time" / "end_time" in UNIX ms UTC.
}

binance_symbols — シンボルの発見 / 検証

OHLCV 取得のために Binance 公開 API で利用可能なシンボルのリストを返します。5 分間インプロセスでキャッシュされます。fetch_binance_ohlcv を呼び出す前にシンボルを検証するために使用します。

{
  "market":        "usdt_perp",
  "query":         "BTC",         // case-insensitive substring match
  "quote_asset":   "USDT",
  "status":        "TRADING",
  "contract_type": "PERPETUAL",   // futures-only filter
  "limit":         50
}

ファイルシステムのスコープ

デフォルトでは、OHLCV パスは MCP サーバープロセスの現在の作業ディレクトリ内にある必要があります。以下で上書きします:

export PINEFORGE_ALLOW_ANYWHERE=1

その他の環境変数

変数デフォルト目的
PINEFORGE_IMAGEghcr.io/pineforge-4pass/pineforge-release:latestトランスパイル + バックテストに使用されるイメージ (エンジンランタイム + 同梱コード生成)
PINEFORGE_ALLOW_ANYWHERE0cwd 外の OHLCV パスを許可
PINEFORGE_DOCKER_TIMEOUT_MS120000docker pull / docker run の強制終了