가장 많이 쓰이는 지표 세 가지로 만든 파인스크립트 전략 예제입니다.
세 전략 모두 복사해서 바로 백테스트할 수 있고, 설정 화면에 TVExtBot 주문메시지를 붙여넣으면 그대로 자동매매에 쓸 수 있습니다.

먼저 읽어 주세요
  • 예제는 구조를 배우기 위한 코드입니다. 수익을 보장하지 않으며, 종목·시간봉·기간에 따라 결과가 크게 다릅니다.
  • 실전에 쓰기 전에 반드시 백테스트로 검증하고, 테스트넷이나 소액으로 먼저 확인해 주세요.
  • 매매 결과에 대한 책임은 사용자에게 있습니다.

세 전략 비교

전략유형잘 맞는 시장약한 시장
RSI 역추세과매도에서 매수박스권·횡보강한 하락 추세
볼린저밴드 돌파상단 돌파 시 매수변동성이 커지는 추세 초입가짜 돌파가 잦은 횡보
이동평균 교차골든크로스 매수길게 이어지는 추세횡보 (잦은 손절)

세 코드는 모두 같은 구조입니다: 설정 → 지표 계산 → 신호 → 주문(alert_message 포함). 롱 전용이며, 공통으로 손절(%)을 넣었습니다.

1. RSI 역추세 전략

RSI가 과매도(30) 아래로 내려갔다가 다시 올라올 때 매수하고, 과매수(70)에 닿으면 청산합니다.

전략 스크립트 (Pine Script v6)

 1//@version=6
 2strategy("RSI 역추세 전략", overlay = false,
 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
10rsiLen     = input.int(14, "RSI 기간", minval = 2)
11oversold   = input.int(30, "과매도", minval = 1, maxval = 50)
12overbought = input.int(70, "과매수", minval = 50, maxval = 99)
13slPct      = input.float(3.0, "손절 (%)", minval = 0.1, step = 0.1)
14
15entryMsg = input.text_area("", "롱 진입 주문메시지", group = "TVExtBot")
16exitMsg  = input.text_area("", "롱 청산 주문메시지", group = "TVExtBot")
17
18rsi = ta.rsi(close, rsiLen)
19plot(rsi, "RSI", color.purple)
20hline(oversold,   "과매도", color.green)
21hline(overbought, "과매수", color.red)
22
23longSignal = ta.crossover(rsi, oversold)
24exitSignal = ta.crossover(rsi, overbought)
25
26if longSignal and strategy.position_size == 0
27    strategy.entry("Long", strategy.long, alert_message = entryMsg)
28
29if strategy.position_size > 0
30    strategy.exit("SL", "Long", stop = strategy.position_avg_price * (1 - slPct / 100), alert_message = exitMsg)
31    if exitSignal
32        strategy.close("Long", alert_message = exitMsg)

RSI는 가격과 범위가 달라 overlay = false 로 차트 아래 별도 창에 표시합니다.

2. 볼린저밴드 돌파 전략

종가가 볼린저밴드 상단을 돌파하면 매수하고, 중심선(이동평균) 아래로 내려오면 청산합니다. 변동성이 커지며 추세가 시작되는 구간을 노립니다.

전략 스크립트 (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
10bbLen  = input.int(20, "기간", minval = 2)
11bbMult = input.float(2.0, "표준편차 배수", minval = 0.5, step = 0.1)
12slPct  = input.float(3.0, "손절 (%)", minval = 0.1, step = 0.1)
13
14entryMsg = input.text_area("", "롱 진입 주문메시지", group = "TVExtBot")
15exitMsg  = input.text_area("", "롱 청산 주문메시지", group = "TVExtBot")
16
17[basis, upper, lower] = ta.bb(close, bbLen, bbMult)
18plot(basis, "중심선", color.orange)
19p1 = plot(upper, "상단", color.blue)
20p2 = plot(lower, "하단", color.blue)
21fill(p1, p2, color.new(color.blue, 92))
22
23longSignal = ta.crossover(close, upper)
24exitSignal = ta.crossunder(close, basis)
25
26if longSignal and strategy.position_size == 0
27    strategy.entry("Long", strategy.long, alert_message = entryMsg)
28
29if strategy.position_size > 0
30    strategy.exit("SL", "Long", stop = strategy.position_avg_price * (1 - slPct / 100), alert_message = exitMsg)
31    if exitSignal
32        strategy.close("Long", alert_message = exitMsg)

3. 이동평균 교차 전략

빠른 이동평균이 느린 이동평균을 위로 교차(골든크로스)하면 매수, 아래로 교차(데드크로스)하면 청산합니다. 이동평균 종류(SMA/EMA)를 설정에서 고를 수 있습니다.

전략 스크립트 (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
10maType  = input.string("EMA", "이동평균 종류", options = ["SMA", "EMA"])
11fastLen = input.int(20, "빠른 이동평균", minval = 1)
12slowLen = input.int(60, "느린 이동평균", minval = 2)
13slPct   = input.float(3.0, "손절 (%)", minval = 0.1, step = 0.1)
14
15entryMsg = input.text_area("", "롱 진입 주문메시지", group = "TVExtBot")
16exitMsg  = input.text_area("", "롱 청산 주문메시지", group = "TVExtBot")
17
18ma(src, len) => maType == "SMA" ? ta.sma(src, len) : ta.ema(src, len)
19
20fast = ma(close, fastLen)
21slow = ma(close, slowLen)
22plot(fast, "빠른 이동평균", color.orange)
23plot(slow, "느린 이동평균", color.blue)
24
25longSignal = ta.crossover(fast, slow)
26exitSignal = ta.crossunder(fast, slow)
27
28if longSignal and strategy.position_size == 0
29    strategy.entry("Long", strategy.long, alert_message = entryMsg)
30
31if strategy.position_size > 0
32    strategy.exit("SL", "Long", stop = strategy.position_avg_price * (1 - slPct / 100), alert_message = exitMsg)
33    if exitSignal
34        strategy.close("Long", alert_message = exitMsg)

4. 전략을 발전시키는 방법

예제를 그대로 쓰기보다 아래처럼 하나씩 더해 가며 백테스트 결과를 비교해 보세요.

5. TVExtBot으로 자동매매하기

  1. TVExtBot 확장프로그램에서 롱 진입·청산 주문메시지를 만듭니다.
  2. 전략 설정의 TVExtBot 항목에 붙여넣습니다.
  3. 트레이딩뷰에서 얼러트를 추가하고 조건에서 전략을 고른 뒤, 메시지 칸에 {{strategy.order.alert_message}} 를 입력합니다.
  4. 알림 탭의 웹훅 URL 에 본인의 웹훅 URL을 입력합니다. → 웹훅URL에 의한 자동매매

예제에서는 손절과 조건 청산에 같은 청산 메시지를 쓰므로, 어느 쪽으로 청산되어도 같은 주문이 나갑니다.


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