도구

Claude Code에서 90초 만에 Pine 전략 백테스트

@pineforge/codegen-mcp 서버 튜토리얼: npx 한 줄로 설치하고, Claude에게 Pine 트랜스파일을 맡긴 뒤 Docker 백테스트로 트레이드 목록을 확인합니다. OHLCV는 머신 밖으로 나가지 않습니다.

약 7분 읽기#mcp#ai#claude#cursor#tooling

PineForge codegen은 몇 달 동안 curl 너머에만 있었습니다. 이번 주부터는 Model Context Protocol 서버로도 만질 수 있어서, MCP-aware 클라이언트——Claude Desktop, Claude Code, Cursor, Continue.dev 등——안에서 백테스트까지 한 번에 돌릴 수 있습니다.

이 글은 그 여정이 끝에서 끝까지 어떻게 보이는지 안내합니다. 빈 저장소부터 JSON 백테스트 리포트까지 벽시계로 약 90초. 최초 docker pull은 별도입니다.

서버가 실제로 하는 일

npm 패키지 @pineforge/codegen-mcp는 로컬 stdio 브리지로 얇게 얹혀 있습니다. AI 클라이언트에 네 가지 도구를 노출합니다.

Tool실행 위치비용
transpile_pine호스트 codegen API쿼터 소모(컴파일 오류 시 환급)
get_quota호스트 codegen API무료
backtest_pine로컬 Docker 데몬1회(내부 트랜스파일 포함)
pull_engine_image로컬 Docker 데몬무료

잠깐 멈춰 볼 만한 건 프라이버시입니다. Pine 소스는 호스트 codegen(codegen.pineforge.dev)으로 갑니다.OHLCV CSV는 안 갑니다. backtest_pine은 만들어진 strategy.cpp를 당신이 가리킨 파일에 대해 로컬 Docker로 돌립니다. CSV는 읽기 전용 볼륨으로 컨테이너에 마운트됩니다. 런타임 컨테이너는 외향 네트워크가 없습니다.데이터는 노트북을 안 나갑니다.

설치(한 줄)

npx -y @pineforge/codegen-mcp

끝입니다. 첫 실행에 패키지가 내려오고 TypeScript를 즉석 컴파일한 뒤 MCP를 stdio로 말하기 시작합니다. 전역 설치나 빌드 단계 없음.

필요한 것 세 가지:

  • Node ≥ 20
  • 로컬에서 도는 Docker(backtest_pinedocker run 호출)
  • pineforge.dev 웨이트리스트로 받은 pf_…

Claude Desktop 연결

설정 파일:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

mcpServers 아래에 추가:

{
  "mcpServers": {
    "pineforge-codegen": {
      "command": "npx",
      "args": ["-y", "@pineforge/codegen-mcp"],
      "env": {
        "PINEFORGE_API_KEY": "pf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Claude Desktop 재시작. 첫 도구 호출에서 호스트 codegen과 런타임 이미지 docker pull(약 250MB, 일회)이 돕니다.

Claude Code(CLI)

터미널에 있다면 더 짧습니다.

claude mcp add pineforge-codegen \
  --transport stdio \
  --env PINEFORGE_API_KEY=pf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
  -- npx -y @pineforge/codegen-mcp

세션 재시작 후 네 도구 사용 가능.

Cursor

Settings → MCP → 동일 JSON 블록 붙여넣기.

자연어로 돌리기

연결만 되면 대화는 평범한 한국어/영어 프롬프트입니다. 압축 예시:

당신: ./strategy.pine에 Pine v6 전략, ./eth_15m.csv에 7일치 15분 ETHUSDT. 백테스트해서 Sharpe와 최대 낙폭 알려줘.

Claude: 해당 파일로 backtest_pine 실행… (약 3초) 완료. 49트레이드, 순손익 −$190.85, Sharpe 0.21, 최대 DD $312. 세 번째 손실 뒤 숏 진입 후 회복 못 함——진입 조건 파볼까, 임계값 스윕할까?

모델이 도구 설명과 반환 형태를 알고 있어 curl 없이 다음 호출까지 이어 갑니다. 「편집→TV→차트→숫자→에디터」 마찰이 한 대화로 접힙니다.

리포트 형태

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": [
    /* 타임스탬프·가격·PnL 이 있는 49건 */
  ],
  "elapsed_seconds": 0.0042,
  "_meta": {
    "strategy_cpp_bytes": 5079,
    "image": "ghcr.io/pineforge-4pass/pineforge-engine:latest"
  }
}

모델이 전체 구조를 갖습니다. 「최악의 트레이드는?」 같은 후속도 trades[]만 훑으면 되어 추가 호출 불필요할 때가 많습니다.

쿼터 인지

codegen API를 쓰는 모든 대화가 쿼터에 잡힙니다. 비싼 파라미터 스윕 전에 **get_quota**로 남은량을 확인하세요. 무료 티어는 월 100회 트랜스파일——취미·CI 스모크엔 넉넉, 반복 최적화엔 빠듯할 수 있습니다.

팁: 프로젝트 CLAUDE.md에 「최적화 요청 시 5회 초과 트랜스파일 전에 get_quota 호출하고 예산 보고」 같은 힌트를 적어 두세요.

서버에 일부러 없는 것

  • 라이브 주문 없음. 전략·데이터에 대해 읽기 전용. 브로커 미연결.
  • 데이터 페치 없음. OHLCV는 당신이 가져옵니다.
  • 호출 간 상태 없음.backtest_pine은 새 컨테이너.

의도된 범위 한계입니다.감사 가능하고 실패 모드가 단순하게 유지됩니다.

여기서 재미있어지는 패턴

  • 스탑 한 번 조이고 재실행
  • CSV만 바꿔 30일 창으로
  • 입력 레인지 스윕해 Sharpe 표
  • 두 전략 두 번 호출해 나란히 비교

새 인프라 없이 모델 + 네 도구 + 당신의 문장으로 나옵니다.

시도하기

패키지는 오픈 소스입니다. 서버는 한 자리에서 감사 가능한 크기입니다.