PineScript 백테스트를 오프라인에서, 내 데이터로
PineForge는 PineScript v6를 네이티브 C++로 트랜스파일하고 Docker로 로컬 머신에서 실행합니다. 로컬 퍼스트, 바이트 재현, Docker가 도는 환경이면 어디서나. OHLCV CSV는 직접 가져오세요.
왜 오프라인?
브라우저 백테스트는 차트 옆에서 빠르게 도는 데 좋습니다. 오프라인 백테스트는 전략에 돈을 실을 다음 단계 — 감사 추적이 필요하고, CI가 매 커밋을 막아야 하고, 두 달 전 결과가 오늘도 비트 단위로 재현돼야 할 때 손이 갑니다.
오프라인으로 돌리면 브라우저 테스터가 못 주는 게 생깁니다: 결과가 바이트 재현 — 같은 입력이면 매번 같은 출력. 엔진 버전을 고정하고, 결과를 저장소에 커밋하고, 커밋 사이 트레이드 목록을 디프하고, CI에서 헤드리스로 전부 돌립니다. 넣는 CSV는 내 것, 도는 바이너리는 로컬, 나오는 리포트는 감사 가능합니다.
오프라인이 여는 실전 목록: 두 달 전 커밋도 오늘 같은 트레이드 목록을 내는 버전 고정 엔진; 거래소 틱 재구성·데이터 벤더 포인트인타임 가격·OHLCV로 직렬화 가능한 대체 데이터까지 테스트하는 커스텀 수집; 회귀가 프로덕션 가기 전 빌드를 깨는 CI; 로직이 플랫폼에 묶이지 않고 파일로 남는 멀티 브로커 이식성.
백테스트 결과를 동료와 나눠야 하는데 공유가 차트 스크린샷뿐이었다면 — 빠진 조각이 바로 오프라인 실행입니다.
작동 방식
세 단계입니다. Pine 소스에서 JSON 트레이드 리포트까지 처음엔 2분 안, 이후엔 매번 30초 안.
1단계 — 런타임 받기. 컨테이너 이미지 하나면 됩니다. pip도, key도, 가입도 없습니다 — 트랜스파일과 백테스트가 모두 그 안에서, 오프라인으로 돌아갑니다. 개인 트레이딩은 무료.
2단계 — 내 Pine을 C++로 트랜스파일. 컨테이너를 transpile-only 모드로 돌리면 내 PineScript v6를 로컬에서 완성된 C++ 소스 파일로 바꿔 줍니다. 런타임에 Pine 인터프리터는 돌지 않습니다 — engine이 네이티브 머신 코드로 컴파일합니다.
docker run --rm --network=none \ -e PINEFORGE_TRANSPILE_ONLY=1 \ -v "$(pwd)/my_strategy.pine":/in/strategy.pine:ro \ ghcr.io/pineforge-4pass/pineforge-engine:latest > strategy.cpp
3단계 — 백테스트. 생성된 C++ 옆에 내 OHLCV CSV를 마운트하고 컨테이너를 실행하세요. engine이 데이터 파일을 읽어 바 단위로 전략을 실행하고, JSON 리포트를 stdout으로 내보냅니다.
docker run --rm --network=none \ -v "$(pwd)/strategy.cpp":/in/strategy.cpp:ro \ -v "$(pwd)/ohlcv.csv":/in/ohlcv.csv:ro \ ghcr.io/pineforge-4pass/pineforge-engine:latest > report.json
JSON에는 진입·청산 가격, 바 인덱스, 포지션 크기가 든 전체 트레이드 목록과 순 PnL, 최대 낙폭, 총 트레이드 수, profit factor, Sharpe가 있는 요약 블록이 있습니다. 같은 메이저 버전 안에서는 패치 간 필드가 안정적이라 스크립트 파싱에 안전합니다.
워크플로 전부입니다. GUI 없음, 재인증 없음, 차트 로딩 없음. Docker만 되면 PineForge 오프라인 백테스트도 됩니다.
무엇을 백테스트할 수 있나
짧게: OHLCV로 직렬화할 수 있는 것이라면 무엇이든. PineForge는 시세 벤더와 직결돼 있지 않습니다. 데이터를 가져오면 엔진이 전략을 실행합니다.
내 거래소 크립토. Binance, Bybit, Kraken, 혹은 REST/WebSocket API 있는 거래소에서 원시 체결 데이터를 가져와 전략 타임프레임으로 집계하고 CSV를 바로 넣습니다. 실제로 거래할 페어·장소 조합으로 테스트합니다.
데이터 벤더 주식. Polygon, Norgate, BarChart, Tiingo — 소스 고르고 포인트인타임 조정가를 내보내 실제 체결과 서바이버십 바이어스 없는 유니버스로 돌립니다.
틱 재구성. Level 2 데이터로 틱에서 합성 1초봉을 만들고 싶다면 가능합니다. 틱에서 OHLCV를 만들어 넣으면 됩니다. 엔진은 바 출처를 알 필요도 없습니다.
대체 데이터. 센티먼트, 온체인, 펀딩, 옵션 스큐 — 바 인덱스에 맞춘 시계열로 표현되면 Pine 커스텀 컬럼으로 넣어 오프라인 테스트합니다.
갤러리의 246전략 참조 스위트는 TradingView CSV 내보내기(패리티 검증용)와 커스텀 CSV 데이터셋(회귀 테스트용)으로 백테스트했습니다. 246개 중 245개가 정통 strict-excellent 티어에 들어왔습니다(비교 윈도 PnL 드리프트 ≤ 0.5%). 남은 1건은 심층 분석된 TV-side anomaly입니다 — chart-state 비결정성으로 TradingView 상태로 추적됩니다. 실제 engine bug는 0건.