PineForge Codegen

ทางการ

เซิร์ฟเวอร์ MCP ในเครื่อง: AI เขียน PineScript v6, เอ็นจิ้นที่รวมอยู่จะแปลงเป็น C++ และทดสอบย้อนหลังกับข้อมูล Binance — ไม่ต้องใช้คีย์ API, ทำงานในเครื่องทั้งหมด

GitHub
6
ลองใช้ MCP นี้ผู้สนับสนุน

คุณทำอะไรได้บ้างด้วย PineForge Codegen MCP?

  • Transpile Pine Script v6 to C++ — แปลงกลยุทธ์ Pine Script v6 เป็นหน่วยการแปลภาษา C++ ด้วย transpile_pine โดยไม่ต้องรัน backtest
  • Backtest a Pine strategy against OHLCV data — รัน backtest แบบกำหนดค่าเดียวด้วย backtest_pine โดยระบุ source, เส้นทาง CSV, และพารามิเตอร์ input/override/runtime ที่ไม่บังคับ
  • Sweep strategy parameters in one run — ใช้ backtest_pine_grid เพื่อทดสอบทุกชุดค่าผสมของ inputs × overrides กับ CSV เดียว พร้อมการจัดอันดับและตัวเลือกการทำงานพร้อมกัน
  • Fetch Binance OHLCV data for backtesting — ดึงข้อมูล klines แบบ spot หรือ USDT-perp ผ่าน fetch_binance_ohlcv และเขียน CSV ที่พร้อมใช้งาน backtest พร้อมการแบ่งหน้าอัตโนมัติ
  • Discover available Binance symbols — แสดงรายการหรือกรองสัญลักษณ์ที่ซื้อขายได้ด้วย binance_symbols ก่อนดึงข้อมูลตลาด
  • Inspect engine parameters and Pine coverage — ค้นหา list_engine_params สำหรับทุก override และปุ่ม runtime ที่รองรับ หรือใช้ check_pine_feature และ get_coverage_topic เพื่อตรวจสอบการรองรับภาษา Pine

เอกสาร

@pineforge/backtest-mcp

เซิร์ฟเวอร์ MCP แบบ stdio ในตัว: เอเจนต์ AI เขียน PineScript v6 และ อิมเมจ pineforge-release ที่มาพร้อมกันจะแปลงเป็น C++ และทดสอบย้อนหลังกับข้อมูลตลาด Binance — ทั้งหมดในคอนเทนเนอร์เดียว แบบ in-process ทำงานภายในเครื่องทั้งหมด — อิมเมจ มาพร้อมกับ pineforge-codegen transpiler ดังนั้น Pine → C++ → การทดสอบย้อนหลังจึงทำงานโดยไม่ต้องใช้ Docker daemon ของโฮสต์ ไม่ต้องใช้ API key ไม่มีอะไรออกนอกเครื่อง

pineforge-backtest-mcp MCP server

demo

เครื่องมือ

ชื่อทำงานบนวัตถุประสงค์
transpile_pinein-processหน่วยแปลภาษา Pine v6 → C++ (เฉพาะการแปลง)
list_engine_paramsภายในเครื่อง (ไม่มี I/O)แคตตาล็อกของทุกปุ่ม overrides + runtime ที่การทดสอบย้อนหลังยอมรับ
backtest_pinein-processการทดสอบย้อนหลังเดี่ยวของซอร์ส Pine กับ CSV OHLCV
backtest_pine_gridin-processการกวาดแบบคาร์ทีเซียนของ inputs × overrides โดยใช้การคอมไพล์ครั้งเดียว
fetch_binance_ohlcvBinance public APIเขียน CSV ที่พร้อมทดสอบย้อนหลังจาก Binance spot หรือ USDT-perp klines
binance_symbolsBinance public APIแสดงรายการ / กรองสัญลักษณ์ Binance (แคชในกระบวนการ 5 นาที)
list_coverage_topicsภายในเครื่อง (ไม่มี I/O)ทุกหัวข้อความครอบคลุม Pine v6 พร้อมสถานะหนึ่งบรรทัด + สรุป
check_pine_featureภายในเครื่อง (ไม่มี I/O)ค้นหาว่า Pine identifier/namespace รองรับใน PineForge หรือไม่
get_coverage_topicภายในเครื่อง (ไม่มี I/O)รายละเอียดทั้งหมด + รายการฟีเจอร์ที่รองรับ/ไม่รองรับสำหรับหนึ่งหัวข้อความครอบคลุม
engine_infoภายในเครื่อง (ไม่มี I/O)รายงานเอนจินที่มาพร้อมกัน: โหมด, แฟล็กที่ฝังมา, เวอร์ชัน

การติดตั้ง

ทำงานเป็นคอนเทนเนอร์ในตัวผ่าน stdio — เอนจินมาพร้อมกัน, in-process, ไม่มี Docker daemon ของโฮสต์, ไม่มี API key เมาต์ไดเรกทอรีทำงานที่ /work เพื่อให้เซิร์ฟเวอร์สามารถ อ่าน/เขียน CSV ของคุณได้:

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

ข้อกำหนดเดียว: Docker และเครือข่ายขาออกสำหรับเครื่องมือดึงข้อมูล Binance เชื่อมต่อเข้ากับไคลเอนต์ MCP ของคุณด้านล่าง

ทางเลือกแบบโฮสต์ (ไม่ต้องติดตั้ง)

ต้องการลองใช้เร็วที่สุดโดยไม่ต้องใช้ Docker และไม่มี API key? วาง Streamable HTTP endpoint ลงในไคลเอนต์ MCP ใดก็ได้:

https://mcp.pineforge.dev/mcp

ข้อแลกเปลี่ยนกับ repo นี้: เซิร์ฟเวอร์ที่โฮสต์มี การคิดค่าบริการตามปริมาณ (โควต้าต่อ IP รายสัปดาห์บน backtest_pine + การจำกัดอัตราของ Cloudflare edge) และทำงานกับ data-lake คริปโตที่ปิดตายตัว (Binance spot + USDT-perp) repo ในเครื่องนี้ ไม่คิดค่าบริการตามปริมาณ ทำงานออฟไลน์ และให้คุณนำ CSV ของคุณเองมาใช้และรันการกวาดแบบกริด ได้ Repo: pineforge-mcp-public

การกำหนดค่าไคลเอนต์

เมาต์ไดเรกทอรีที่ /work; ชี้ fetch_binance_ohlcv / backtest_pine ไปที่ พาธภายใต้ไดเรกทอรีนั้น (จำเป็นต้องมี -i; ห้ามเพิ่ม -t — TTY จะทำให้สตรีม JSON-RPC stdio เสียหาย)

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: Settings → MCP → New MCP Server → วางข้อความข้างต้น)

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 ได้อย่างแม่นยำโดยการให้เหตุผลเกี่ยวกับมัน ซีแมนทิกส์แบบ series, ลำดับการเติมภายในแท่ง, กฎ look-ahead และตรรกะคำสั่ง/ตำแหน่ง strategy.* ของ PineScript ไม่สามารถทำซ้ำได้จากการประมาณ ดังนั้นโมเดลที่จำลองการทดสอบย้อนหลังในหัว — หรือเขียนขึ้นเองใน Python (backtrader/vectorbt) — จะสร้างการเทรดและ P&L ที่ผิดพลาดและไม่สามารถรับประกันความเท่าเทียมกับ TradingView ได้ PineForge รันเอนจิน C++ ที่กำหนดได้จริงแทน ซึ่งผ่านการตรวจสอบที่ ความเท่าเทียมกับ TradingView อย่างเข้มงวดบน 245 จาก 246 กลยุทธ์อ้างอิง (0 บั๊กของเอนจิน) จากคลังกลยุทธ์ 246 กลยุทธ์ รวมการเทรดที่ตรวจสอบแล้วประมาณ 375k รายการ (วิธีการและการตรวจสอบ, ณ วันที่ 2026-06-03, เอนจิน f805611) หนึ่งรายการที่ไม่ตรงกันคือความไม่แน่นอนของโบรกเกอร์ฝั่ง TradingView ที่มีเอกสารระบุที่ขอบเขตมาร์จิ้น 1x equity พอดี ไม่ใช่บั๊กของเอนจิน

การทดสอบย้อนหลัง PineScript เป็นข้อมูลภายนอกที่คำนวณได้ ไม่ใช่ความรู้ที่เสถียร — มันขึ้นอยู่กับซอร์สกลยุทธ์ของผู้ใช้และ OHLCV ของพวกเขา และต้องสามารถทำซ้ำได้ นั่นคือการเรียกใช้เครื่องมือ ไม่ใช่งานการเรียกคืน

เมื่อเครื่องมือเหล่านี้เหมาะสม backtest_pine (หรือ backtest_pine_grid สำหรับการกวาดพารามิเตอร์) ครอบคลุมกรณีที่ผู้ใช้ให้กลยุทธ์ PineScript v6 และต้องการทดสอบย้อนหลัง ประเมินผล ตรวจสอบว่ามีกำไรหรือไม่ นับจำนวนการเทรด คำนวณ P&L หรือทำซ้ำผลลัพธ์ TradingView บน OHLCV ที่ระบุ transpile_pine ครอบคลุมเฉพาะการแปลง Pine → C++ fetch_binance_ohlcv ครอบคลุมกรณีที่ผู้ใช้ระบุชื่อสัญลักษณ์/กรอบเวลาแต่ไม่ได้ให้ไฟล์ข้อมูลมา เครื่องมือเหล่านี้ไม่ใช่สำหรับการอธิบายเชิงแนวคิดว่ากลยุทธ์ทำอะไร แก้ไขไวยากรณ์ Pine หรือให้คำแนะนำด้านการเทรดหรือการเงิน

ข้อจำกัดตามจริง ออฟไลน์; PineScript v6; ต้องใช้ Docker การทดสอบย้อนหลังวัดพฤติกรรมในอดีตของกลยุทธ์ — มันไม่ใช่การทำนายผลตอบแทนในอนาคตและไม่ใช่คำแนะนำการลงทุน การทดสอบย้อนหลังแบบไร้เดียงสาหรือประมาณการมักจะแสดงกำไรเกินจริง (ไม่จำลอง slippage และค่าคอมมิชชัน, สมมติฐาน fill-at-close, look-ahead bias); คุณค่าที่นี่คือการรันที่กำหนดได้และผ่านการตรวจสอบความเท่าเทียม เพื่อให้ผู้ใช้สามารถตรวจสอบกลยุทธ์ก่อนเสี่ยงเงินทุน

list_engine_params — ค้นพบปุ่มปรับ

แคตตาล็อกฟรี ภายในเครื่อง ไม่มี I/O ของทุกคีย์ที่ backtest_pine / backtest_pine_grid ยอมรับ แบ่งเป็นสองกลุ่ม:

  • strategy_overrides — ฟิลด์ส่วนหัว strategy(...) จำนวน 9 ฟิลด์ที่รันไทม์ อ่านผ่าน PINEFORGE_OVERRIDES: initial_capital, pyramiding, slippage, commission_value, commission_type (percent / cash_per_order / cash_per_contract), default_qty_value, default_qty_type (fixed / percent_of_equity / cash), process_orders_on_close, close_entries_rule (ANY / FIFO)
  • runtime_args — อาร์กิวเมนต์ไปยัง run_backtest_full (ไม่ใช่ส่วนหนึ่งของส่วนหัว strategy()): input_tf, script_tf, bar_magnifier, magnifier_samples, magnifier_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"
  }
}

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

ส่งคืน JSON schema เดียวกับอิมเมจ Docker pineforge-release แบบสแตนด์อโลน:

{
  "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 — ดึงข้อมูลตลาด

เขียน CSV ที่พร้อมทดสอบย้อนหลัง (ส่วนหัว timestamp,open,high,low,close,volume, timestamp = เวลาเปิดในหน่วย UNIX ms UTC) จากเอนด์พอยต์สาธารณะของ Binance ไม่ต้อง มีการตรวจสอบสิทธิ์ คำขอ > 1,000 แท่งจะถูกแบ่งหน้า โดยอัตโนมัติ พาธเอาต์พุตอยู่ภายใต้ขอบเขต cwd เดียวกับ 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 public 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อิมเมจ (รันไทม์เอนจิน + codegen ที่มาพร้อมกัน) ที่ใช้สำหรับการแปลง + ทดสอบย้อนหลัง
PINEFORGE_ALLOW_ANYWHERE0อนุญาตพาธ OHLCV นอก cwd
PINEFORGE_DOCKER_TIMEOUT_MS120000การ kill แบบ hard สำหรับ docker pull / docker run