pineforge
開始使用
工具鏈

用 Claude Code 在 90 秒內回測 Pine 策略

實作 @pineforge/codegen-mcp:一行 npx 安裝,請 Claude 把你的 Pine transpile,再用 Docker 跑回測並讀交易清單。OHLCV 不離開本機。

約 7 分鐘閱讀#mcp#ai#claude#cursor#tooling

幾個月來,PineForge codegen 一直躲在 curl 後面;從這週起,它也在 Model Context Protocol 伺服器背後——你可以在支援 MCP 的用戶端裡(Claude Desktop、Claude Code、Cursor、Continue.dev 等)把回測一路跑完。

這是一篇端到端 walk-through:從空儲存庫到拿到 JSON 回測報告,牆上時鐘大約 90 秒,外加首次 docker pull 的一次性成本。

伺服器到底做什麼

npm 上的 @pineforge/codegen-mcp 是一層很薄的本地 stdio 橋。它向 AI 用戶端暴露 四個工具

Tool執行位置成本
transpile_pine託管 codegen API占用配額(編譯失敗會退回)
get_quota託管 codegen API免費
backtest_pine本機 Docker計 1 次(內含那次 transpile)
pull_engine_image本機 Docker免費

值得停一下的是 隱私面。Pine 原始碼會送到託管 codegen(codegen.pineforge.dev)。OHLCV CSV 不會送。 backtest_pine 在你本機 Docker 裡用產生的 strategy.cpp 對著你指定的檔案跑;CSV 唯讀掛載進容器。執行時容器 沒有外出網路資料留在你的筆電上。

安裝(一條命令)

npx -y @pineforge/codegen-mcp

就這樣。首次執行會下載套件、即時編譯 TypeScript,然後開始用 stdio 講 MCP。不必全域安裝,也不必另外 build。

你需要準備好三件事:

接入 Claude Desktop

開啟設定檔:

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

重新開工作階段後四個工具可用。

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,最大回撤 $312。第三次虧損後做空再也沒爬起來——要我挖觸發條件,還是掃一遍進場閾值?

這就是生產力表面:模型握著工具說明,知道 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": [
    /* 49 筆含時間戳、價格、PnL */
  ],
  "elapsed_seconds": 0.0042,
  "_meta": {
    "strategy_cpp_bytes": 5079,
    "image": "ghcr.io/fullpass-4pass/pineforge-engine:latest"
  }
}

模型拿到完整結構後,可以回答「最差的一筆是哪筆?」這類追問——自行掃 trades[]常常不需要第二次工具呼叫

配額意識

凡是走 codegen API 的對話都會扣配額。為了在昂貴參數掃描前先摸底,提供了 get_quota。免費檔 每月 100 次 transpile—— hobby 和 CI 冒煙夠了;若是反覆最佳化迴圈可能會緊。

實用做法:在專案的 CLAUDE.md(或等價物)裡寫一句:若被要求最佳化策略,在發起超過 5 次 transpile 之前先呼叫 get_quota 並回報剩餘額度

伺服器 刻意不包含的東西

這是刻意的範圍邊界:表面可稽核,故障模式單純。

到這裡會變好玩的手動苦活

幾件手工做很彆扭、在這種模型裡很自然的事:

不需要新基礎設施。模型 + 四個工具 + 你的話就夠了。

動手試

套件是開源的。伺服器小到 坐下來一遍讀完就能稽核線路,如果你想搞清楚線上到底送了什麼,很適合。