Pine Script 지표 vs 전략: 차이점과 각각 쓰는 때
읽는 시간 6분 · 업데이트
TradingView에서 인디케이터와 전략은 Pine Editor에서 거의 똑같아 보입니다. 인디케이터는 차트에 그립니다. 전략은 거래를 시뮬레이션하고 그 거래가 벌었을 금액을 보고합니다. 둘을 혼동하는 것이 과거에서는 훌륭해 보이던 스크립트가 실전에서 실망스러운 가장 흔한 이유입니다. 이 가이드는 결과를 바꾸는 차이와 세 번째 스크립트 유형인 라이브러리를 다룹니다.
인디케이터, 전략, 라이브러리: 각각의 용도
- 인디케이터(
indicator()): 계산하고 그립니다. 레벨,plotshape()로 그린 신호, 대시보드, 시장 편향,alertcondition()으로 만든 알림에 쓰세요. - 전략(
strategy()): 인디케이터가 그릴 수 있는 모든 것에 더해strategy.entry,strategy.exit,strategy.close로 시뮬레이션 주문을 냅니다. TradingView가 그 주문을 실행하고 Strategy Tester를 거래 통계로 채웁니다. - 라이브러리(
library()): 게시한 뒤 다른 스크립트에import해 쓰는 재사용 가능한 함수 모음입니다. 라이브러리는 단독으로 차트에 추가되지 않습니다.
하나의 스크립트는 셋 중 정확히 하나만 선언하므로 한 스크립트가 인디케이터이면서 전략일 수는 없습니다. 흔한 구성은 공용 논리를 담은 라이브러리, 차트와 알림용 인디케이터, 테스트용 전략입니다.
한 줄로 보는 차이
Pine 스크립트의 맨 첫 줄이 어떤 종류인지 선언합니다. indicator()로 시작하는 스크립트는 계산하고 그리는 것, 즉 선, 색, 라벨, 채우기만 할 수 있습니다. 포지션, 체결가, 수익이라는 개념이 없습니다. strategy()로 시작하는 스크립트는 주문 시뮬레이션 엔진을 더합니다. strategy.entry나 strategy.exit같은 함수를 호출할 수 있고, TradingView가 그 주문을 과거 봉에 대해 실행해 Strategy Tester 리포트, 즉 순이익, 최대 낙폭, 승률, 손익비, 시뮬레이션 거래 목록을 만듭니다.
그래서 구분은 이렇습니다. 인디케이터는 조건을 설명하고, 전략은 그 조건이 벌었을 금액을 주장합니다. 두 번째 주장은 첫 번째보다 훨씬 무겁습니다. 주문을 시뮬레이션하는 순간 그 주문이 언제, 어떤 가격에 체결됐는지에 대한 가정들을 한 무더기 물려받기 때문입니다.
백테스트 엔진이 조용히 가정을 두는 곳
전략의 자산 곡선은 그 밑에 깔린 체결 가정만큼만 믿을 수 있습니다. 네 가지 기본값이 피해 대부분을 만듭니다.
- 봉 마감 평가. 기본적으로 테스터는 봉이 마감될 때 논리를 평가합니다. 조건이 봉 자체의 고가, 저가, 종가를 참조하면, 과거 "체결"은 실전 거래가 봉이 끝난 뒤에야 가질 수 있는 정보를 쓸 수 있습니다.
- 다음 봉 시가 체결. 신호에 낸 시장가 주문은 시뮬레이션에서 다음 봉의 시가에 체결됩니다. 빠른 개장에서는 그 찍힌 가격이 실제 체결 위치에서 몇 틱이나 몇 포인트 벗어날 수 있습니다.
- 마찰 없음.
strategy()호출에서commission과slippage를 0으로 두면 모든 시뮬레이션 거래는 공짜인데, 모든 실제 거래는 수수료와 슬리피지를 냅니다. - 표본 크기. 테스터는 열두 번의 거래로 만든 멋진 곡선도 기꺼이 보고합니다. 열두 번의 승리는 엣지의 옷을 입은 잡음입니다.
실전 예시
전략이 비용을 0으로 둔 상태에서 ES 선물 거래 40건에서 +US$4200를 보인다고 합시다. 왕복 수수료 약 US$5를 더하세요(개인 투자자의 선물 수수료는 중개사마다 크게 다르니 본인의 수수료를 쓰세요). 거기에 한쪽당 1틱의 슬리피지를 더합니다. ES에서 1틱은 0.25포인트이고 가치는 US$12.50이므로 양방향 각 1틱이면 US$25입니다. 거래당 마찰이 대략 US$30이고 40건에서 약 US$1200가 되어, 겉보기 +US$4200를 ~US$3000 쪽으로 끌어내립니다. 이것도 점잖은 버전입니다. 변동성 큰 개장에 진입이 몰리면 실제 슬리피지는 1틱보다 넓게 나고 차이는 커집니다. 같은 논리의 인디케이터 버전에서는 이런 마찰이 하나도 나타나지 않습니다. 인디케이터는 애초에 체결을 주장하지 않기 때문입니다. 진짜 엣지와 끼워 맞춘 엣지를 구분하는 방법은 과최적화된 트레이딩 시스템을 알아보는 법을 보세요.
신호: 인디케이터는 plotshape, 전략은 주문
인디케이터는 plotshape()나 plotchar()로 신호를 표시합니다. 조건이 참이었던 봉에 삼각형이나 라벨이 찍힙니다. 아무것도 사지 않으므로 인디케이터에는 거래 통계가 없습니다. 전략은 같은 조건을 strategy.entry()로 주문으로 바꾸고, Strategy Tester가 순이익, 승률, 낙폭, 전체 거래 목록을 보고합니다. 신호 정확도를 측정하려면 조건을 전략으로 옮기고, 현실적인 비용을 더하고, 거래 목록을 읽으세요.
신호 테스트: 마감 시 대 봉 중간
기본적으로 전략은 봉당 한 번, 종가에서 계산하고 시장가 주문은 다음 봉의 시가에 체결됩니다. 세 가지 설정이 이를 바꿉니다.
process_orders_on_close = true는 신호 봉의 종가에 주문을 체결합니다.calc_on_every_tick = true는 모든 실시간 틱마다 다시 계산합니다. 과거에는 완성된 봉만 있으므로 실전과 과거 결과가 다를 수 있습니다.use_bar_magnifier = true는 한 봉 안에 손절과 목표가 모두 있을 때 어느 가격이 먼저 나왔는지 하위 시간 프레임 데이터로 판단합니다.
봉 마감에 확정되는 신호가 백테스트와 실전 결과를 가장 가깝게 맞춰 줍니다.
봉 중간 신호도 여전히 쓸 자리가 있습니다. 가격이 레벨을 넘는 순간 행동해야 하는 돌파 전략은 실전에서 calc_on_every_tick을 쓸 수 있습니다. 다만 백테스트는 봉 안에서 신호가 어떻게 움직이는지 보여 주지 못하므로 먼저 모의 계좌에서 실전 버전을 포워드 테스트하세요. 인디케이터에서는 알림에도 같은 구분이 적용됩니다. "봉 마감 시 한 번"은 확정된 봉을 기다리고, "봉당 한 번"은 봉이 나중에 반대로 마감하더라도 조건이 봉 안에서 처음 참이 될 때 울립니다. Pine Script FAQ에서 알림 설정을 더 자세히 다룹니다.
Pine Screener에서는 어떤 스크립트 유형이 작동하나요?
Pine Screener는 인디케이터를 실행합니다. 전략의 셋업으로 종목을 걸러 내려면 조건을 인디케이터에 넣고 필터링할 값을 plot하세요.
리페인팅이 실제로 뜻하는 것
"리페인팅"은 실시간과 사후에 다른 값을 보여 주는 모든 스크립트에 붙는 말이지만, 이 이름은 잘못 쓰일 때가 많습니다. 솔직한 검증은 한 가지 질문입니다. 같은 정보로, 같은 순간에, 실시간으로 이 결정을 내릴 수 있었는가? 봉 마감에야 확정되는 신호는 단지 마감을 기다리라고 요구할 뿐입니다. 정말로 오해를 부르는 경우는 아직 형성 중인 봉에 그려졌다가 봉이 끝나면 튀는 신호나, 룩어헤드로 가져온 상위 시간 프레임 데이터입니다. 확정된 봉에서 논리를 평가하면 인디케이터를 만들든 전략을 만들든 백테스트와 실전 경험이 서로 정직하게 맞아떨어집니다.
이것이 트레이드 플랜과 연결되는 방식
트레이드 플랜은 고정된 사전 계획 레벨을 건네줌으로써 리페인팅 문제를 의도적으로 비껴갑니다. ES, SPY, NQ, QQQ의 레벨인 일일 레벨은 직전 마감 뒤에 계산되며 세션 중에 움직이지 않습니다. 리페인팅할 것이 없습니다. 각 레벨은 ET 9:30 전에 정해져 그대로 있습니다. 그 선을 그리는 MyLinedChart는 인디케이터처럼 작동합니다. 레벨을 그릴 뿐 아무것도 시뮬레이션하지 않으므로 위의 체결이나 수수료 가정이 하나도 붙지 않습니다. 발행된 레벨이 내 전략이 말하는 것과 다르면 그 불일치가 정보이며, 답은 기다리는 것인 경우가 많습니다.
나만의 레벨로 전략 만들기
대부분의 전략은 트레이더가 이미 손으로 그어 둔 가격, 즉 지지, 저항, 피벗 주변에서 거래합니다. MyLinedChart는 차트의 모든 선, 레벨, 메모, 인디케이터를 JSON, CSV, XLSX 형식으로 내보냅니다. 그 파일을 ChatGPT, Claude, 또는 직접 만든 코드에 넘겨 그 정확한 가격에서 거래하는 Pine Script 전략을 요청하세요. 전략이 어떻게 진입하고 청산할지는 본인과 본인의 AI가 정합니다.
어느 스크립트 유형이든 믿기 전의 짧은 점검표
- 어느 쪽을 들고 있는지 아세요.
indicator()는 그리기만 하고,strategy()는 주문을 시뮬레이션하고 Strategy Tester 리포트를 만듭니다. - 전략에서는 수익 숫자를 하나라도 읽기 전에 실제로 거래하는 종목에 맞는 현실적인
commission과slippage를 설정하세요. - 과거와 실전이 같은 결정 시점을 공유하도록 마감된 봉에서 논리를 확정하세요.
- 의미가 있을 만큼 충분한 거래 수로 결과를 판단하세요.
- 맥락을 보여 주는 오버레이(발행된 레벨 같은)는 실행 권한과 분리해 두세요. 차트는 판단에 정보를 주고, 판단은 직접 적은 규칙이 합니다.
이렇게 쓰면 인디케이터는 렌즈이고 전략은 가설입니다. 믿기 전에 둘 다 실제 체결로 테스트하세요.
관련 글
출처
교육용 콘텐츠입니다. 투자 조언이 아닙니다.
교육용 콘텐츠입니다. 투자 조언이 아닙니다.