· 简体 · 繁體 · English · 日本語

AI가 작성한 Pine Script는 왜 오류가 날까? 대표 이슈와 해결 방법

ChatGPT 출력을 TradingView Pine Editor에 붙여넣었는데 빨간 오류가 한꺼번에 뜨셨나요? 이 글은 12가지 대표 이슈를 증상 → 원인 → 해결 순서로 설명하고, AI가 로직을 임의로 바꾸지 않도록 지시하는 템플릿과 8단계 사람 검증 흐름을 제공합니다. 오류 문구와 문법 기준은 Pine Editor 및 공식 Pine Script 문서 를 따릅니다.

AI 코드를 TradingView에 붙여넣었더니 전부 빨갛게 표시되나요?

흔한 흐름입니다. "EMA 골든크로스 알림 스크립트를 만들어줘"라고 요청하고 코드를 받아 붙여넣은 뒤 저장하면 빨간 오류 메시지가 쏟아집니다. 더 난감한 경우는 문법을 고친 뒤에도 신호 위치가 어긋나고, 알림이 울리지 않거나, Strategy Tester가 비어 있고, 새로고침 후 마킹이 바뀌는 상황입니다.

이는 매우 일반적입니다. 문제는 보통 버전, 스크립트 타입, 트레이딩 의미 해석이 겹쳐서 발생합니다. Pine Editor컴파일 오류, 런타임 오류, 경고를 분리해서 다루므로, 저장 가능 여부·실행 가능 여부·결과 신뢰성은 각각 다른 질문입니다.

디버깅 원칙: AI에게 전체 코드를 한 번에 다시 쓰게 하지 마세요

"그냥 고쳐줘"라고만 요청하면 오류 줄은 줄었지만 로직이 바뀐 코드를 받기 쉽습니다.

더 안전한 순서는 다음과 같습니다.

  1. Pine Script 버전을 먼저 고정합니다.
  2. indicator인지 strategy인지 먼저 확정합니다.
  3. Pine Editor 오류를 한 줄씩 해결합니다.
  4. 컴파일 통과 후 차트 의미를 점검합니다.
  5. 그다음 알림 / Strategy Tester를 확인합니다.
  6. 마지막으로 리페인트, 데이터, 타임프레임, 실시간 동작을 검증합니다.

선언 함수인 indicator(), strategy(), library()는 유형별로 가능한 기능과 컴파일 제약이 다릅니다. 디버깅 전에 어떤 스크립트 유형인지 반드시 먼저 확인하세요.

문제 1: Pine Script 버전 혼용

증상:

  • Could not find function or function reference / Undeclared identifier
  • The script must contain one declaration statement (선언이 깨졌을 때 함께 발생 가능)
  • 파일 상단은 //@version=5인데 본문은 v6 문법, 또는 v6 요청인데 study()가 남아 있음

원인: 버전마다 문법과 호환성 규칙이 다르며 AI가 구버전 자료를 섞어 출력하는 경우가 많습니다. v6에는 호환성에 영향 주는 변경점이 있어 버전 줄만 바꾸는 방식으로는 충분하지 않습니다.

해결: 단일 버전을 고정하고 AI에게 마이그레이션만 하라고 지시하세요. 예시:

Convert this code to Pine Script v6 only.
Requirements:
1. First line: //@version=6.
2. Use indicator(), not study().
3. No v4/v5 syntax mixed in.
4. Keep the original signal logic; fix version and syntax only.

문제 2: 선언 누락 또는 선언 타입 오류

증상:

  • The script must contain one declaration statement
  • 한 파일에 indicator(...)strategy(...)가 동시에 존재

원인: 선언은 컴파일러에 스크립트 유형을 지정하는 필수 요소입니다. AI가 코드 조각을 섞으면서 선언을 중복하거나 빠뜨리는 경우가 있습니다.

해결:

  • 플롯/알림 목적이면:
    indicator("My Indicator", overlay=true)
  • 백테스트 주문 목적이면:
    strategy("My Strategy", overlay=true)

선언은 반드시 하나만 사용하고, 일부 코드 조각을 전체 스크립트처럼 붙여넣지 마세요.

문제 3: indicator와 strategy 혼동

증상:

  • indicator() 스크립트 내부에 strategy.entry() / strategy.close() 호출이 있음
  • 전략을 원했는데 결과가 indicator() 형태라 Strategy Tester가 비어 있음

원인: 지표는 브로커 에뮬레이터 체인을 구동하지 않으며, 전략만 주문 시뮬레이션을 수행합니다. 차트상 BUY/SELL 표시가 나온다고 해서 백테스트 가능한 전략이 되는 것은 아닙니다.

해결:

  • 알림 전용 지표라면 strategy.*를 제거하고 plot / plotshape / alertcondition 중심으로 구성합니다.
  • 백테스트 목적이라면 strategy()를 사용하고 진입·청산을 주문 함수로 명시하며 "시뮬레이션 결과"임을 분명히 합니다.

문제 4: 함수 누락 또는 네임스페이스 오류

증상: 'ema', 'rsi'를 찾지 못하거나 crossover 미정의 오류가 발생합니다.

원인: 최신 Pine에서는 다수 함수가 ta.* 네임스페이스를 사용합니다: ta.ema(), ta.rsi(), ta.crossover().

fast = ta.ema(close, 20)
slow = ta.ema(close, 50)
bull = ta.crossover(fast, slow)
bear = ta.crossunder(fast, slow)

AI에게 존재하지 않는 함수 생성 금지, 모든 네임스페이스 검증을 명시하세요.

문제 5: input 파라미터 사용 오류

증상: Cannot call input.int with argument..., simple 값이 필요한 곳에 series 전달, 또는 패널 값 변경이 반영되지 않는 문제가 발생합니다.

fastLen = input.int(20, "Fast EMA Length", minval=1)
slowLen = input.int(50, "Slow EMA Length", minval=1)
fast = ta.ema(close, fastLen)

문제 6: 타입 불일치 (series / simple / bool)

증상: An argument of 'series ...' ... but 'simple ...' expected, 또는 로컬 if 블록 안에서 plot 사용으로 인한 오류.

해결: AI에게 타입 추론 근거를 설명하게 하고, 조건 계산은 전역에서 수행한 뒤 plotshape/plot은 최상위 스코프에 배치하세요.

문제 7: 줄바꿈, 들여쓰기, 괄호 정합성

증상: end of line without line continuation, Mismatched input...

signal = (
    close > emaFast and rsiVal > 50
)

문제 8: 히스토리 참조 또는 배열 인덱스 범위 초과

증상: 로드 후 Index is out of bounds, 버퍼 관련 런타임 오류로 스크립트가 멈춤.

if array.size(myArr) > 0
    v = array.get(myArr, 0)

enoughBars = bar_index > 50
signal = enoughBars and close > close[50]

문제 9: request.security() 사용 방식 오류

증상: 히스토리에서는 "완벽해 보이는데" 실시간 또는 새로고침 뒤 신호가 달라지고, 상위 타임프레임 신호가 하위 타임프레임에서 미리 나타나는 것처럼 보입니다.

Review request.security() for repainting risk:
1) Which timeframe is requested?
2) Are confirmed bars used?
3) No future data; if non-repaint cannot be guaranteed, state the risk clearly.

초보자라면 단일 타임프레임 정확화를 먼저 끝낸 뒤 멀티 타임프레임을 별도 단계로 추가하세요.

문제 10: 리페인트 무시

증상: 오류는 없지만 신호가 장중에는 나타났다 종가에 사라지거나, 새로고침 후 위치가 바뀝니다.

rawSignal = ta.crossover(fastMa, slowMa)
signal = rawSignal and barstate.isconfirmed

주의: barstate.isconfirmed는 일부 실시간 흔들림을 줄이지만 모든 리페인트를 제거하지는 않습니다.

문제 11: alertcondition / 알림 동작 불일치

증상: 조건 드롭다운에서 항목이 보이지 않거나, 과도하게 울리거나, 스크립트 수정 후에도 기존 알림이 이전 의미로 동작합니다.

alertcondition(bullSignal, title="Bull Signal", message="Up on {{ticker}}")
alertcondition(bearSignal, title="Bear Signal", message="Down on {{ticker}}")

문제 12: 전략은 실행되지만 백테스트를 신뢰하기 어려운 경우

증상: 손익 곡선이 지나치게 매끄럽고 승률이 비정상적으로 높으며, 회전율이 과도하거나 다른 심볼에서 바로 성능이 무너집니다.

Strategy Tester: 사람 검증 핵심 항목 (요약)
점검 항목중요한 이유
진입 규칙이 명확한가?"감" 기반 모호한 조건을 배제합니다.
청산/반전 규칙이 완전한가?AI 전략은 진입만 있고 청산이 약한 경우가 많습니다.
수수료와 슬리피지비용 미반영 시 단기 손익이 과대평가됩니다.
리페인트 및 미래 데이터히스토리 성능이 비현실적으로 좋아질 수 있습니다.
심볼/타임프레임 교차 검증단일 시장 과최적화를 식별합니다.
소규모 실시간 관찰체결/지연 현실성을 확인합니다.

Pine Script v5 vs v6: AI가 자주 섞는 포인트

주제구버전/혼용 패턴권장 방식
선언study()indicator()
지표+주문 혼합혼용한 가지 목적만 선택하고 단계별 검증
TA 함수ema()/rsi()ta.* 접두사
파라미터하드코딩 매직 넘버input.*
멀티 타임프레임불투명한 security()확정 조건과 리페인트 경계 명시
트리거 타이밍장중 즉시 발화필요 시 barstate.isconfirmed 활용

AI 수정 프롬프트 템플릿 (복사해서 사용)

Fix this TradingView Pine Script for me.

Requirements:
1. Use Pine Script v6.
2. Do not rewrite into a different strategy—fix errors and obvious syntax only.
3. If logic must change, explain why first.
4. Decide indicator vs strategy; if mixed, point it out and correct.
5. Check for v4/v5/v6 mixing.
6. Check missing functions, wrong namespaces, type mismatches, local scope errors.
7. Check repainting risk—especially request.security(), unconfirmed bars, future data.
8. If strategy, remind me backtests ≠ live trading; list fees, slippage, timeframe, data source to verify.
9. Output full copy-pasteable code.
10. End with a "changes made" bullet list.

TradingView error messages:
[paste full red errors from Pine Editor]

Original code:
[paste full Pine Script]

권장 사람 검증 흐름

  1. Pine Editor에서 빨간 오류 0개 확인
  2. 선언이 목적과 일치하는지 확인
  3. 차트 의미를 육안으로 검토
  4. 여러 타임프레임에서 재생 검증
  5. 여러 심볼에서 재생 검증
  6. 실시간 바 동작 관찰
  7. Condition 드롭다운에서 알림 생성 테스트
  8. 전략인 경우 Tester 비용·포지션·데이터 소스·과최적화 점검

요약: AI 자체보다 "계층형 검증" 부재가 문제입니다

오류의 대부분은 모호한 요구사항 + 오래된 자료 혼합 + 스크립트 타입 제약 무시에서 시작됩니다. 순서를 지키세요: 버전 → 스크립트 타입 → 컴파일 → 차트 의미 → 알림 → 백테스트 신뢰성. 최신 문법은 공식 Pine Script 매뉴얼 을 기준으로 확인하는 것이 가장 안전합니다.

FAQ: AI가 작성한 Pine Script 오류

AI가 작성한 Pine Script에서 오류가 나면 코드를 전부 버려야 하나요?

그렇지 않습니다. 먼저 문법 문제와 로직/런타임 문제를 구분하세요. 공식 문서도 컴파일, 런타임, 경고를 서로 다른 층위로 구분해 설명합니다.

AI에게 Pine Script v5로 요청해야 하나요, v6로 요청해야 하나요?

신규 스크립트는 v6를 우선 고려할 수 있지만 파일 전체 API는 한 버전으로 일관되어야 하며, 마이그레이션은 //@version 줄만 바꾸는 작업이 아닙니다.

지표는 그려지는데 Strategy Tester에 거래가 안 나오는 이유는 무엇인가요?

대부분 indicator 상태이기 때문입니다. Strategy Tester를 쓰려면 strategy() 선언과 브로커 에뮬레이터 경로를 충족해야 합니다.

오류는 없는데 새로고침하면 신호가 사라집니다. 왜 그런가요?

리페인트, 미확정 가격, request.security() 사용 방식, 실시간 바가 히스토리로 전환될 때의 확정값 차이를 함께 점검해야 합니다.

백테스트 결과가 좋으면 바로 실전에 적용해도 되나요?

권장하지 않습니다. 실행 가능한 전략이 미래 우위를 보장하지는 않습니다. 비용, 표본, 차트 유형, 리페인트, 과최적화를 교차 검증하고 실시간 관찰을 병행하세요.