왜 만들었는가 PineForge
OCA 청산 그룹을 거친 트레이드 421건, 단 한 건도 다르지 않습니다.
차트를 탭하거나 드래그하면 원하는 지점의 값이 보입니다.
누적 손익(USDT), ETHUSDT 15m, 공개 코퍼스 d75b4fa. 두 트레이드 목록 보기
차트를 표로 보기
| 트레이드 | 청산 시각(UTC) | TradingView | PineForge |
|---|---|---|---|
| 33 | 2025-04-30 14:30 | 129.88 | 129.88 |
| 57 | 2025-05-31 08:45 | 258.48 | 258.48 |
| 88 | 2025-06-30 11:15 | 188.84 | 188.84 |
| 112 | 2025-07-31 23:30 | 29.97 | 29.97 |
| 144 | 2025-08-30 03:15 | 140.67 | 140.67 |
| 175 | 2025-09-28 13:15 | 85.95 | 85.95 |
| 208 | 2025-10-30 20:45 | −14.07 | −14.07 |
| 249 | 2025-11-29 18:30 | −128.25 | −128.25 |
| 271 | 2025-12-29 14:45 | 162.43 | 162.43 |
| 312 | 2026-01-31 23:15 | 205.72 | 205.72 |
| 353 | 2026-02-28 08:15 | 172.19 | 172.19 |
| 385 | 2026-03-31 12:00 | 368.20 | 368.20 |
| 421 | 2026-04-29 21:45 | 305.73 | 305.73 |
측정 방법
oca-exit-bracket-internal-cancel-01 전략은 OCA 그룹으로 청산합니다. 굵은 선이 TradingView 트레이드 목록, 그 안의 가는 선이 PineForge 트레이드 목록입니다. 각 목록의 트레이드 421건이 같은 시각에 청산되고, 누적 손익도 센트 단위까지 같습니다.
처음부터 엄격 패리티를 맞춘 건 아니었습니다. 지금 공개 코퍼스에는 전략 312개가 있고 311개가 우수, 1개가 지정된 이상 사례입니다. 엔진 main의 2026‑11‑03 기준선에서는 종목 9개에 걸친 백테스트 7,989개의 100.00%가 TradingView 자체 트레이드 대비 우수 또는 양호 판정을 받았습니다. 격차를 좁힌 건 코드 생성 로직을 더 써서가 아니라, 차이를 하나씩 쫓은 결과입니다.
출처: pineforge-engine의 scripts/check_corpus_parity.sh, 커밋 35db01c8, 86행; pineforge-corpus 커밋 d75b4fa
출처: 내부 패리티 기록(비공개), 기준선 pineforge-parity-baseline-20261103-release-tag-3d8717c4(스냅샷 sha256 3d8717c4…73ad, 모집단 cf857209…b062); 스크립트 출처별 집계: pineforge-engine README.md(d1d18867); 트레이드 수: pineforge-release facts.json.
그 작업 대부분은 TradingView만의 “청산”, “체결”, “트레일” 정의를 맞추는 데 들어갔습니다. Pine 문서는 API를 설명하지만 주문 처리의 정확한 의미는 트레이드 목록을 바별로 디프해야 보입니다. 그렇게 했고, 왜 다른지 계속 물었으며 차이를 하나씩 다듬었습니다.
공개 코퍼스에 남은 예외 하나인 anomaly-equity-mirror-strategy-equity-01은 이상 사례로 지정돼 있어서, 코퍼스 게이트는 이를 실패가 아닌 이상 사례로 보고합니다. 이 프로브의 노트에 적힌 원래 진단에 따르면, 자산의 정확히 1배 규모에서 TradingView의 증거금 검사가 자산을 넘는 진입 일부는 받아들이고 자산에 못 미치는 진입 일부는 거부했습니다. 2026‑11‑03 패리티 기준선에서 이 프로브가 우수 등급을 받아, 이 진단은 검토 중입니다.
왜 오프라인 재현성인가
대부분의 Pine 전략은 TradingView에 살아 있습니다. 차트 옆에서 즉시 돌려보고, 커뮤니티가 크고, 공유도 쉽기 때문이죠. 하지만 오프라인 런타임은 없습니다. 엔진 버전을 고정할 수 없고, CI에서 백테스트를 돌릴 수 없으며, 다른 머신에서 트레이드 목록을 비트 단위로 재현하기도 어렵습니다.
차트 아이디어를 훑어볼 때는 이 중 어느 것도 중요하지 않습니다. 실제 돈을 걸 전략을 만들 때는 전부 중요합니다. 저희는 Pine 언어를 버리지 않고 “브라우저에서 숫자를 봤다”와 “감사 추적이 있다” 사이의 간극을 메우려 했습니다.
왜 PyneCore에 기여하지 않았나
PyneCore는 가장 야심 찬 오픈 소스 PineScript 엔진이고, 저희도 교차 검증용으로 씁니다. 그런데도 PineForge를 별도 엔진으로 만든 이유는 두 가지입니다.
- 런타임 모델
- PyneCore는 PyneSys 컴파일러가 Python으로 변환한 Pine을 실행합니다. PineForge는 Pine을 C++로 트랜스파일해
.so로 컴파일합니다. 속도도, 패리티를 둘러싼 트레이드오프도, 배포 방식도 다릅니다. 어느 쪽이 틀린 건 아니지만, 둘 다 다시 짜지 않고서는 한쪽을 다른 쪽에 붙일 수 없습니다. - 배포
- 컴파일된
.so가 있으면 판매자가 소스를 드러내지 않고도 전략을 배포할 수 있습니다. 계획만 있고 아직 만들지 않은 마켓플레이스 구상입니다. PyneCore와는 다른 제품입니다.
PyneCore는 두 번째 기준으로 씁니다. 엔진 저장소의 벤치마크는 엔진 main에서 같은 전략 201개로 PineForge와 PyneCore를 TradingView와 대조해 등급을 매깁니다. 두 엔진의 결과가 갈리면 디프가 어디를 봐야 할지 알려 줍니다.
출처: pineforge-engine의 benchmarks/results/summary.md와 indicator_comparison.md, 커밋 6b45f510
왜 Backtrader를 확장하지 않았나
Backtrader는 Python 알고 트레이딩의 일꾼입니다. 탄탄하고 사랑받는 도구지만, 이 일에는 맞지 않습니다. 커스텀 전략 클래스를 지원하는 Python 네이티브 백테스팅 프레임워크죠. Pine은 다른 언어이고, 동작 방식도 다릅니다. Python 코드를 더 쓴다고 request.security() 룩어헤드, 봉 내부 주문 처리, oca_name 청산 그룹을 흉내 낼 수는 없습니다.
그리고 Backtrader 전략은 Python 소스로 배포됩니다. 컴파일 바이너리 마켓플레이스에는 배포 가능한 아티팩트를 만드는 트랜스파일 단계가 필요합니다. Backtrader 표면에는 그게 없습니다.
다음은
계획 중
- 최적화
- 직접 고른 목표에 맞춰 전략 입력값을 탐색해 주는 호스팅 서비스입니다.
- Studio
- 백테스트하고, 최적화하고, 비교하는 브라우저 작업 공간입니다. 지금 로컬에서 돌릴 수 있는 것과 같은 엔진으로 돌아갑니다. 대기자 명단에 먼저 알려 드립니다.
- 마켓플레이스
- 판매자는 직접 정한 라이선스 제한으로 컴파일된 전략을 게시하고, 구매자는 소스를 보지 않고 자기 데이터로 실행합니다.