Little Bird Trading

Pine Script FAQ: 백테스트와 알림

읽는 시간 4분 · 업데이트

TradingView에서 거의 모든 사람을 걸려 넘어지게 하는 두 가지 Pine 질문을 쉬운 말로 풀어 쓴 FAQ입니다. 전략의 백테스트가 실전 매매의 체감보다 좋아 보이는 이유, 그리고 알림이 기대한 순간이나 가격과 다르게 울리기도 하는 이유입니다. 둘 모두 뿌리는 같습니다. 결정을 내릴 때 실제로 쓸 수 있던 데이터와 봉이 마감된 뒤 눈에 보이는 데이터의 불일치입니다.

인디케이터, 전략, 알림의 차이는 무엇인가요?

인디케이터(indicator())는 그리고 계산만 합니다. 선, 색, 라벨을 표시합니다. 전략(strategy())은 주문을 시뮬레이션합니다. strategy.entry/strategy.exit를 호출하고, 과거 봉에 대해 체결하고, 순이익, 낙폭, 승률이 담긴 Strategy Tester 리포트를 만듭니다. 알림은 조건이 참일 때 TradingView가 울리는 별도의 통지 계층이며, 그 자체로는 아무것도 거래하지 않습니다. 사람들이 백테스트를 약속으로 읽거나 알림이 체결이길 기대할 때 혼란이 시작됩니다. 세 가지는 서로 다른 일입니다. 더 자세한 구분은 인디케이터 vs 전략 가이드를 보세요.

백테스트는 훌륭한데 실전 결과가 왜 다른가요?

현실에 비해 백테스트를 부풀리는 요인이 네 가지 있으며 모두 고칠 수 있습니다.

  • 봉 마감 대 봉 중간 가정. 기본적으로 Strategy Tester는 봉이 마감될 때 논리를 평가합니다. 조건이 현재 봉의 고가/저가나 종가를 봉이 끝난 뒤에야 알 수 있는 방식으로 쓰면, 과거 체결은 실전 거래가 가질 수 없었던 정보를 씁니다.
  • 비현실적인 가격의 기본 체결. 테스터의 시장가 주문은 다음 봉의 시가에 체결되며, 빠른 개장에서는 그 가격이 실전에서 몇 틱이나 몇 포인트 벗어날 수 있습니다.
  • 수수료와 슬리피지 미반영. strategy()에서 commission_value와 slippage를 0으로 두면 모든 시뮬레이션 거래에 마찰이 없습니다. 현실적인 값을 넣으세요. 틱의 일부만큼의 슬리피지만 넣어도 "수익이 나던" 많은 스캘핑 시스템이 마이너스로 바뀝니다. (수수료는 commission_type과 commission_value로 설정합니다.)
  • 너무 작은 표본. 모두 성공한 열두 번의 거래는 엣지라고 부르기에 너무 작은 표본입니다. 어떤 곡선이든 믿기 전에 과최적화된 트레이딩 시스템을 알아보는 법을 보세요.

실제 예시: 비용 없이 ES 거래 40건에서 +US$4200를 보여 주는 시스템도, 왕복 수수료 US$2.50와 진입과 청산 각 방향의 1틱 슬리피지를 더하면 전혀 다르게 보입니다. ES의 1틱은 0.25포인트 = US$12.50이므로 2틱은 US$25.00입니다. US$2.50 수수료를 더하면 거래당 마찰이 US$27.50입니다. 40건이면 약 US$1100이며, 겉보기 +US$4200이 대략 +US$3100로 줄어듭니다. 실제 슬리피지가 1틱보다 넓게 나는 변동성 큰 개장에 진입이 몰리면 더 나빠집니다.

리페인팅이란 무엇이며 스크립트가 고장 났다는 뜻인가요?

꼭 그렇지는 않습니다. "리페인팅"은 스크립트가 과거 봉에서 실시간으로 냈던 값과 다른 값을 보여 주는 현상을 아우르는 말입니다. 솔직한 검증은 간단합니다. 같은 정보로, 같은 순간에, 실시간으로 그 결정을 내릴 수 있었는가? 봉이 마감된 뒤에야 확정되는 신호는 제 역할을 하고 있는 것입니다. 확정 전에 마감을 기다립니다. 문제는 진행 중인 봉에 신호를 그렸다가 봉이 끝나면 옮기는 스크립트나, 룩어헤드를 켠 채 상위 시간 프레임 데이터를 가져오는 스크립트에서 생깁니다. 행동에 옮길 수 있는 신호를 원한다면 완성된 봉에만 반응하는 barstate.isconfirmed(봉 마감)로 평가하세요.

알림이 왜 늦게, 다른 가격에, 또는 두 번 울렸나요?

  • "봉 마감 시 한 번" 대 "봉당 한 번". 진행 중인 봉에서 울리도록 설정한 알림은 조건이 봉 중간에 순간적으로 참이 되는 즉시 발동할 수 있고, 이후 봉이 다른 곳에서 마감하면 "틀려" 보입니다. 봉 마감에 울리는 것은 더 늦지만, 확정된 전략이 실제로 결정을 내리는 순간과 일치합니다(전략은 그다음 봉의 시가에서 행동합니다).
  • 알림 가격은 알림이 울린 순간의 스냅샷입니다. 중개사는 실시간 시장 가격에 체결해 주며, 그 가격은 알림과 주문 사이의 몇 밀리초 동안 움직입니다.
  • 중복 발동은 대개 조건이 여러 틱에 걸쳐 참으로 유지되었는데 알림이 봉당 한 번이 아니라 매 틱마다 울리도록 설정되었다는 뜻입니다.

이것은 트레이드 플랜 방식과 어떻게 이어지나요?

트레이드 플랜은 고정된 사전 계획 레벨을 줌으로써 "내 신호가 리페인팅됐나?"라는 문제 전체를 비껴갑니다. ES, SPY, NQ, QQQ에 장 시작 전에 그려지는 일일 레벨은 직전 마감 뒤에 계산되며 세션 중에 이동하지 않으므로 리페인팅할 것이 없습니다. 각 레벨은 ET 9:30 전에 정해져 그대로 있습니다. MyLinedChart는 그 레벨을 그리기만 하며 주문을 시뮬레이션하지 않으므로 위의 백테스트 체결 가정이 하나도 붙지 않습니다. 발행된 레벨이 내 알림이나 전략과 다르면 그것을 정보로 취급하세요. 답은 기다리는 것인 경우가 많습니다. 용어는 트레이드 플랜 용어집을 보세요.

Pine 결과를 믿기 전의 실용 점검표

  • 백테스트와 실전이 같은 결정 시점을 공유하도록 barstate.isconfirmed로 논리를 확정하세요.
  • 실제로 거래하는 종목에 맞춰 strategy()에서 현실적인 수수료와 슬리피지(commission_type, commission_value, slippage)를 설정하세요.
  • 알림 빈도를 의도적으로 고르세요. 확정에는 봉 마감, 중복 방지에는 봉당 한 번입니다.
  • 의미가 있을 만큼 충분한 거래 수로 결과를 판단하세요.
  • 맥락을 보여 주는 오버레이(발행된 레벨 같은)는 실행 권한과 분리해 두세요. 차트는 판단에 정보를 주고, 판단은 직접 적은 규칙이 합니다.

관련 글

출처

교육용 콘텐츠입니다. 투자 조언이 아닙니다.

교육용 콘텐츠입니다. 투자 조언이 아닙니다.