피드로 돌아가기
Dev.toBackend
원문 읽기
PineScript v6 C++ Transpiling을 통한 백테스트 재현성 확보 및 245/246 전략 Parity 달성
We Transpiled PineScript v6 to C++ So Backtests Are Actually Reproducible
AI 요약
Context
TradingView의 PineScript는 특정 플랫폼 종속성으로 인해 데이터 락인과 실행 결과의 불일치 문제를 야기함. 특히 Floating-point 오차 및 플랫폼 전용 런타임 구조로 인해 외부 환경에서 동일한 백테스트 결과를 재현하는 것이 불가능한 구조적 한계 존재.
Technical Solution
- PineScript v6 소스를 C++ 클래스로 변환하여 네이티브 바이너리로 실행하는 Transpiler Pipeline 설계
- PineScript의
var선언문을 C++ 클래스 멤버 변수로 매핑하여 바(Bar) 간 상태 유지 메커니즘 구현 series[]타입을 고정 크기 Ring Buffer로 변환하여 인덱스 기반의 효율적인 과거 데이터 접근 최적화- TradingView 런타임의 부동 소수점 연산 순서를 정밀하게 모방하여 연산 결과의 일치성(Parity) 확보
- 6가지 분포 모드(Uniform, Cosine 등)를 적용한 Intra-Bar Resolution 구현으로 정밀한 Limit Fill 시뮬레이션 가능
- Optuna를 C++ 바이너리에 직접 연결하여 Python 오버헤드 없이 고속 파라미터 최적화 수행
실천 포인트
1. 외부 DSL 도입 시 벤더 락인을 방지하기 위한 중간 표현식(AST) 추출 가능 여부 검토
2. 정밀한 수치 계산이 필요한 시스템 설계 시 부동 소수점 연산 순서(Order of Operations) 일치화 전략 수립
3. 상태 유지형 루프 구조를 객체 지향 멤버 변수와 Stateless 함수로 분리하여 이식성 향상