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 data —
backtest_pine를 사용하여 소스 코드, CSV 경로, 선택적 입력/재정의/런타임 매개변수를 제공하여 단일 결정론적 백테스트를 실행합니다. - Sweep strategy parameters in one run —
backtest_pine_grid를 사용하여 단일 CSV에 대해inputs×overrides의 모든 조합을 테스트하며, 순위 지정과 선택적 동시 실행을 지원합니다. - Fetch Binance OHLCV data for backtesting —
fetch_binance_ohlcv를 통해 현물 또는 USDT 무기한 선물 캔들 데이터를 가져오고, 자동 페이지네이션으로 백테스트 준비가 완료된 CSV를 작성합니다. - Discover available Binance symbols — 시장 데이터를 가져오기 전에
binance_symbols를 사용하여 거래 가능한 심볼을 나열하거나 필터링합니다. - Inspect engine parameters and Pine coverage —
list_engine_params를 조회하여 허용된 모든 재정의 및 런타임 설정을 확인하거나,check_pine_feature와get_coverage_topic을 사용하여 Pine 언어 지원 여부를 검증합니다.
문서
@pineforge/backtest-mcp
자체 완비된 stdio MCP 서버: AI 에이전트가 PineScript v6을 작성하면, 번들로 제공되는 pineforge-release 이미지가 이를 C++로 트랜스파일하고 바이낸스 시장 데이터를 기반으로 백테스트를 수행합니다 — 모든 것이 하나의 컨테이너 안에서, 인-프로세스로 이루어집니다. 완전 로컬 — 이미지에 pineforge-codegen 트랜스파일러가 번들로 포함되어 있어, Pine → C++ → 백테스트 실행이 호스트 Docker 데몬 없이 진행됩니다. API 키 불필요, 어떤 것도 박스 밖으로 나가지 않습니다.

도구
| 이름 | 실행 위치 | 목적 |
|---|---|---|
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_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 행 사이의 간격에서 자동 감지됩니다.
독립형 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_IMAGE | ghcr.io/pineforge-4pass/pineforge-release:latest | 트랜스파일 + 백테스트에 사용되는 이미지(엔진 런타임 + 번들 코드젠) |
PINEFORGE_ALLOW_ANYWHERE | 0 | cwd 외부의 OHLCV 경로 허용 |
PINEFORGE_DOCKER_TIMEOUT_MS | 120000 | docker pull / docker run에 대한 강제 종료 |