TVExtBot가이드
전략 자동매매

전략 변환

트레이딩뷰에 공개된 파인스크립트 전략(strategy)·지표(indicator) 코드를 붙여넣으면 TVExtBot 확장프로그램이 단축 주문메시지(주문ID)를 연결하고 백테스트 기간 설정을 추가해 줍니다. 선택형 진입 필터, 코드 확인, 주문메시지 연결, 트레이딩뷰 얼러트 설정까지 설명합니다.

트레이딩뷰에 무료로 공개된 전략(strategy)이나 지표(indicator)를 자동매매에 쓰려면, 주문 함수마다 TVExtBot 주문메시지를 넣도록 코드를 고쳐야 합니다. 공개 스크립트는 전략 변환으로 연결하는 것이 기본입니다.

전략 변환은 이 작업을 대신해 줍니다. 코드를 붙여넣고 역할별로 주문메시지를 고르면, 주문메시지 연결과 백테스트 기간 설정을 추가한 코드를 만들어 줍니다. 기본 변환은 원래 매매 로직을 유지하며, 필터를 선택하면 진입에 추가 조건을 적용합니다.

영상으로 보기 (2분)

준비물

  • TVExtBot 확장프로그램 최신 버전과 유효한 인증키
  • 변환할 파인스크립트 코드 — v5·v6 전략(strategy), 또는 얼러트 조건(alertcondition)이 있는 v5·v6 지표(indicator)
  • 역할별 주문메시지(롱 진입·숏 진입·청산) — 미리 단축 주문메시지로 저장해 두세요

※ 지표(indicator)는 신호로 주문하는 전략으로 바꾼 뒤 같은 순서로 변환합니다. 8. 지표 변환을 참고해 주세요. 얼러트 조건이 없는 지표는 지표를 전략으로 바꾸는 방법을 참고해 주세요.

매매 전에 꼭 확인하세요

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

1. 전략 변환이 하는 일

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

추가되는 것내용
//@strategy_alert_message얼러트 메시지를 주문 함수의 alert_message로 보내는 설정
「TVExtBot」 입력칸전략 설정창에서 인증키와 역할별 주문ID를 입력합니다. 코드에는 인증키가 들어가지 않습니다
alert_message주문 함수마다 역할(롱 진입·숏 청산 등)에 맞는 주문ID를 보냅니다
「필터」 입력칸 (선택)선택한 필터를 정해진 템플릿으로 추가합니다. 같은 방향의 필터를 모두 통과해야 진입하며, 별도의 청산 줄은 그대로입니다. 필터 설정 자세히 보기
「백테스트 기간」 입력칸기간 설정이 없는 전략에만 시작일·종료일을 추가하고 진입 조건에만 적용합니다

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

//@version=5
//@strategy_alert_message {{strategy.order.alert_message}}
strategy("슈퍼트렌드 전략", overlay=true)

atrPeriod = input(10, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)
long_tp_percent = input.float(10, '롱익절(%)') * 0.01
short_tp_percent = input.float(10, '숏익절(%)') * 0.01

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

if ta.change(direction) < 0
    strategy.entry('롱', strategy.long, alert_message = '롱주문메시지 설정')
    tp = close + (close * long_tp_percent)
    strategy.exit('롱익절', from_entry = '롱', limit = tp, alert_message = '롱익절 주문메시지 설정')

if ta.change(direction) > 0
    strategy.entry('숏', strategy.short, alert_message = '숏주문메시지 설정')
    tp = close - (close * short_tp_percent)
    strategy.exit('숏익절', from_entry = '숏', limit = tp, alert_message = '숏익절 주문메시지 설정')

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

//@version=5
//@strategy_alert_message {{strategy.order.alert_message}}
strategy("슈퍼트렌드 전략", overlay=true)
// ── TVExtBot 주문메시지 (전략 설정창에서 입력) ──
tvx_token = input.string('', '인증키', group = '「TVExtBot」', confirm = true, display = display.none)
tvx_longId = input.string('1a0f5b7927087', '롱 진입 주문ID', group = '「TVExtBot」', tooltip = '반대 진입으로 포지션을 전환하는 전략이면 주문메시지의 「포지션청산후 주문실행」을 켜 두세요(별도 청산 후 진입하는 전략은 실행 순서를 확인하세요)', display = display.none)
tvx_shortId = input.string('1a128d85379334', '숏 진입 주문ID', group = '「TVExtBot」', tooltip = '반대 진입으로 포지션을 전환하는 전략이면 주문메시지의 「포지션청산후 주문실행」을 켜 두세요(별도 청산 후 진입하는 전략은 실행 순서를 확인하세요)', display = display.none)
tvx_longCloseId = input.string('1a128dfe2a11d8', '롱 청산 주문ID', group = '「TVExtBot」', display = display.none)
tvx_shortCloseId = input.string('1a128e005f4241', '숏 청산 주문ID', group = '「TVExtBot」', display = display.none)
tvx_msg(id) => id == '' ? '' : 'TVM:{"orderid":"' + id + '","token":"' + tvx_token + '"}:MVT'
tvx_start = input.time(timestamp('2024-01-01 00:00 +0900'), '시작일', group = '「백테스트 기간」', display = display.none)
tvx_end = input.time(timestamp('2099-12-31 00:00 +0900'), '종료일(실매매 중에는 미래로)', group = '「백테스트 기간」', display = display.none)
tvx_inRange = time >= tvx_start and time <= tvx_end
// ── TVExtBot ──

atrPeriod = input(10, "ATR Length")
factor = input.float(3.0, "Factor", step = 0.01)
long_tp_percent = input.float(10, '롱익절(%)') * 0.01
short_tp_percent = input.float(10, '숏익절(%)') * 0.01

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

if (ta.change(direction) < 0) and tvx_inRange
    strategy.entry('롱', strategy.long, alert_message = tvx_msg(tvx_longId))
    tp = close + (close * long_tp_percent)
    strategy.exit('롱익절', from_entry = '롱', limit = tp, alert_message = tvx_msg(tvx_longCloseId))

if (ta.change(direction) > 0) and tvx_inRange
    strategy.entry('숏', strategy.short, alert_message = tvx_msg(tvx_shortId))
    tp = close - (close * short_tp_percent)
    strategy.exit('숏익절', from_entry = '숏', limit = tp, alert_message = tvx_msg(tvx_shortCloseId))

서버가 변환 결과를 원본과 비교해 허용된 변경인지 확인합니다. 기본 변환은 원래 매매 로직을 유지하며, 필터를 선택하면 진입에 추가 조건을 적용합니다.

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

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

역할주문메시지 주문방법꼭 확인할 것
롱 진입매수반대 진입으로 포지션을 전환하는 전략이면 포지션청산후 주문실행을 켭니다
숏 진입매도 (현물은 보유 코인 매도)반대 진입으로 포지션을 전환하는 전략이면 포지션청산후 주문실행을 켭니다
롱 청산 · 숏 청산청산한방향 모드에서는 롱·숏 청산에 같은 주문메시지를 써도 됩니다

롱·숏 진입이 모두 있는 전략

슈퍼트렌드처럼 롱 신호에 숏을 청산하고 롱에 진입하는(반대 진입으로 포지션을 전환하는) 전략은, 진입 얼러트 하나로 반대 포지션 청산과 진입을 함께 해야 합니다. 이런 전략이면 진입 주문메시지 2개에 「포지션청산후 주문실행」을 켜 주세요.

익절·손절 청산(strategy.exit)이 있어도 마찬가지입니다. 익절·손절 얼러트는 가격에 닿을 때만 나가므로, 그 전에 신호가 바뀌면 반대 진입 얼러트만 옵니다.

반대 신호에서 strategy.close로 먼저 포지션을 닫은 뒤 진입하는 전략은 꼭 켜지 않아도 됩니다(청산 주문메시지를 연결해야 합니다). 2단계 점검은 이 기준으로 경고(⚠ 켜 주세요)와 안내(꺼도 됨)를 나눠 보여 줍니다.

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

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

① 왼쪽 메뉴의 「전략 변환」 ② 코드를 붙여넣고 [코드 확인]

1단계 — 코드 확인

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

v4 이하 전략은 변환할 수 없습니다. Pine 에디터의 「⋯ → 코드를 v5(또는 v6)로 변환」으로 먼저 버전을 올리고, 백테스트 결과가 같은지 확인한 뒤 그 코드를 붙여넣어 주세요. 자세한 내용은 v6 변경점과 v5 코드 옮기기를 참고해 주세요.

2단계 — 주문메시지 연결

역할마다 주문메시지를 고르고 점검 칸을 확인한 뒤 ① [변환하기]

  1. 필요한 역할마다 저장된 주문메시지를 고릅니다. 역할에 맞는 주문메시지(롱 진입이면 매수)가 위쪽에 묶여 나옵니다.
  2. 오른쪽 점검 칸을 확인합니다.
    • ✓ 주문방법이 역할과 맞는지 (롱 진입=매수 등)
    • ✓ 롱·숏 진입이 모두 있으면 진입 주문메시지의 「포지션청산후 주문실행」 — 반대 포지션을 신호 청산(strategy.close)으로 닫지 않는 전략은 ⚠ 경고가 나오니 켜 주세요. 신호 청산이 연결돼 있으면 「꺼도 됩니다」 안내만 나옵니다
    • ✓ 고른 주문메시지들이 같은 거래소·계정·종목인지
  3. 점검 내용을 확인하고, 전략 동작에 맞지 않는 설정이 있으면 「메시지 작성」에서 주문메시지를 고쳐 저장하세요. 전략 변환 화면으로 돌아오면 바로 반영됩니다.
  4. 기간 설정이 없는 전략이면 「백테스트 기간 설정 추가」가 체크되어 있습니다.
  5. 필요하면 「필터 추가(선택)」를 펼칩니다. 이동평균 위치·상위 타임프레임 추세·ADX 추세 강도·RSI 범위·매매 시간대 중에서 고르고, 각 필터의 롱·숏 적용 방향을 선택합니다. 「차트에 표시」는 기본으로 켜져 있습니다. 필터별 설정과 예시를 참고하세요.
① 필터 추가(선택)를 펼칩니다. ② 빠른 선택을 누릅니다. ③ 롱·숏 적용 방향을 확인합니다. ④ 차트에 표시 여부를 정합니다. 화면은 이동평균 위치 하나를 켠 예시입니다.
  1. [변환하기]를 누르면 변환 결과가 나옵니다. 추가된 줄은 초록색으로 표시됩니다. [코드 복사]로 복사합니다. 코드가 길면 접혀 있고 「전체 펼치기」로 모두 볼 수 있습니다.
  2. 변환 결과 아래 전략 설명은 AI가 자동으로 씁니다(지표·진입·청산 요약). 직접 고칠 수 있고(500자까지) 목록에 표시됩니다. 유료 인증키는 「서버에도 저장」을 체크하면 다른 PC에서도 목록에 보입니다. (6. 목록 참고)

필터는 진입만 제한합니다. 반전 전략과 청산 연결을 꼭 확인하세요.

  • 반전 전략: 반대 진입이 막히면 기존 포지션도 청산되지 않을 수 있습니다.
  • 청산 연결: 연결하지 않으면 TradingView만 청산하고 실제 계좌에는 포지션이 남을 수 있습니다.
  • 적용 제외 줄: 일부 코드에는 필터를 붙이지 못합니다. 변환 결과의 경고와 줄 번호를 확인하세요.
① [코드 복사]로 변환한 코드를 복사합니다 (아래에 전략 설명과 「서버에도 저장」이 있습니다)

변환 중 「변환 결과가 원본과 달라져서 중단했습니다」 같은 에러가 나면 [관리자에게 보내기]를 눌러 주세요. 전략 코드와 에러 내용이 전송되며(30일 보관 후 삭제, 인증키는 보내지 않음) 확인해서 고치겠습니다.

청산을 「연결 안 함」으로 두면

청산 칸을 비워 두면 그 청산은 얼러트를 보내지 않습니다. 예를 들어 익절 청산이 있는 전략을 반전 매매만 하고 싶을 때 씁니다.

다만 트레이딩뷰는 익절가에서 청산하는데 봇은 포지션을 유지하므로 백테스트와 실매매 결과가 달라집니다. 익절을 쓰지 않으려면 전략 설정에서 익절(%) 값을 크게 두세요.

나중에 연결하려면 다시 변환하지 않고 전략 설정창의 해당 주문ID 칸에 주문ID를 넣은 뒤 얼러트를 다시 만들면 됩니다.

주문메시지를 고르지 않은 화면 — ① 진입은 「선택 안 함」(설정창에서 주문ID를 직접 입력) ② 청산은 「연결 안 함」과 경고가 표시됩니다

3단계 — 트레이딩뷰 설정

① 인증키 복사 → 전략 설정창에 붙여넣기 ② 웹훅URL 복사 → 얼러트의 웹훅 URL에 붙여넣기
  1. 트레이딩뷰 Pine 에디터에 변환한 코드를 붙여넣고 저장 → 차트에 추가합니다.
  2. 전략 설정창(톱니바퀴)의 「TVExtBot」 그룹에 인증키를 붙여넣습니다. 3단계 화면의 [인증키 복사] 버튼을 쓰면 됩니다. 주문ID 칸은 고른 주문메시지로 이미 채워져 있습니다.
① 「TVExtBot」 그룹 — 인증키를 붙여넣고, 주문ID가 채워져 있는지 확인합니다
  1. 필터를 추가했다면 전략 설정창의 「필터」 → 「필터 사용」으로 전체 필터를 켜고 끌 수 있습니다. 백테스트 기간 등 다른 설정은 유지한 채 필터 효과를 비교하세요. 하나씩 추가하고 다른 기간에서도 확인하세요. 기본값은 수익을 보장하지 않습니다.
① 필터 사용 ② 차트에 표시 ③ 상태 표 위치 ④ 롱·숏 이격 범위(최소~최대 %). 기본값 0~0은 최소 제한 없음, 최대 0은 상한 없음입니다.
  1. 전략 테스터에서 백테스트 결과를 확인합니다. 기간은 「백테스트 기간」 그룹에서 바꿀 수 있습니다.
  2. 얼러트를 만듭니다.
    • 조건: 이 전략
    • 메시지: 기본값({{strategy.order.alert_message}})을 그대로 둡니다
    • 알림: 웹훅 URL을 켜고 3단계 화면의 웹훅URL을 붙여넣습니다
① 조건은 변환한 전략 ② 메시지는 기본값 그대로 ③ 알림(Notifications)을 열어 웹훅 설정
① Webhook URL을 체크하고 웹훅URL을 붙여넣은 뒤 Apply
  1. 처음에는 테스트넷 주문메시지나 적은 수량으로 동작을 확인한 뒤 실매매에 사용하세요. 얼러트가 제대로 오는지만 보려면 목록의 「테스트 모드」를 켜면 주문 없이 확인할 수 있습니다(아래).

실매매 중에는 「백테스트 기간」의 종료일을 미래로 두세요. 종료일이 지나면 진입 얼러트가 나가지 않습니다.

인증키가 차트에 보이지 않게 하세요

트레이딩뷰는 전략의 입력값을 차트 왼쪽 위 상태 줄과 얼러트 이름에 보여 줍니다. 차트 화면을 캡처해 공유하면 인증키가 함께 노출될 수 있습니다.

최신 버전으로 변환한 코드는 「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에서는 동작합니다
청산을 연결하지 않음「연결 안 함」으로 둔 청산 — 봇은 포지션을 유지합니다
가격 손절 없음strategy.exit의 stop·loss·trail이 없는 전략입니다. 반대 신호나 청산 조건이 올 때까지 포지션을 유지하므로, 급변에 대비하려면 진입 주문메시지의 「손절가」를 고려하세요(트레이딩뷰 백테스트에는 반영되지 않습니다)
한쪽만 진입 (allow_entry_in)한 방향만 진입하도록 설정된 전략입니다. 반대 방향 진입 신호는 트레이딩뷰가 청산으로 처리하므로 청산 주문메시지로 연결합니다
필터 관련필터가 반대 진입을 막으면 포지션이 남을 수 있는 진입, 필터를 붙이지 못한 진입, 차트 그리기 한도로 표시를 뺀 경우 — 필터 설정의 주의사항을 참고하세요

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

① [+ 새 전략 변환]으로 다음 전략을 변환합니다 ② 복사(코드 다시 복사)·수정(주문메시지 다시 연결)·설정(트레이딩뷰 설정 안내)·삭제 ③ 서버 저장 켜기/끄기(유료) ④ 설명 고치기

「메시지 작성」 목록 — ① 전략이 쓰는 주문메시지의 표시 ② 거래소 칸에 마우스를 올리면 메모와 사용 중인 전략이 보입니다

  • 변환한 전략은 「전략 변환」 첫 화면 목록에 저장됩니다. 연결한 주문메시지를 보고 [복사]로 코드를 다시 복사하거나 [설정]으로 트레이딩뷰 설정 안내를 다시 볼 수 있습니다.
  • 전략 이름 아래에 설명이 2줄까지 보이고, 누르면 전부 펼쳐집니다. 「설명 고치기」로 직접 고칠 수 있습니다(500자까지). 설명이 없는 예전 전략은 「AI 설명 만들기」를 누르면 AI가 씁니다.
  • 서버 저장(유료 인증키): 전략마다 「서버 저장 안 함」 버튼을 누르면 서버에도 저장되어 「서버 저장됨 ✓」로 바뀝니다. 서버에 저장한 전략은 다른 PC나 확장프로그램을 다시 설치한 뒤에도 목록에 다시 나타납니다. 다시 누르면 서버에서 지우고 이 PC에만 남깁니다. 서버에 저장한 전략을 목록에서 삭제하면 서버에서도 지워집니다.
  • 목록에 필터 개수가 표시됩니다. [수정]을 누르면 주문메시지와 함께 백테스트 기간·필터 값·차트 표시 설정을 복원한 2단계가 열립니다. 설정을 바꿔 다시 변환하면 목록의 같은 전략이 새 코드로 바뀝니다. 트레이딩뷰에 코드를 다시 붙여넣고 얼러트를 다시 만들어 주세요.
  • 연결한 주문메시지가 지워졌거나 비활성화되면 목록에 표시가 나옵니다.
  • 얼러트 수신 표시(v4.0.1부터): 연결한 주문메시지마다 마지막으로 받은 얼러트의 결과와 시각이 보입니다. 주문됨, 주문 안 함(비활성화·주문시간대 밖 등 이유), 에러(이유), 테스트 수신 성공(주문 안 함)으로 표시되고, 에러면 「에러 메시지 보기」로 자세한 내용을 볼 수 있습니다. 마우스를 올리면 받은 횟수와 마지막 주문 시각이 보입니다.
① 얼러트가 와서 주문이 실행된 경우 — 「주문됨」과 시각이 표시됩니다
① 주문이 실패한 경우 — 「에러」와 이유가 빨간색으로 표시됩니다 ② [에러 메시지 보기]로 자세한 내용과 해결 방법을 확인합니다

「얼러트 받은 기록이 없습니다」가 나오면

아직 얼러트가 울리지 않았다면 기다려 주세요. 울렸는데도 기록이 없으면 서버가 누구의 얼러트인지 알 수 없었던 경우라 트레이딩뷰 얼러트를 확인해 주세요.

  1. 웹훅 URL이 [설정]의 웹훅URL과 같은지
  2. 메시지 칸에 {{strategy.order.alert_message}}만 있는지
  3. 전략 설정창 「TVExtBot」 그룹의 인증키가 맞는지 — 설정을 바꿨다면 얼러트를 다시 만들어야 적용됩니다

※ 얼러트 수신 기록은 화면에 들어올 때 다시 받으며, 30초에 한 번까지만 받습니다. 바로 확인하려면 「다시 확인」을 누르세요. 90일 동안 얼러트가 오지 않은 주문ID의 기록은 지워집니다.

  • 테스트 모드: 전략마다 「테스트 모드」 버튼을 누르면 연결한 주문메시지를 한꺼번에 테스트 모드로 바꿉니다. 얼러트가 와도 주문 직전에 멈추고 「얼러트 수신」에 테스트 수신으로 표시됩니다. 자세한 내용은 테스트 모드로 확인하기를 보세요.
    • 모든 역할이 테스트 모드면 전략 이름 옆에 「테스트 모드」, 일부만이면 「일부 테스트 n/m」이 붙고, 테스트 모드가 아닌 역할에는 「실제 주문」이 표시됩니다. 이때는 [전체 켜기]·[전체 끄기]로 맞출 수 있습니다.
    • 다른 전략과 같은 주문메시지를 쓰면 그 전략도 함께 바뀌므로, 확인창에서 함께 바뀌는 전략을 알려 줍니다.
    • 확인이 끝나면 [테스트 모드 끄기]를 눌러야 실제로 주문합니다.
① [테스트 모드] — 누르면 이 전략에 연결한 주문메시지를 한꺼번에 테스트 모드로 바꿉니다(켜면 [테스트 모드 끄기]로 바뀝니다) ② 역할마다 마지막 얼러트 결과
  • 「메시지 작성」 목록에서는 전략이 쓰는 주문메시지의 거래소 이름 옆에 표시가 붙고, 거래소 칸에 마우스를 올리면 어느 전략의 어떤 역할인지 보입니다.
  • 전략이 쓰는 주문메시지를 삭제·비활성화하려고 하면 사용 중인 전략을 알려 주고 한 번 더 확인합니다. 삭제하면 그 전략의 얼러트는 주문되지 않습니다.

※ 목록은 최대 50개까지 저장됩니다. 가득 차면 안 쓰는 전략을 지운 뒤 변환해 주세요.

※ 목록은 기본으로 이 PC의 확장프로그램에만 저장됩니다. 서버 저장을 켜지 않은 전략은 확장프로그램을 삭제 후 다시 설치하면 사라집니다. (트레이딩뷰에 붙여넣은 전략과 얼러트에는 영향이 없습니다)

※ 서버 저장은 유료 인증키만 사용할 수 있습니다. 인증키 기간이 끝나도 서버에 저장한 전략은 지우지 않으며, 기간을 연장하면 다시 보입니다.

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

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

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

8. 지표(indicator) 변환

영상으로 보기 (3분)

지표는 주문 함수가 없어서 그대로는 전략 얼러트를 만들 수 없습니다. 전략 변환에 지표를 붙여넣으면, 지표 작성자가 얼러트 조건(alertcondition)으로 정해 둔 매수·매도 신호로 주문하는 전략(strategy)으로 바꾼 뒤 전략과 같은 순서(주문메시지 연결·백테스트 기간·필터)로 변환합니다. 전략으로 바뀌므로 전략 테스터로 백테스트를 볼 수 있고, 얼러트도 전략처럼 하나만 만들면 됩니다.

바뀌는 것내용
선언indicator( → strategy(. 「신호 봉 종가에 체결」을 켜면 끝에 process_orders_on_close = true를 붙입니다
코드 끝고른 신호가 새로 켜진 봉에서 strategy.entry(진입)·strategy.close(청산)로 주문하는 블록
그 밖전략 변환과 같습니다 — 「TVExtBot」 입력칸, 주문메시지 연결, 백테스트 기간, 필터(선택)

원래 지표의 계산·차트 표시는 한 줄도 바꾸지 않습니다.

변환할 수 있는 지표

  • v5·v6 지표이고 얼러트 조건(alertcondition)이 있어야 합니다. 트레이딩뷰에서 이 지표로 얼러트를 만들 때 조건 목록에 「Buy」「Sell」 같은 항목이 나오는 지표입니다.
  • 차트에 화살표·모양만 그리는 지표(plotshape만 있음)는 변환하지 않습니다. 예고·참고 표시가 섞여 있어 어느 것이 매매 신호인지 정할 수 없기 때문입니다. 이런 지표는 [코드 보내기]로 보내 주시면 지원 범위를 정하는 데 참고합니다.
  • indicator()에 timeframe 인수를 쓰는 지표는 전략에 없는 인수라 변환할 수 없습니다.

1단계 — 신호 역할 고르기

지표를 붙여넣고 [코드 확인]을 누르면 주문 함수 표 대신 신호 표가 나옵니다. 신호마다 롱 진입·숏 진입·롱 청산·숏 청산·연결 안 함 중에서 고릅니다.

  • 제목에 Buy·Sell·Long·Short·매수·매도 같은 단어가 있으면 그 역할로 미리 골라 둡니다. 제목에 단어가 없어 이름·모양으로 짐작한 신호는 「확인 필요」가 붙습니다.
  • 방향을 알 수 없는 신호(예: "Touch POC", "Session Started")와 롱·숏을 합친 신호(예: "Any signal")는 「연결 안 함」으로 둡니다.
  • 같은 조건이 여러 줄에 있으면(차트 표시 켜기 스위치만 다른 경우 등) 한 신호로 묶습니다.
  • 매수·매도 신호가 여러 쌍(예: Trampoline BUY/SELL, Squeeze BUY/SELL …)인 지표는 「어떤 신호로 매매할까요?」에서 한 쌍을 고릅니다. 여러 쌍을 함께 쓰면 신호가 섞여 매매가 잦아지므로 기본은 모두 「연결 안 함」입니다. 표에서 직접 고를 수도 있습니다.
  • 표 아래 「이렇게 매매합니다」에 고른 역할로 어떻게 매매하는지 나옵니다. 예를 들어 롱 진입·숏 진입만 고르면 반대 신호에 포지션을 뒤집고, 롱 진입·롱 청산만 고르면 롱만 매매합니다.
  • 진입이 없거나, 한 방향 진입만 있고 그 포지션을 닫을 신호(반대 진입이나 청산)가 없으면 다음 단계로 넘어가지 않습니다. 닫을 신호가 없으면 첫 진입 뒤로 주문이 나가지 않기 때문입니다.

2단계 — 주문메시지 연결

전략과 같습니다. 지표에는 「신호 봉 종가에 체결」 체크가 하나 더 있습니다(기본 켬).

켬 (권장)끔
백테스트 체결신호 봉 종가다음 봉 시가 (트레이딩뷰 기본값)
얼러트가 나가는 때신호 봉 마감다음 봉 첫 틱 (봉 마감 직후)

봇은 얼러트를 받으면 바로 시장가로 주문하므로, 켜 두면 백테스트 체결가가 실제 주문 가격에 더 가깝습니다. 실매매 시점은 두 경우가 거의 같습니다.

3단계와 주의할 점

  • 얼러트는 전략과 같이 조건 = 이 전략으로 하나만 만듭니다. 원래 지표의 얼러트 조건(alertcondition)은 전략에서는 쓰이지 않습니다.
  • 원래 지표에 alert()가 있으면 얼러트 조건 아래 선택을 「주문 체결만(Order fills only)」으로 바꾸세요. 그대로 두면 원래 alert() 메시지도 웹훅으로 나가 봇에서 오류가 납니다. (변환 결과와 3단계에 안내가 나옵니다)
  • 백테스트는 트레이딩뷰 기본값(주문 1계약·수수료 0)으로 계산되어 실제보다 좋게 나올 수 있습니다. 전략 설정창 「속성」에서 초기 자본·주문 크기·수수료를 맞춘 뒤 결과를 보세요. 봇의 주문 수량은 주문메시지대로입니다.
  • 조건이 참인 동안 계속 켜져 있는 신호(예: "가격이 이평선 위")는 신호가 새로 켜진 봉에서만 주문합니다. 청산한 뒤에는 신호가 꺼졌다 다시 켜져야 다시 진입합니다.
  • 지표가 차트 시간봉 등을 제한하는 경우(runtime.error) 그 조건 밖에서는 차트에 오류가 납니다. 원래 지표가 허용하는 시간봉·심볼로 바꾸세요.
  • 목록에서는 이름 옆에 「지표」 표시가 붙고, [수정]하면 고른 신호 역할과 체결 설정을 이어받습니다.

9. 자주 묻는 질문

Q. 전략 코드가 서버에 저장되나요?

A. 기본은 저장하지 않습니다. 코드는 확인·변환할 때만 서버로 보내고, AI 제안 결과만 같은 코드를 다시 확인할 때 쓰려고 하루 동안 보관했다가 이틀 안에 자동으로 지웁니다. 변환한 전략 목록은 기본으로 내 PC의 확장프로그램에만 저장됩니다. 유료 인증키로 전략마다 서버 저장을 켜면 코드와 연결 정보를 서버에도 저장해 다른 PC·재설치 후에 불러옵니다. 오류 보고나 지표 코드 보내기는 [보내기]를 누른 경우에만 코드를 보내며 30일 보관 후 지워집니다. 서비스 개선을 위해 코드 확인·변환 결과의 요약(성공 여부·주문 함수 수·경고 종류 등)은 코드 없이 90일 동안 기록합니다.

Q. 원본 전략이 업데이트되면?

A. 목록에서 그 전략을 다음 순서로 다시 변환하세요.

[수정] → 2단계에서 [이전] → 코드 칸에 새 원본 코드 붙여넣기 → [코드 확인] → 역할 확인 후 [다음: 주문메시지 연결] → 연결·점검 확인 → [변환하기]

마지막으로 저장한 주문메시지·필터·백테스트 기간 중 새 코드에도 필요한 역할의 설정을 이어받고, [변환하기]를 누르면 그 항목이 새 코드로 바뀝니다. 바뀐 코드를 트레이딩뷰에 다시 붙여넣고 얼러트를 다시 만들어 주세요. [+ 새 전략 변환]으로 변환하면 이름이 같아도 설정을 가져오지 않고 새 항목으로 추가됩니다.

※ 트라이얼 인증키는 코드가 바뀌면 다른 전략으로 세므로, 변환할 수 있는 전략 2개 중 하나를 씁니다.

Q. 「이미 변환한 코드입니다」라고 나와요.

A. TVExtBot 입력칸이 들어 있는 코드는 다시 변환하지 않습니다. 주문ID는 전략 설정창에서 바꾼 뒤 얼러트를 다시 만들고, 역할을 바꾸려면 목록의 [수정]을 누르거나 원본 코드로 다시 변환해 주세요.

Q. 지표를 붙여넣었는데 「얼러트 조건(alertcondition)이 없는 지표」라고 나와요.

A. 지표 변환은 지표 작성자가 얼러트 조건으로 정해 둔 신호만 씁니다. 차트에 화살표만 그리는 지표는 지표를 전략으로 바꾸는 방법으로 직접 전략을 만들거나, [코드 보내기]로 보내 주세요.

Q. 「인증키 사용 기간이 끝났습니다」라고 나와요.

A. 전략 변환은 사용 기간 안의 인증키로만 쓸 수 있습니다. 기간을 연장한 뒤 이용해 주세요.

Q. 얼러트는 울리는데 주문이 안 돼요.

A. 먼저 「전략 변환」 목록의 얼러트 수신 표시에서 마지막 결과와 이유를 확인해 주세요. 그다음 전략 설정창의 인증키·주문ID가 맞는지, 주문메시지가 비활성화되지 않았는지 확인해 주세요. 주문ID 칸에 「주문ID 입력」이 그대로 있으면 「등록되지 않은 주문ID」 알림이 옵니다. 그 밖에는 문제 해결을 참고해 주세요.

전략 얼러트의 원리와 직접 alert_message를 넣는 방법은 파인스크립트 전략을 사용하여 자동매매하는 방법에서 볼 수 있습니다.

이 페이지에서