본문 바로가기
카테고리 없음

파인 스크립트 v4에서 v5 변환 잔혹사: "왜 내 전략은 차트에 안 뜰까?"

by 앤스워팜 2026. 1. 30.

자동매매를 공부하다 보면 가장 매력적인 순간이 언제일까요?

바로 구글링이나 커뮤니티에서 수익률이 기가 막힌 보물 같은 '옛날 소스 코드'를 발견했을 때입니다.

 

하지만 기쁜 마음으로 복사해 트레이딩뷰 에디터에 붙여넣는 순간, 우리는 차가운 현실을 마주합니다.

차트에는 아무것도 뜨지 않고 하단에는 알 수 없는 오류들만 가득하죠.

 

저 역시 어제 하루 종일 이 '구형 코드 심폐소생술' 때문에 진땀을 흘렸습니다.

50대인 제가 독학하며 깨달은, 파인 스크립트 v4 코드를 최신 v5로 완벽하게 변환해

차트에 구현하는 실전 노하우를 공유합니다.


1. '자동 변환기'만 믿었다가 낭패 본 사연

트레이딩뷰 에디터에는 [자세히(More)] 메뉴 아래 'v5로 변환'이라는 친절한 버튼이 있습니다.

저도 처음엔 이 버튼만 누르면 모든 게 끝날 줄 알았습니다. 하지만 세상에 공짜는 없더군요.

자동 변환기는 단순히 문법의 겉모양만 바꿀 뿐, 세부적인 로직의 충돌까지는 해결해 주지 못했습니다.

  • 나의 경험: 자동 변환기를 돌렸는데도 Cannot call 'operator <' with 'series[float]' 같은
    해괴한 오류가 떴습니다.
  • 해결책: 자동 변환기는 **'시작점'**일 뿐입니다. 변환기가 바꿔주지 못한 나머지 20%를
    우리가 직접 손봐야 합니다. 특히 변수 선언 방식이 input()에서 input.int()나 input.float()처럼
    더 구체적으로 바뀌었다는 사실을 알아야 합니다.

2. 'ta.' 접두사, 단순한 이름표가 아니었습니다 

v5의 가장 큰 변화는 기술적 지표(Technical Analysis) 함수 앞에 ta.를 붙이는 것입니다.

sma는 ta.sma가 되고, rsi는 ta.rsi가 됩니다.

 

처음에는 "그냥 이름만 바뀐 건데 왜 이렇게 귀찮게 만들었을까?" 싶었습니다.

하지만 직접 코딩을 해보니 이유를 알겠더군요.

 

라이브러리가 방대해지면서 함수들이 섞이는 것을 방지하기 위한

구글과 트레이딩뷰의 깊은 뜻이 있었습니다.

  • 실전 팁: 코드를 직접 수정할 때 Ctrl + F를 눌러 '바꾸기' 기능을 활용하세요.
    sma(를 ta.sma(로 일괄 변경하는 것만으로도 작업 시간을 절반 이상 줄일 수 있습니다.
    저처럼 노안으로 고생하는 분들에게는 이 단축키가 생명줄과 같습니다.

3. 색상(Color)과 투명도 설정의 변화

v4 코드에서 가장 많이 오류가 나는 부분 중 하나가 바로 color와 transp입니다.

예전에는 색상과 투명도를 따로 적었지만, v5에서는 color.new()라는 함수로 이 둘을 하나로 묶어버렸습니다.

  • 오류 예시: plot(close, color=color.red, transp=50) (v4 방식 - 에러 발생)
  • 수정 방법: plot(close, color=color.new(color.red, 50)) (v5 방식 - 성공!)
    이 사소한 괄호 하나와 new라는 단어 하나 때문에 차트에 선이 안 보였던 것이죠.
    제가 이 문제를 해결하고 차트에 빨간 선이 선명하게 그어지는 걸 봤을 때,
    그 쾌감은 낚시터에서 월척을 낚았을 때보다 더 컸습니다.

수정 방법: plot(close, color=color.new(color.red, 50)) (v5 방식 - 성공!)

4. 전략 실행의 핵심, 'strategy.entry'의 변화

지표를 넘어 '전략'으로 가면 문제는 더 복잡해집니다.

v4에서 썼던 매수/매도 함수들이 v5에서는 더 엄격한 규칙을 요구합니다.

특히 when 조건을 쓰던 방식이 많이 달라졌습니다.

  • 나의 시행착오: "골든크로스가 났는데 왜 주문이 안 들어가지?" 하고 한참을 찾았습니다.
  • 해결 방법: v5에서는 if 문 안에 strategy.entry를 넣는 방식을 권장합니다.
    • (v4) strategy.entry("Buy", strategy.long, when=longCondition)
    • (v5) if longCondition { strategy.entry("Buy", strategy.long) }
      이렇게 구조를 바꾸니 막혔던 혈이 뚫리듯 시뮬레이션 결과가 하단에 주르륵 나타나더군요.

마치며: 포기하지 않는 열정이 최고의 알고리즘입니다

1969년생인 저에게 파인 스크립트는 마치 외국어 공부와 같습니다.

어제 알았던 것도 오늘 보면 새롭고, 영어로 된 에러 메시지는 여전히 부담스럽습니다.

 

하지만 하나씩 문제를 해결하며 앤스워팜에 기록을 남기다 보니,

어느새 저만의 '정답 농장'이 조금씩 풍성해지는 기분이 듭니다.

 

파인 스크립트 v4 코드를 v5로 바꾸다 막히셨나요? 너무 자책하지 마세요.

그 과정 자체가 여러분의 실력을 키워주는 가장 좋은 훈련입니다.

 

혹시 변환 중에 도저히 해결 안 되는 코드가 있다면 언제든 댓글로 남겨주세요.

제가 돋보기를 쓰고서라도 함께 고민해 드리겠습니다.


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 앤스워팜