트레이딩뷰에 공개된 지표(indicator)는 차트에 신호를 보여줄 뿐, 백테스트나 자동매매에 바로 쓸 수는 없습니다.
이 글에서는 슈퍼트렌드 지표를 예로 들어 지표를 전략(strategy)으로 바꾸는 방법과, 바꾼 전략을 TVExtBot으로 자동매매하는 방법까지 순서대로 설명합니다.

이 글에서 배우는 것
  • 지표(indicator)와 전략(strategy)의 차이
  • 지표를 전략으로 바꾸는 4단계
  • 전략 테스터로 백테스트 결과 확인하기
  • 전략의 매수·매도 신호로 TVExtBot 자동매매하기

※ 예제 코드는 파인스크립트 최신 버전인 v6 기준입니다. 파인스크립트가 처음이라면 먼저 파인스크립트 기초를 참고해 주세요.

1. 지표와 전략의 차이

구분지표 (indicator)전략 (strategy)
선언indicator()strategy()
역할차트에 선·신호 표시가상 주문을 내고 손익 계산
백테스트불가전략 테스터에서 수익률·승률·최대 낙폭 확인
얼러트alertcondition() 으로 조건마다 따로 설정주문이 실행될 때마다 얼러트 발생 (하나의 얼러트로 매수·매도 모두 처리)

자동매매에서 전략을 쓰면 좋은 점은 두 가지입니다.

  • 실제 돈을 넣기 전에 과거 데이터로 성과를 검증할 수 있습니다.
  • 매수·매도·청산을 얼러트 하나로 처리할 수 있어 설정이 간단합니다.

2. 예제 지표: 슈퍼트렌드

먼저 바꿀 지표입니다. 추세가 상승으로 바뀌면 매수 신호, 하락으로 바뀌면 매도 신호를 표시합니다.

지표 스크립트

 1//@version=6
 2indicator("슈퍼트렌드 지표", overlay = true)
 3
 4atrPeriod = input.int(10, "ATR 기간", minval = 1)
 5factor    = input.float(3.0, "ATR 배수", minval = 0.1, step = 0.1)
 6
 7[st, dir] = ta.supertrend(factor, atrPeriod)   // dir < 0 : 상승 추세, dir > 0 : 하락 추세
 8
 9plot(dir < 0 ? st : na, "상승 추세", color.green, style = plot.style_linebr)
10plot(dir > 0 ? st : na, "하락 추세", color.red,   style = plot.style_linebr)
11
12buySignal  = ta.change(dir) < 0   // 하락 → 상승으로 바뀐 봉
13sellSignal = ta.change(dir) > 0   // 상승 → 하락으로 바뀐 봉
14
15plotshape(buySignal,  "매수", shape.triangleup,   location.belowbar, color.green, size = size.small)
16plotshape(sellSignal, "매도", shape.triangledown, location.abovebar, color.red,   size = size.small)
17
18alertcondition(buySignal,  "매수 신호", "슈퍼트렌드 매수")
19alertcondition(sellSignal, "매도 신호", "슈퍼트렌드 매도")

3. 전략으로 바꾸는 4단계

① indicator() 를 strategy() 로 바꾸고 백테스트 조건 넣기

strategy("슈퍼트렌드 전략", overlay = true,
     initial_capital     = 10000,                          // 초기 자본
     default_qty_type    = strategy.percent_of_equity,     // 주문 수량 방식: 자산 대비 %
     default_qty_value   = 10,                             // 한 번에 자산의 10%
     commission_type     = strategy.commission.percent,
     commission_value    = 0.05,                           // 수수료 0.05%
     slippage            = 1)                              // 슬리피지 1틱

※ 수수료와 슬리피지를 넣지 않으면 백테스트 수익률이 실제보다 좋게 나옵니다. 사용하는 거래소의 수수료로 꼭 맞춰 주세요.

② 매수·매도 신호는 그대로 둡니다

buySignal, sellSignal 처럼 지표에서 만든 신호 변수는 그대로 사용합니다. 공개 지표를 바꿀 때도 신호가 되는 조건(plotshape, alertcondition 에 쓰인 조건)을 찾아 변수로 만들어 두면 됩니다.

③ 신호에 맞춰 주문 함수 호출하기

if buySignal
    strategy.entry("Long", strategy.long)      // 롱 진입
if sellSignal
    strategy.close("Long")                     // 롱 청산
  • strategy.entry() : 포지션 진입. 반대 방향 포지션이 있으면 자동으로 청산하고 진입합니다.
  • strategy.close() : 해당 이름의 포지션 청산.

④ 주문마다 TVExtBot 주문메시지 연결하기

주문 함수에 alert_message 를 넣으면, 그 주문이 실행될 때 얼러트로 이 메시지가 전송됩니다. 메시지는 코드에 직접 쓰지 않고 설정 화면(input)에서 붙여넣을 수 있게 만들어 두면 편합니다.

buyMsg  = input.text_area("", "매수 주문메시지", group = "TVExtBot")
sellMsg = input.text_area("", "매도(청산) 주문메시지", group = "TVExtBot")

if buySignal
    strategy.entry("Long", strategy.long, alert_message = buyMsg)
if sellSignal
    strategy.close("Long", alert_message = sellMsg)

4. 완성된 전략 전체 코드

롱 전용으로 동작하고, 설정에서 숏 포지션 사용을 켜면 매도 신호에 숏으로 진입합니다.

전략 스크립트 (Pine Script v6)

 1//@version=6
 2strategy("슈퍼트렌드 전략", overlay = true,
 3     initial_capital   = 10000,
 4     default_qty_type  = strategy.percent_of_equity,
 5     default_qty_value = 10,
 6     commission_type   = strategy.commission.percent,
 7     commission_value  = 0.05,
 8     slippage          = 1)
 9
10// ── 설정 ─────────────────────────────
11atrPeriod  = input.int(10, "ATR 기간", minval = 1)
12factor     = input.float(3.0, "ATR 배수", minval = 0.1, step = 0.1)
13allowShort = input.bool(false, "숏 포지션 사용")
14
15buyMsg       = input.text_area("", "롱 진입 주문메시지",  group = "TVExtBot")
16closeLongMsg = input.text_area("", "롱 청산 주문메시지",  group = "TVExtBot")
17sellMsg      = input.text_area("", "숏 진입 주문메시지",  group = "TVExtBot")
18closeShortMsg= input.text_area("", "숏 청산 주문메시지",  group = "TVExtBot")
19
20// ── 지표 계산 (지표 스크립트와 동일) ──────
21[st, dir] = ta.supertrend(factor, atrPeriod)
22plot(dir < 0 ? st : na, "상승 추세", color.green, style = plot.style_linebr)
23plot(dir > 0 ? st : na, "하락 추세", color.red,   style = plot.style_linebr)
24
25buySignal  = ta.change(dir) < 0
26sellSignal = ta.change(dir) > 0
27
28// ── 주문 ─────────────────────────────
29if buySignal
30    if strategy.position_size < 0
31        strategy.close("Short", alert_message = closeShortMsg)
32    strategy.entry("Long", strategy.long, alert_message = buyMsg)
33
34if sellSignal
35    if strategy.position_size > 0
36        strategy.close("Long", alert_message = closeLongMsg)
37    if allowShort
38        strategy.entry("Short", strategy.short, alert_message = sellMsg)

반대 포지션을 strategy.close() 로 먼저 청산하는 이유는, 청산과 진입 주문메시지를 각각 따로 TVExtBot으로 보내기 위해서입니다.

5. 백테스트 결과 확인하기

  1. Pine 에디터에 전체 코드를 붙여넣고 저장 → 차트에 추가를 누릅니다.
  2. 차트 아래 전략 테스터 탭에서 순이익, 승률, 최대 낙폭(MDD), 거래 횟수를 확인합니다.
  3. 설정(⚙)에서 ATR 기간·배수를 바꿔 가며 결과를 비교해 봅니다.
백테스트를 볼 때 주의할 점
  • 백테스트는 과거 성과일 뿐, 앞으로의 수익을 보장하지 않습니다.
  • 거래 횟수가 너무 적으면(수십 회 이하) 결과를 믿기 어렵습니다. 기간을 늘려 확인해 주세요.
  • 여러 값을 손으로 바꿔 보기 번거롭다면 TVExtBot 옵티마이저로 설정값 조합을 자동으로 백테스트할 수 있습니다.

6. TVExtBot으로 자동매매 연결하기

  1. TVExtBot 확장프로그램의 메시지 작성 화면에서 롱 진입·청산(숏을 쓰면 숏 진입·청산) 주문메시지를 작성합니다.
  2. 전략 설정 → TVExtBot 항목에 각 주문메시지를 붙여넣습니다.
  3. 트레이딩뷰에서 얼러트 추가 → 조건에서 슈퍼트렌드 전략을 선택합니다.
  4. 메시지 칸에 아래 내용만 입력합니다. 주문이 실행될 때마다 해당 주문메시지로 바뀌어 전송됩니다.
    {{strategy.order.alert_message}}
  5. 알림 → 웹훅 URL에 확장프로그램 메시지 작성 화면에 있는 본인의 웹훅 URL을 입력하고 저장합니다.

얼러트 설정 화면과 웹훅 URL 입력 방법은 파인스크립트 전략을 사용하여 자동매매하는 방법과 웹훅URL에 의한 자동매매에 그림과 함께 자세히 나와 있습니다.

7. 자주 하는 실수

  • 얼러트 조건에서 전략 대신 지표를 선택: 지표 스크립트를 선택하면 {{strategy.order.alert_message}} 가 동작하지 않습니다. 반드시 전략 스크립트를 선택해 주세요.
  • 전략 설정을 바꾼 뒤 얼러트를 그대로 둠: 얼러트는 만들 때의 설정으로 동작합니다. 설정값이나 주문메시지를 바꿨다면 얼러트를 다시 만들어 주세요. (단축 주문메시지를 쓰면 주문 내용은 얼러트를 다시 만들지 않고 바꿀 수 있습니다 → 단축 주문메시지 사용법)
  • 테스트 없이 실거래 시작: 처음에는 테스트넷이나 소액으로 주문이 제대로 들어가는지 확인해 주세요. → 바이빗 테스트넷 사용법

동영상으로 보기

슈퍼트렌드 지표를 전략으로 바꿔 자동매매하는 과정을 영상으로도 확인할 수 있습니다.


TVExtBot이 처음이라면 코인 주식 자동매매 시작하기부터 따라 해 보세요.