PineForge Codegen

官方

本地 MCP 伺服器:AI 撰寫 PineScript v6,內建引擎編譯為 C++ 並針對 Binance 資料進行回測 — 無需 API 金鑰,完全本地運作。

你可以用 Pine Forge Codegen MCP 做什麼?

  • 將 Pine Script v6 轉譯為 C++ — 使用 transpile_pine 將 Pine Script v6 策略轉換為 C++ 翻譯單元,無需執行回測。
  • 針對 OHLCV 資料回測 Pine 策略 — 使用 backtest_pine 執行單次確定性回測,提供原始碼、CSV 路徑以及可選的輸入/覆寫/執行時期參數。
  • 一次執行掃描策略參數 — 使用 backtest_pine_grid 測試 inputs × overrides 的所有組合,針對單一 CSV 進行排名,並支援可選的並行處理。
  • 擷取 Binance OHLCV 資料以供回測 — 透過 fetch_binance_ohlcv 拉取現貨或 USDT 永續合約的 K 線資料,並自動分頁寫入可供回測的 CSV 檔案。
  • 探索可用的 Binance 交易對 — 在擷取市場資料前,使用 binance_symbols 列出或篩選可交易的商品。
  • 檢視引擎參數與 Pine 語言涵蓋範圍 — 查詢 list_engine_params 以取得所有可接受的覆寫與執行時期設定,或使用 check_pine_featureget_coverage_topic 驗證 Pine 語言的支援程度。

文件

@pineforge/backtest-mcp

自給自足的 stdio 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程序內重複使用一次編譯,對 inputs × overrides 進行笛卡爾掃描
fetch_binance_ohlcvBinance 公開 API從 Binance 現貨或 USDT 永續合約 K 線寫入可供回測的 CSV
binance_symbolsBinance 公開 API列出 / 篩選 Binance 交易對(5 分鐘程序內快取)
list_coverage_topics本地(無 I/O)每個 Pine v6 涵蓋範圍主題,附帶一行狀態 + 摘要
check_pine_feature本地(無 I/O)查詢某個 Pine 識別碼/命名空間在 PineForge 中是否受支援
get_coverage_topic本地(無 I/O)針對一個涵蓋範圍主題的完整詳細資料 + 受支援/不受支援的功能清單
engine_info本地(無 I/O)報告內建引擎:模式、內建旗標、版本

安裝

以自給自足的容器形式透過 stdio 執行——引擎內建、程序內執行、無需主機 Docker 守護程序、無需 API 金鑰。將工作目錄掛載到 /work,以便伺服器能 讀寫您的 CSV:

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

與此儲存庫的取捨:託管伺服器是計量的(每個 IP 在 backtest_pine 上有每週配額

  • Cloudflare 邊緣速率限制),並且是針對一個固定的、密封的加密資料湖 (Binance 現貨 + USDT 永續合約)執行。此本地儲存庫則不計量、可離線執行,並允許您自備 CSV 和執行網格 掃描。儲存庫:pineforge-mcp-public

客戶端設定

將目錄掛載到 /work;將 fetch_binance_ohlcv / backtest_pine 指向 其下的路徑。(-i 是必需的;切勿添加 -t——TTY 會破壞 stdio 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 的序列語義、K 線內成交順序、前瞻規則以及 strategy.* 的訂單/持倉邏輯,無法透過近似模擬重現,因此,一個在腦中模擬回測——或在 Python(backtrader/vectorbt)中手動編寫回測——的模型,將會產生幻覺交易和損益,且無法保證與 TradingView 的對等性。PineForge 改為執行實際的確定性 C++ 引擎,並在 246 個參考策略中的 245 個上,經過嚴格的 TradingView 對等性驗證(0 個引擎錯誤),整個 246 個策略的語料庫總計約有 37.5 萬筆經過驗證的交易方法與驗證,截至 2026-06-03,引擎 f805611)。唯一一個不匹配的案例,是已記錄的 TradingView 端經紀商在恰好 1 倍權益保證金邊界上的非確定性問題,而非引擎錯誤。

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 — 探索設定項目

免費、本地、零 I/O 的目錄,包含 backtest_pine / backtest_pine_grid 接受的所有金鑰,分為兩組:

  • strategy_overrides — 執行階段透過 PINEFORGE_OVERRIDES 讀取的 9 個 strategy(...) 標頭欄位: initial_capitalpyramidingslippagecommission_valuecommission_typepercent / cash_per_order / cash_per_contract)、default_qty_valuedefault_qty_typefixed / percent_of_equity / cash)、process_orders_on_closeclose_entries_ruleANY / FIFO)。
  • runtime_argsrun_backtest_full 的參數(不屬於 strategy() 標頭):input_tfscript_tfbar_magnifiermagnifier_samplesmagnifier_distuniform / 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"
  }
}

inputs 會作為 PINEFORGE_INPUTS 環境變數轉發給引擎, overrides 作為 PINEFORGE_OVERRIDES,而每個 runtime 欄位則作為獨立的 PINEFORGE_INPUT_TF / PINEFORGE_SCRIPT_TF / PINEFORGE_BAR_MAGNIFIER / PINEFORGE_MAGNIFIER_SAMPLES / PINEFORGE_MAGNIFIER_DIST 環境變數。空白 / 未設定 → 使用 strategy.pine 的預設值,其中 input_tf 會從 前兩列 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 原始碼一次轉譯(在容器內本地進行),然後針對 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 根 K 線的請求會自動 分頁。輸出路徑受與 ohlcv_csv_path 相同的目前工作目錄範圍限制(可使用 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 — 探索 / 驗證交易對

回傳在 Binance 公開 API 上可用於擷取 OHLCV 的交易對清單。 在程序內快取 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_ANYWHERE0允許 OHLCV 路徑位於目前工作目錄之外
PINEFORGE_DOCKER_TIMEOUT_MS120000docker pull / docker run 的強制終止