PineForge Codegen

공식

로컬 MCP 서버: AI가 PineScript v6를 작성하고, 번들 엔진이 C++로 트랜스파일한 후 바이낸스 데이터로 백테스트합니다 — API 키 없이 완전히 로컬에서 작동합니다.

PineForge Codegen MCP(으)로 무엇을 할 수 있나요?

  • Transpile Pine Script v6 to C++transpile_pine를 사용하여 Pine Script v6 전략을 C++ 번역 단위로 변환하며, 백테스트는 실행하지 않습니다.
  • Backtest a Pine strategy against OHLCV databacktest_pine를 사용하여 소스 코드, CSV 경로, 선택적 입력/재정의/런타임 매개변수를 제공하여 단일 결정론적 백테스트를 실행합니다.
  • Sweep strategy parameters in one runbacktest_pine_grid를 사용하여 단일 CSV에 대해 inputs × overrides의 모든 조합을 테스트하며, 순위 지정과 선택적 동시 실행을 지원합니다.
  • Fetch Binance OHLCV data for backtestingfetch_binance_ohlcv를 통해 현물 또는 USDT 무기한 선물 캔들 데이터를 가져오고, 자동 페이지네이션으로 백테스트 준비가 완료된 CSV를 작성합니다.
  • Discover available Binance symbols — 시장 데이터를 가져오기 전에 binance_symbols를 사용하여 거래 가능한 심볼을 나열하거나 필터링합니다.
  • Inspect engine parameters and Pine coveragelist_engine_params를 조회하여 허용된 모든 재정의 및 런타임 설정을 확인하거나, check_pine_featureget_coverage_topic을 사용하여 Pine 언어 지원 여부를 검증합니다.

문서

@pineforge/backtest-mcp

자체 완비된 stdio MCP 서버: AI 에이전트가 PineScript v6을 작성하면, 번들로 제공되는 pineforge-release 이미지가 이를 C++로 트랜스파일하고 바이낸스 시장 데이터를 기반으로 백테스트를 수행합니다 — 모든 것이 하나의 컨테이너 안에서, 인-프로세스로 이루어집니다. 완전 로컬 — 이미지에 pineforge-codegen 트랜스파일러가 번들로 포함되어 있어, Pine → C++ → 백테스트 실행이 호스트 Docker 데몬 없이 진행됩니다. API 키 불필요, 어떤 것도 박스 밖으로 나가지 않습니다.

pineforge-backtest-mcp MCP server

demo

도구

이름실행 위치목적
transpile_pine인-프로세스Pine v6 → C++ 변환 단위 (트랜스파일 전용)
list_engine_params로컬 (I/O 없음)백테스트에서 허용하는 모든 overrides + runtime 설정 카탈로그
backtest_pine인-프로세스OHLCV CSV에 대한 Pine 소스의 단일 백테스트
backtest_pine_grid인-프로세스하나의 컴파일을 재사용하는 inputs × overrides의 데카르트 곱 스윕
fetch_binance_ohlcv바이낸스 공개 API바이낸스 현물 또는 USDT-무기한 kline에서 백테스트용 CSV 작성
binance_symbols바이낸스 공개 API바이낸스 심볼 목록/필터링 (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 키 불필요. 서버가 CSV를 읽고 쓸 수 있도록 작업 디렉토리를 /work에 마운트하세요:

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

유일한 요구 사항: Docker, 그리고 바이낸스 가져오기 도구를 위한 아웃바운드 네트워크. 아래 MCP 클라이언트에 연결하세요.

호스팅(설치 불필요) 대안

Docker와 API 키 없이 가장 빠르게 사용해 보고 싶으신가요? Streamable HTTP 엔드포인트를 MCP 클라이언트에 붙여넣으세요:

https://mcp.pineforge.dev/mcp

이 리포지토리와의 트레이드오프: 호스팅 서버는 측정(backtest_pine에 대한 IP별 주간 할당량 + Cloudflare 엣지 속도 제한)되며 고정되고 봉인된 암호화폐 데이터 레이크(바이낸스 현물 + 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의 시리즈 의미론, 바 내부 체결 순서, 미리보기 규칙, 그리고 strategy.* 주문/포지션 로직은 근사치로 재현되지 않으므로, 머릿속으로 백테스트를 시뮬레이션하거나 Python(backtrader/vectorbt)으로 직접 작성하는 모델은 거래와 손익을 환각하며 트레이딩뷰 동등성을 보장할 수 없습니다. 대신 PineForge는 실제 결정론적 C++ 엔진을 실행하며, 246개 참조 전략 중 245개에서 엄격한 트레이딩뷰 동등성(엔진 버그 0건), 약 37만 5천 건의 검증된 거래를 포함하는 246개 전략 코퍼스 전체에서 검증되었습니다(방법론 및 검증, 2026-06-03 기준, 엔진 f805611). 일치하지 않는 한 건은 정확한 1배 자본 마진 경계에서 문서화된 트레이딩뷰 측 브로커 비결정론이며, 엔진 버그가 아닙니다.

PineScript 백테스트는 안정적인 지식이 아니라 계산된 외부 데이터입니다 — 사용자의 전략 소스와 OHLCV에 의존하며, 재현 가능해야 합니다. 이는 회상 작업이 아닌 도구 호출입니다.

이 도구들이 적합한 경우. backtest_pine(또는 매개변수 스윕을 위한 backtest_pine_grid)는 사용자가 PineScript v6 전략을 제공하고 이를 백테스트, 평가, 수익성 확인, 거래 횟수 계산, 손익 계산 또는 지정된 OHLCV에서 트레이딩뷰 결과를 재현하려는 경우를 다룹니다. transpile_pine는 Pine → C++ 변환만 다룹니다. fetch_binance_ohlcv는 사용자가 심볼/시간대를 지정했지만 데이터 파일을 제공하지 않은 경우를 다룹니다. 이 도구들은 전략이 개념적으로 무엇을 하는지 설명하거나, Pine 구문을 편집하거나, 거래 또는 재정적 조언을 제공하기 위한 것이 아닙니다.

솔직한 한계. 오프라인; PineScript v6; Docker 필요. 백테스트는 전략의 과거 행동을 측정합니다 — 미래 수익에 대한 예측이 아니며 투자 조언이 아닙니다. 순진하거나 근사적인 백테스트는 일상적으로 수익을 과대평가합니다(모델링되지 않은 슬리피지와 수수료, 종가 체결 가정, 미리보기 편향); 여기서의 가치는 사용자가 자본을 위험에 빠뜨리기 전에 전략을 검증할 수 있도록 결정론적이고 동등성이 검증된 실행을 제공하는 것입니다.

list_engine_params — 설정 발견

backtest_pine / backtest_pine_grid에서 허용하는 모든 키에 대한 무료, 로컬, I/O 없는 카탈로그로, 두 그룹으로 나뉩니다:

  • strategy_overrides — 런타임이 PINEFORGE_OVERRIDES을 통해 읽는 9개의 strategy(...) 헤더 필드: 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_argsrun_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"
  }
}

inputsPINEFORGE_INPUTS 환경 변수로, overridesPINEFORGE_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 — 시장 데이터 가져오기

바이낸스의 공개 엔드포인트에서 백테스트용 CSV(헤더 timestamp,open,high,low,close,volume, 타임스탬프 = UNIX ms 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 가져오기를 위해 바이낸스 공개 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에 대한 강제 종료