ツール

Claude Code から 90 秒で Pine 戦略をバックテスト

@pineforge/codegen-mcp サーバーの手順:npx 一行で導入し、Claude に Pine のトランスパイルを依頼、Docker でバックテストしてトレード一覧を読み取る。OHLCV はマシンから出ません。

読了 約7分#mcp#ai#claude#cursor#tooling

PineForge の codegen は長らく curl の向こう側にありましたが、今週から Model Context Protocol サーバーでも届きます。MCP 対応クライアント——Claude Desktop、Claude Code、Cursor、Continue.dev、それ以外も含め——の中からバックテストまで一気通貫で回せます。

この記事は、そのエンドツーエンドが実際どう見えるかのウォークスルーです。空のリポから JSON のバックテストレポートまで、壁時計でだいたい 90 秒。初回の Docker イメージ pull は別枠です。

サーバーが実際にすること

npm の @pineforge/codegen-mcp は、ローカルの stdio ブリッジとして薄く載っています。AI クライアントに 4 つのツールを見せます。

Tool実行場所コスト
transpile_pineホスト済み codegen APIクォータ消費(コンパイルエラー時は返金)
get_quotaホスト済み codegen API無料
backtest_pineローカルの Docker デーモン1 カウント(内訳にトランスパイル)
pull_engine_imageローカルの Docker デーモン無料

ここで一度立ち止まってほしいのが プライバシー面です。Pine のソースはホスト側の codegen(codegen.pineforge.dev)に送られます。OHLCV の CSV は送られません。 backtest_pine は生成された strategy.cpp を、あなたが指したファイルに対してローカル Docker で実行します。CSV は読み取り専用ボリュームとしてコンテナにマウントされるだけです。ランタイムコンテナから外向きネットワークはありません。データはノートパソコンから出ません。

インストール(ワンコマンド)

npx -y @pineforge/codegen-mcp

以上です。初回実行時にパッケージが落ち、TypeScript をその場でコンパイルして MCP を stdio で話し始めます。グローバルインストールもビルド手順も不要です。

用意しておくものは三つ:

  • Node ≥ 20(最近の macOS / Linux ならだいたい足ります)
  • ローカルで動いている Docker(backtest_pinedocker run を叩きます)
  • pineforge.dev のウェイトリスト経由で取った PineForge API キー(pf_…

Claude Desktop に繋ぐ

設定ファイルを開きます。

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

mcpServers の下にエントリを足します。

{
  "mcpServers": {
    "pineforge-codegen": {
      "command": "npx",
      "args": ["-y", "@pineforge/codegen-mcp"],
      "env": {
        "PINEFORGE_API_KEY": "pf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Claude Desktop を再起動すると、サイドバーの「利用可能なツール」にサーバーが出ます。最初のツールコールでホスト codegen に当たり、ランタイム用イメージの docker pull が走ります——約 250 MB、一回だけのダウンロードです。

Claude Code(CLI)

すでにターミナルにいるなら、こちらの方が短いです。

claude mcp add pineforge-codegen \
  --transport stdio \
  --env PINEFORGE_API_KEY=pf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
  -- npx -y @pineforge/codegen-mcp

このプロジェクトでは claude がサーバーを知っています。セッションを開き直すと 4 ツールが使えます。

Cursor

Settings → MCP → New MCP Server → 上と同じ JSON ブロックを貼ります。Cursor がライフサイクルを面倒を見ます。

文章で駆動する

一度配線できれば、対話は普通の日本語(英語)プロンプトです。やや圧縮した実例:

あなた: ./strategy.pine に Pine v6 の戦略があり、./eth_15m.csv に 7 日分の 15 分足 ETHUSDT がある。バックテストして Sharpe と最大ドローダウンを教えて。

Claude: backtest_pine をそのファイルで実行します…
[ツール呼び出し: backtest_pine({ source: "...", ohlcv_csv_path: "./eth_15m.csv" }) が約 3 秒で返る]
完了。7 日で 49 トレード。純損益 −$190.85、Sharpe 0.21、最大 DD $312。3 敗目でショートに入ってから立て直せていません——そのエントリー条件を掘りますか?それとも閾値をスイープしますか?

これが生産的な面です。モデルはツール説明を持ち、backtest_pine の返り値を知っているので、あなたが curl を打たなくても次の呼び出しまで繋げます。「Pine を編集 → 保存 → TradingView に切り替え → チャート再読み込み → 数字を読む → エディタに戻る」という摩擦が、ひとつの会話に潰れます。

レポートの形

backtest_pine はスタンドアロン Docker イメージと 同じ JSON 形状を返します。サマリーブロック:

{
  "engine": "pineforge",
  "summary": {
    "total_trades": 49,
    "net_pnl": -190.85,
    "max_drawdown": 312.0,
    "sharpe": 0.21,
    "profit_factor": 0.78,
    "win_rate": 0.43
  },
  "trades": [
    /* タイムスタンプ・価格・PnL を含む 49 件 */
  ],
  "elapsed_seconds": 0.0042,
  "_meta": {
    "strategy_cpp_bytes": 5079,
    "image": "ghcr.io/pineforge-4pass/pineforge-engine:latest"
  }
}

モデルは構造全体を握っています。「最悪のトレードは?」のような追撃にも、trades[] を自分で走査すれば答えられ、二度目のツールコールは不要です。

クォータの意識

codegen API を使う会話はすべてクォータにカウントされます。高コストなパラメータスイープの前に残量を確認するために get_quota があります。無料枠は 月 100 回のトランスパイル——趣味や CI のスモークには十分、反復最適化ループをガッツリ回すには足りない場面もあります。

実用的なパターン:プロジェクトの CLAUDE.md(またはそれに相当するもの)に、
「戦略を最適化すると言われたら、5 回を超えるトランスパイルを蹴る前に get_quota を呼び、残り予算を報告せよ
といったヒントを書いておく。

サーバーに わざと入れていないもの

  • ライブ発注はない。 サーバーは戦略とデータに対して読み取り専用です。ブローカーには接続しません。実運用は別問題です。
  • データ取得はない。 OHLCV はあなたが持ってくる。取引所やデータベンダーからサーバーが引っ張ってくることはありません——バイトの出所と何を回すかはあなたが決めます。
  • 呼び出し間の状態はない。backtest_pine は新しい Docker コンテナです。永続キャッシュも共有セッションもありません。

意図したスコープ制限です。監査しやすく、失敗モードを単純に保つためです。

ここから先が面白くなるところ

手作業だと面倒なパターンが、そのまま立ち上がります。

  • 「ストップを締めて再実行」 — モデルが Pine の数字を一ついじり、backtest_pine を再度叩いて Sharpe を比較。あなたが飽きるまでループ。
  • 「過去 7 日じゃなく 30 日で」 — CSV を差し替えるだけ。フィルタ UI を這い回らなくていい。
  • 「ここの感度は?」 — 入力をレンジでスイープして Sharpe を集め、小さな Markdown 表を出す。反復はモデルが担当。
  • 「もう一本の戦略と比べて」backtest_pine を二回、レポートを並べる。

新しいインフラは要りません。モデル + 四つのツール + あなたの文章だけで出てきます。

試す

パッケージはオープンソースです。サーバー本体は 座って一読できるサイズなので、線路の上に何が流れるか自分で監査したければ向いています。