트레이딩뷰에 무료로 공개된 전략(strategy)을 자동매매에 쓰려면, 주문 함수마다 TVExtBot 주문메시지를 넣도록 코드를 고쳐야 합니다.
전략 변환은 이 작업을 대신해 줍니다. 코드를 붙여넣고 역할별로 주문메시지를 고르면, 매매 로직은 그대로 두고 주문메시지 연결과 백테스트 기간 설정만 추가한 코드를 만들어 줍니다.

영상으로 보기 (2분)

준비물
  • TVExtBot 확장프로그램 최신 버전과 유효한 인증키
  • 변환할 전략의 파인스크립트 코드 — v5·v6 전략(strategy)만 변환할 수 있습니다
  • 역할별 주문메시지(롱 진입·숏 진입·청산) — 미리 단축 주문메시지로 저장해 두세요

※ 지표(indicator)는 변환할 수 없습니다. 지표를 전략으로 바꾸는 방법은 지표를 전략으로 바꾸는 방법을 참고해 주세요.

매매 전에 꼭 확인하세요
  1. 설정을 바꾸면 얼러트를 다시 만드세요. 얼러트는 만들 때의 전략 설정을 저장해 두어서, 주문ID·인증키·기간이나 코드를 바꿔도 기존 얼러트에는 반영되지 않습니다. (「메시지 작성」에서 주문메시지 내용만 바꾸는 것은 바로 반영됩니다)
  2. 수량은 주문메시지대로 주문됩니다. 전략 코드나 Properties의 수량은 백테스트에만 쓰입니다. 백테스트를 실제와 비슷하게 보려면 Properties의 주문 크기를 주문메시지와 맞추세요.
  3. 포지션이 어긋나면 바로 확인하세요. 주문이 실패했거나 거래소에서 직접 매매하면 트레이딩뷰 전략의 포지션과 실제 포지션이 달라져 다음 신호부터 주문이 꼬일 수 있습니다. 에러 알림을 받으면 거래소 포지션을 확인해 주세요.
  4. 처음에는 테스트넷이나 소액으로 시작하세요. 백테스트와 실매매는 체결 가격·수수료·슬리피지가 다릅니다. 실제 주문이 전략 신호대로 나가는지 며칠 확인한 뒤 금액을 늘리세요.

1. 전략 변환이 하는 일

전략의 주문 함수(strategy.entry·strategy.exit·strategy.close 등)가 실행될 때마다 트레이딩뷰는 얼러트를 보냅니다. 전략 변환은 각 주문 함수에 어떤 주문메시지를 보낼지를 연결합니다.

추가되는 것내용
//@strategy_alert_message얼러트 메시지를 주문 함수의 alert_message로 보내는 설정
「TVExtBot」 입력칸전략 설정창에서 인증키와 역할별 주문ID를 입력합니다. 코드에는 인증키가 들어가지 않습니다
alert_message주문 함수마다 역할(롱 진입·숏 청산 등)에 맞는 주문ID를 보냅니다
「백테스트 기간」 입력칸기간 설정이 없는 전략에만 시작일·종료일을 추가하고 진입 조건에만 적용합니다

예제 전략 — 변환 전 (이 매뉴얼의 화면 캡처에 쓴 전략입니다. 복사해서 따라 해 보세요)

 1//@version=5
 2//@strategy_alert_message {{strategy.order.alert_message}}
 3strategy("슈퍼트렌드 전략", overlay=true)
 4
 5atrPeriod = input(10, "ATR Length")
 6factor = input.float(3.0, "Factor", step = 0.01)
 7long_tp_percent = input.float(10, '롱익절(%)') * 0.01
 8short_tp_percent = input.float(10, '숏익절(%)') * 0.01
 9
10[supertrend, direction] = ta.supertrend(factor, atrPeriod)
11
12bodyMiddle = plot((open + close) / 2, display=display.none)
13upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
14downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
15
16fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
17fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
18
19if ta.change(direction) < 0
20    strategy.entry('롱', strategy.long, alert_message = '롱주문메시지 설정')
21    tp = close + (close * long_tp_percent)
22    strategy.exit('롱익절', from_entry = '롱', limit = tp, alert_message = '롱익절 주문메시지 설정')
23
24if ta.change(direction) > 0
25    strategy.entry('숏', strategy.short, alert_message = '숏주문메시지 설정')
26    tp = close - (close * short_tp_percent)
27    strategy.exit('숏익절', from_entry = '숏', limit = tp, alert_message = '숏익절 주문메시지 설정')

변환 후 (색칠한 줄이 추가·변경된 곳 — 원래 있던 alert_message 문구는 TVExtBot 주문메시지로 바뀝니다)

 1//@version=5
 2//@strategy_alert_message {{strategy.order.alert_message}}
 3strategy("슈퍼트렌드 전략", overlay=true)
 4// ── TVExtBot 주문메시지 (전략 설정창에서 입력) ──
 5tvx_token = input.string('', '인증키', group = '「TVExtBot」', confirm = true, display = display.none)
 6tvx_longId = input.string('1a0f5b7927087', '롱 진입 주문ID', group = '「TVExtBot」', tooltip = '반대 포지션이 있으면 청산 후 진입하도록 주문메시지의 「포지션청산후 주문실행」을 켜 두세요', display = display.none)
 7tvx_shortId = input.string('1a128d85379334', '숏 진입 주문ID', group = '「TVExtBot」', tooltip = '반대 포지션이 있으면 청산 후 진입하도록 주문메시지의 「포지션청산후 주문실행」을 켜 두세요', display = display.none)
 8tvx_longCloseId = input.string('1a128dfe2a11d8', '롱 청산 주문ID', group = '「TVExtBot」', display = display.none)
 9tvx_shortCloseId = input.string('1a128e005f4241', '숏 청산 주문ID', group = '「TVExtBot」', display = display.none)
10tvx_msg(id) => id == '' ? '' : 'TVM:{"orderid":"' + id + '","token":"' + tvx_token + '"}:MVT'
11tvx_start = input.time(timestamp('2024-01-01 00:00 +0900'), '시작일', group = '「백테스트 기간」', display = display.none)
12tvx_end = input.time(timestamp('2099-12-31 00:00 +0900'), '종료일(실매매 중에는 미래로)', group = '「백테스트 기간」', display = display.none)
13tvx_inRange = time >= tvx_start and time <= tvx_end
14// ── TVExtBot ──
15
16atrPeriod = input(10, "ATR Length")
17factor = input.float(3.0, "Factor", step = 0.01)
18long_tp_percent = input.float(10, '롱익절(%)') * 0.01
19short_tp_percent = input.float(10, '숏익절(%)') * 0.01
20
21[supertrend, direction] = ta.supertrend(factor, atrPeriod)
22
23bodyMiddle = plot((open + close) / 2, display=display.none)
24upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
25downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
26
27fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
28fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
29
30if (ta.change(direction) < 0) and tvx_inRange
31    strategy.entry('롱', strategy.long, alert_message = tvx_msg(tvx_longId))
32    tp = close + (close * long_tp_percent)
33    strategy.exit('롱익절', from_entry = '롱', limit = tp, alert_message = tvx_msg(tvx_longCloseId))
34
35if (ta.change(direction) > 0) and tvx_inRange
36    strategy.entry('숏', strategy.short, alert_message = tvx_msg(tvx_shortId))
37    tp = close - (close * short_tp_percent)
38    strategy.exit('숏익절', from_entry = '숏', limit = tp, alert_message = tvx_msg(tvx_shortCloseId))

서버가 변환 결과를 원본과 비교해서 TVExtBot 연결 말고는 한 글자도 바뀌지 않았는지 확인한 뒤에 돌려줍니다. 매매 로직이 바뀌는 일은 없습니다.

2. 역할별 주문메시지 준비하기

「메시지 작성」에서 전략에 쓸 주문메시지를 만들어 주문메시지 리스트에 등록해 두세요. 메모에 전략 이름을 적어 두면 고를 때 편합니다.

역할주문메시지 주문방법꼭 확인할 것
롱 진입매수롱·숏을 모두 하는 전략이면 포지션청산후 주문실행을 켭니다
숏 진입매도 (현물은 보유 코인 매도)롱·숏을 모두 하는 전략이면 포지션청산후 주문실행을 켭니다
롱 청산 · 숏 청산청산한방향 모드에서는 롱·숏 청산에 같은 주문메시지를 써도 됩니다
롱·숏 반전 전략
슈퍼트렌드처럼 롱 신호에 숏을 청산하고 롱에 진입하는 전략은, 진입 얼러트 하나로 반대 포지션 청산과 진입을 함께 해야 합니다. 그래서 진입 주문메시지 2개에 「포지션청산후 주문실행」이 켜져 있어야 합니다. 꺼져 있으면 2단계 점검에서 경고가 표시됩니다.

3. 전략 변환하기 (3단계)

확장프로그램 설정화면 왼쪽 메뉴의 「전략 변환」을 엽니다. 변환한 전략이 있으면 목록이 먼저 나오고, [+ 새 전략 변환]을 누르면 아래 단계가 시작됩니다.

전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 4
① 왼쪽 메뉴의 「전략 변환」 ② 코드를 붙여넣고 [코드 확인]

1단계 — 코드 확인

  1. 트레이딩뷰 Pine 에디터에서 전략 코드를 전부 복사해 붙여넣습니다. (공개 스크립트는 「소스 코드」 탭의 복사 버튼을 쓰세요)
  2. [코드 확인]을 누르면 다음을 보여 줍니다.
    • Pine 버전, 주문 함수 수(진입·청산), 방향(롱만·숏만·반전 전략), 백테스트 기간 유무
    • 주의할 점 — 실매매가 백테스트와 달라질 수 있는 곳 (5. 주의할 점 참고)
    • 주문 함수마다 줄 번호·코드·역할
  3. 역할이 「— 역할 선택 —」으로 나오는 줄이 있으면 직접 골라 주세요. 규칙으로 판단하기 어려운 줄(열린 거래의 이름으로 청산하는 코드 등)은 AI가 역할을 제안해서 미리 골라 두고 이유를 함께 보여 줍니다. 맞는지 확인만 하면 됩니다.
  4. [다음: 주문메시지 연결]을 누릅니다.
전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 5
v4 이하 전략은 변환할 수 없습니다. Pine 에디터의 「⋯ → 코드를 v5(또는 v6)로 변환」으로 먼저 버전을 올리고, 백테스트 결과가 같은지 확인한 뒤 그 코드를 붙여넣어 주세요. 자세한 내용은 v6 변경점과 v5 코드 옮기기를 참고해 주세요.

2단계 — 주문메시지 연결

전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 6
역할마다 주문메시지를 고르고 점검 칸이 모두 ✓인지 확인한 뒤 ① [변환하기]

  1. 필요한 역할마다 저장된 주문메시지를 고릅니다. 역할에 맞는 주문메시지(롱 진입이면 매수)가 위쪽에 묶여 나옵니다.
  2. 오른쪽 점검 칸을 확인합니다.
    • ✓ 주문방법이 역할과 맞는지 (롱 진입=매수 등)
    • ✓ 반전 전략이면 진입 주문메시지에 「포지션청산후 주문실행」이 켜져 있는지
    • ✓ 고른 주문메시지들이 같은 거래소·계정·종목인지
  3. 점검에서 경고가 나오면 「메시지 작성」에서 주문메시지를 고쳐 저장하세요. 전략 변환 화면으로 돌아오면 바로 반영됩니다.
  4. 기간 설정이 없는 전략이면 「백테스트 기간 설정 추가」가 체크되어 있습니다.
  5. [변환하기]를 누르면 변환 결과가 나옵니다. 추가된 줄은 초록색으로 표시됩니다. [코드 복사]로 복사합니다.
전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 7
청산을 「연결 안 함」으로 두면
청산 칸을 비워 두면 그 청산은 얼러트를 보내지 않습니다. 예를 들어 익절 청산이 있는 전략을 반전 매매만 하고 싶을 때 씁니다.
다만 트레이딩뷰는 익절가에서 청산하는데 봇은 포지션을 유지하므로 백테스트와 실매매 결과가 달라집니다. 익절을 쓰지 않으려면 전략 설정에서 익절(%) 값을 크게 두세요.
나중에 연결하려면 다시 변환하지 않고 전략 설정창의 해당 주문ID 칸에 주문ID를 넣은 뒤 얼러트를 다시 만들면 됩니다.

전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 8
주문메시지를 고르지 않은 화면 — 진입은 「선택 안 함」, 청산은 「연결 안 함」과 경고가 표시됩니다

3단계 — 트레이딩뷰 설정

전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 9
① 인증키 복사 → 전략 설정창에 붙여넣기 ② 웹훅URL 복사 → 얼러트의 웹훅 URL에 붙여넣기

  1. 트레이딩뷰 Pine 에디터에 변환한 코드를 붙여넣고 저장 → 차트에 추가합니다.

  2. 전략 설정창(톱니바퀴)의 「TVExtBot」 그룹에 인증키를 붙여넣습니다. 3단계 화면의 [인증키 복사] 버튼을 쓰면 됩니다. 주문ID 칸은 고른 주문메시지로 이미 채워져 있습니다.

    전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 10
    ① 「TVExtBot」 그룹 — 인증키를 붙여넣고, 주문ID가 채워져 있는지 확인합니다

  3. 전략 테스터에서 백테스트 결과를 확인합니다. 기간은 「백테스트 기간」 그룹에서 바꿀 수 있습니다.

  4. 얼러트를 만듭니다.

    • 조건: 이 전략
    • 메시지: 기본값({{strategy.order.alert_message}})을 그대로 둡니다
    • 알림: 웹훅 URL을 켜고 3단계 화면의 웹훅URL을 붙여넣습니다

    전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 11
    ① 조건은 변환한 전략 ② 메시지는 기본값 그대로 ③ 알림(Notifications)을 열어 웹훅 설정

    전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 12
    ① Webhook URL을 체크하고 웹훅URL을 붙여넣은 뒤 Apply

  5. 처음에는 테스트넷 주문메시지나 적은 수량으로 동작을 확인한 뒤 실매매에 사용하세요.

실매매 중에는 「백테스트 기간」의 종료일을 미래로 두세요. 종료일이 지나면 진입 얼러트가 나가지 않습니다.
인증키가 차트에 보이지 않게 하세요
트레이딩뷰는 전략의 입력값을 차트 왼쪽 위 상태 줄과 얼러트 이름에 보여 줍니다. 차트 화면을 캡처해 공유하면 인증키가 함께 노출될 수 있습니다.
최신 버전으로 변환한 코드는 「TVExtBot」 입력칸을 상태 줄에 표시하지 않습니다. 이전에 변환한 전략은 전략 설정창의 Style 탭 → 「Inputs in status line」 체크를 해제하거나, 원본 코드로 다시 변환해 주세요.

4. 주문메시지를 바꾸고 싶을 때

코드를 다시 변환할 필요가 없습니다. 주문ID·인증키·백테스트 기간은 모두 전략 설정창의 입력칸이라 트레이딩뷰에서 바로 바꿀 수 있습니다.

  • 주문메시지의 내용(수량·레버리지 등)을 바꾸려면 → 「메시지 작성」에서 수정만 하면 됩니다. 주문ID가 그대로라 다음 얼러트부터 바뀐 내용으로 주문됩니다.
  • 다른 주문메시지로 바꾸려면 → 전략 설정창의 주문ID 칸에 새 주문ID를 넣고, 얼러트를 다시 만듭니다.
  • 역할을 바꾸려면 → 원본 코드로 다시 변환합니다. (이미 변환한 코드는 다시 변환할 수 없습니다)

※ 트레이딩뷰 얼러트는 만들 때의 전략 설정을 저장해 둡니다. 전략 설정창의 값(주문ID·인증키·기간)이나 코드를 바꾼 뒤에는 기존 얼러트를 지우고 새로 만들어야 반영됩니다.

5. 주의할 점 (변환 결과의 경고)

변환 결과에 다음 경고가 나오면, 실매매가 백테스트와 달라질 수 있으니 확인해 주세요.

경고내용
가격(stop·limit) 진입트레이딩뷰에서 체결될 때 얼러트가 나가고, 봇은 그때 주문메시지대로(보통 시장가) 주문하므로 체결 가격이 다를 수 있습니다
일부 청산qty_percent 등으로 일부만 청산합니다. 청산 주문메시지의 수량을 같은 비율로 맞춰 주세요
피라미딩같은 방향으로 여러 번 진입합니다. 진입 주문메시지의 「포지션청산후 주문실행」이 켜져 있으면 추가 진입이 앞 포지션을 청산합니다
미래 값 참조 (lookahead_on)백테스트가 미래 값을 봐서 실매매보다 좋게 나옵니다
봉 안에서 계산calc_on_every_tick 등 — 실시간에는 한 봉에서 얼러트가 여러 번 나갈 수 있습니다
기간·시간 조건 안의 청산조건 밖에서는 청산 얼러트가 나가지 않아 포지션이 남을 수 있습니다
if 밖의 진입백테스트 기간 조건을 붙이지 못한 진입입니다. 기간과 상관없이 진입합니다
실행 안 되는 청산어떤 진입도 쓰지 않는 이름을 청산하는 코드라 트레이딩뷰에서도 실행되지 않습니다
v6에서 없어진 문법when=·transp= — v5에서는 동작합니다
청산을 연결하지 않음「연결 안 함」으로 둔 청산 — 봇은 포지션을 유지합니다

6. 변환한 전략 목록과 주문메시지 관리

전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 13
① [+ 새 전략 변환]으로 다음 전략을 변환합니다 ② 복사(코드 다시 복사)·수정(주문메시지 다시 연결)·설정(트레이딩뷰 설정 안내)·삭제

전략 변환 - 공개 전략을 TVExtBot 자동매매용으로 바꾸기 - 화면 14
「메시지 작성」 목록 — ① 전략이 쓰는 주문메시지의 표시 ② 거래소 칸에 마우스를 올리면 메모와 사용 중인 전략이 보입니다

  • 변환한 전략은 「전략 변환」 첫 화면 목록에 저장됩니다. 연결한 주문메시지를 보고 [복사]로 코드를 다시 복사하거나 [설정]으로 트레이딩뷰 설정 안내를 다시 볼 수 있습니다.
  • [수정]을 누르면 예전에 고른 주문메시지가 미리 선택된 2단계가 열립니다. 주문메시지만 바꿔 다시 변환하면 목록의 같은 전략이 새 코드로 바뀝니다. 트레이딩뷰에 코드를 다시 붙여넣고 얼러트를 다시 만들어 주세요.
  • 연결한 주문메시지가 지워졌거나 비활성화되면 목록에 표시가 나옵니다.
  • 「메시지 작성」 목록에서는 전략이 쓰는 주문메시지의 거래소 이름 옆에 표시가 붙고, 거래소 칸에 마우스를 올리면 어느 전략의 어떤 역할인지 보입니다.
  • 전략이 쓰는 주문메시지를 삭제·비활성화하려고 하면 사용 중인 전략을 알려 주고 한 번 더 확인합니다. 삭제하면 그 전략의 얼러트는 주문되지 않습니다.

※ 목록은 최대 50개까지 저장됩니다. 가득 차면 안 쓰는 전략을 지운 뒤 변환해 주세요.
※ 목록은 이 PC의 확장프로그램에만 저장됩니다. 다른 PC와 동기화되지 않고, 확장프로그램을 삭제 후 다시 설치하면 사라집니다. (트레이딩뷰에 붙여넣은 전략과 얼러트에는 영향이 없습니다)

7. AI 역할 제안과 사용 횟수

대부분의 전략은 규칙으로 바로 변환되어 횟수 제한 없이 무료입니다. 규칙으로 판단하기 어려운 주문 함수가 있을 때만 AI가 역할을 제안하고, 이때 하루 사용 횟수가 1회 줄어듭니다.

구분하루 AI 사용 횟수
유료 인증키10회
트라이얼 인증키2회
  • 횟수는 매일 한국시간 자정에 다시 채워집니다. 남은 횟수는 「전략 변환」 화면 오른쪽 위에 표시됩니다.
  • 같은 코드를 다시 확인하면 이전 AI 결과를 다시 써서 횟수가 줄지 않습니다.
  • 횟수를 다 쓰면 AI 제안 없이 진행되고, 역할을 직접 고르면 됩니다.
  • 트라이얼 인증키는 전략 2개까지 변환할 수 있습니다. 이미 변환한 전략은 주문메시지를 바꿔 다시 변환할 수 있고, 그 밖의 전략은 유료 인증키로 이용해 주세요. (원본 코드를 고치면 다른 전략으로 봅니다)

8. 자주 묻는 질문

Q. 전략 코드가 서버에 저장되나요?
A. 아니요. 코드는 확인·변환할 때만 서버로 보내고 저장하지 않습니다. AI 제안 결과만 같은 코드를 다시 확인할 때 쓰려고 하루 동안 보관하고 이틀 안에 자동으로 지웁니다. 변환한 전략 목록은 내 PC의 확장프로그램에만 저장됩니다.
Q. 원본 전략이 업데이트되면?
A. 새 원본 코드로 다시 변환해 주세요. 같은 이름의 전략은 목록에서 덮어쓸지 물어봅니다.
Q. 「이미 변환한 코드입니다」라고 나와요.
A. TVExtBot 입력칸이 들어 있는 코드는 다시 변환하지 않습니다. 주문ID는 전략 설정창에서 바꾼 뒤 얼러트를 다시 만들고, 역할을 바꾸려면 원본 코드로 다시 변환해 주세요.
Q. 「인증키 사용 기간이 끝났습니다」라고 나와요.
A. 전략 변환은 사용 기간 안의 인증키로만 쓸 수 있습니다. 기간을 연장한 뒤 이용해 주세요.
Q. 얼러트는 울리는데 주문이 안 돼요.
A. 전략 설정창의 인증키·주문ID가 맞는지, 주문메시지가 비활성화되지 않았는지 확인해 주세요. 주문ID 칸에 「주문ID 입력」이 그대로 있으면 「등록되지 않은 주문ID」 알림이 옵니다. 그 밖에는 문제 해결을 참고해 주세요.
전략 얼러트의 원리와 직접 alert_message를 넣는 방법은 파인스크립트 전략을 사용하여 자동매매하는 방법에서 볼 수 있습니다.