TVExtBot의 주문메시지는 TVM:{ ... }:MVT 형태의 짧은 JSON입니다. 이 글에서는 메시지에 들어가는 각 항목의 의미와 값, 그리고 거래소별로 다른 점과 주의사항을 정리했습니다.
메시지가 어떤 주문을 실행하는지 확인하거나, 주문이 의도와 다르게 들어갈 때 원인을 찾는 데 활용해 주세요.

먼저 읽어 주세요
  • 주문메시지는 반드시 확장프로그램의 메시지 작성화면에서 만들어 주세요. 작성화면은 거래소마다 사용할 수 없는 조합을 자동으로 막아 줍니다. 이 글은 만들어진 메시지를 이해하고 점검하기 위한 참고용입니다.
  • 메시지를 직접 고치다 따옴표·쉼표가 하나라도 틀리면 주문이 실행되지 않습니다. 내용을 바꿀 때는 작성화면에서 다시 만들거나 단축 주문메시지를 사용해 주세요.
  • 이 글은 TVExtBot 3.6.99 기준입니다.

1. 주문메시지의 구조

TVM:{"exchange":"binance","account":"기본계정","symbol":"BTC/USDT","type":"limit","side":"sell","price":"last","amount":0.01,"token":"인증키"}:MVT
  • TVM: 으로 시작해서 :MVT 로 끝나며, 가운데는 "항목":값 을 쉼표로 이은 JSON입니다.
  • 하나의 얼러트 메시지 칸에 주문메시지를 최대 10개까지 넣을 수 있고, 넣은 순서대로 실행됩니다. (예: 청산 → 반대 방향 진입)
  • 메시지 작성화면의 주문메시지 리스트에는 최대 600개까지 저장할 수 있습니다.

여러 주문을 순서대로 실행하기

주문메시지를 줄을 바꿔 이어 붙이면, 얼러트 하나로 여러 주문을 위에서부터 순서대로 실행합니다.

예) 기존 포지션을 청산한 뒤 롱 진입 (얼러트 메시지 칸에 입력)

TVM:{"exchange":"bybit","account":"기본계정","symbol":"BTC/USDT","type":"market","side":"sell_close","token":"인증키"}:MVT
TVM:{"exchange":"bybit","account":"기본계정","symbol":"BTC/USDT","type":"market","side":"buy","bal_pct":30,"token":"인증키"}:MVT

예) 같은 거래소의 두 계정에서 동시에 매수

TVM:{"exchange":"bybit","account":"기본계정","symbol":"BTC/USDT","type":"market","side":"buy","bal_pct":30,"token":"인증키"}:MVT
TVM:{"exchange":"bybit","account":"서브계정","symbol":"BTC/USDT","type":"market","side":"buy","bal_pct":30,"token":"인증키"}:MVT

  • 각 메시지는 확장프로그램의 메시지 작성화면에서 하나씩 만들어 복사한 뒤, 얼러트 메시지 칸에 한 줄에 하나씩 붙여넣습니다.
  • 앞의 주문이 실패해도 다음 주문은 계속 실행됩니다. 실패한 주문은 텔레그램 알림으로 확인해 주세요.
  • 메시지마다 주문이 한 번씩 실행되므로 분당 주문 횟수에 모두 포함됩니다.
  • 주문 사이에 간격이 필요하면 뒤 메시지에 지연시간(delay)을 설정합니다.
  • 단축 주문메시지도 같은 방법으로 여러 개를 이어 붙일 수 있습니다.

2. 기본 항목

항목의미값 / 예필수
exchange거래소upbit, binance-futures … (거래소별 값)필수
accountAPI키 등록화면의 계정명기본계정(이전 메시지의 * 도 기본계정) 또는 추가한 계정명필수
symbol거래종목 (코인/마켓)BTC/USDT, BTC/KRW필수 (전부청산 제외)
type주문유형market(시장가), limit(지정가)필수 (전부청산 제외)
side주문방법buy, sell, close … (주문방법 값)필수
price주문가격 (지정가일 때)last, bid, ask, avg 또는 숫자지정가일 때 필수
price_pct주문가격 대비 조정 비율(%)예: -1 = 주문가격보다 1% 낮게선택
amount주문수량 (개수·금액)예: 0.01수량 방식 중 하나
amount_typeamount 의 단위krw, usdt, usdc, usd …선택
bal_pct주문수량 (자산 대비 %)예: 30수량 방식 중 하나
equitybal_pct 기준 자산없음 = 잔액 대비, "y" = 총자산 대비선택
delay주문 실행 지연시간(초)최대 300선택
token인증키 (웹훅 주문용)확장프로그램이 자동으로 넣음웹훅 사용 시

주문가격 price

값의미
last마지막 체결가격
bid매수호가 중 최고가격
ask매도호가 중 최저가격
avg포지션 평균가격 (선물과 업비트에서만 선택 가능, 포지션이 없으면 마지막 체결가격으로 주문)
숫자직접 입력한 가격

price_pct 로 주문가격을 퍼센트만큼 조정할 수 있습니다. 예를 들어 지정가 매수에서 주문가격보다 싸게 사려면 -1, 지정가 매도에서 비싸게 팔려면 1 을 넣습니다.

주문수량 amount / bal_pct / equity

  • amount (개수·금액): 기본은 코인 개수입니다. amount_type 을 krw(빗썸·업비트) 나 usdt(USDT 마켓) 로 하면 원하는 금액만큼 주문합니다. 선물 일부 마켓은 계약 수량으로 입력합니다. (거래소별 주의사항 참고)
  • bal_pct (자산 대비 %): 수수료 때문에 100%로 하면 자산 부족 에러가 날 수 있으니 최대 99% 까지 넣어 주세요.
  • equity:
    • 잔액 대비(기본): 주문 가능한 현금만 기준으로 합니다. 전액 매수(매도) 할 때나, 포지션 안에서 청산할 때 사용합니다.
    • 총자산 대비("equity":"y"): 현금과 코인을 합친 자산이 기준입니다. 분할매수 때 매번 같은 금액으로 주문할 때 사용합니다.
잔액 대비와 총자산 대비의 차이

총자산 300만원 (KRW 100만원 + BTC 100만원어치 + ETH 100만원어치) 일 때

  • 잔액 대비 20% 매수 두 번: 1차 20만원 (100만원의 20%), 2차 16만원 (남은 80만원의 20%) → 금액이 줄어듦
  • 총자산 대비 10% 매수 두 번: 1차 30만원, 2차 30만원 (300만원의 10%) → 금액이 같음

레버리지를 쓰면 입력한 주문수량(개수 또는 %)에 레버리지 배수를 곱한 수량으로 주문합니다.

3. 주문방법 side

값의미사용 가능
buy매수 (롱 진입)전체
sell매도 (숏 진입, 현물은 보유 코인 매도)전체
close청산 (포지션 종료)선물, 한방향(원웨이) 모드
buy_close청산 (매수=롱 포지션 종료)선물, 양방향(헤지) 모드
sell_close청산 (매도=숏 포지션 종료)선물, 양방향(헤지) 모드
close_all전부청산: 해당 계정의 모든 코인 포지션을 시장가로 청산선물
  • 청산에서 수량을 비워 두면 100% 청산합니다. 분할청산은 주문수량(%)을 잔액 대비로 넣어 주세요.
  • close_all 은 종목·주문유형·수량이 없고 항상 시장가 100%로 청산합니다.
TVM:{"exchange":"bybit","account":"기본계정","side":"close_all","token":"인증키"}:MVT

4. 공통 추가 옵션

항목의미값
open_order미체결 주문 취소: 이전 지정가 주문이 체결되지 않았으면 취소한 뒤 주문"cancel" 전부, "cancel-buy" 매수만, "cancel-sell" 매도만
same_order동일주문 연속실행 방지: 거래소·계정·종목·주문유형·주문방법이 직전 주문과 같으면 실행하지 않음"skip" 또는 "skip-10s" ~ "skip-24h" (그 시간 안에서만 적용)
trading_time주문 시간대: 이 시간 안에 발생한 얼러트만 실행 (시간대 밖이면 알림 없이 건너뜀)"09:00-18:00", "21:30-06:00"(다음날 새벽까지)
condition_exp조건식: 참일 때만 주문 실행 (=, <, > 사용, 플레이스홀더 가능, 거짓이면 알림 없이 건너뜀)"buy={{strategy.order.action}}"
조건식 활용 예
  • buy={{strategy.order.action}} : 전략의 주문이 매수일 때만 실행
  • sell={{strategy.order.action}} : 전략의 주문이 매도일 때만 실행
  • {{strategy.order.price}}>100 : 체결가격이 100보다 클 때만 실행

전략 얼러트 하나에 매수용·매도용 주문메시지를 모두 넣고 조건식으로 골라 실행할 수 있습니다. 플레이스홀더 목록은 얼러트 메시지 정리를 참고해 주세요.

동일주문 연속실행 방지는 선물에서 포지션이 없으면 같은 주문이라도 실행됩니다.

5. 선물 전용 옵션

매수(buy)·매도(sell) 주문에서만 쓸 수 있습니다. 청산 주문에는 사용할 수 없습니다.

항목의미값 / 주의
position_close포지션 청산 후 주문: 보유 포지션을 시장가로 청산한 뒤 주문true. 양방향 모드 거래소는 반대 방향 포지션만 청산
reduce_only리듀스 온리: 포지션을 늘리지 않고 줄이기만 함true. 잔액 대비 %일 때만, 한방향 모드에서만. 레버리지·목표가·손절가와 함께 사용 불가
post_only포스트 온리: 지정가 주문이 시장가(테이커)로 체결되지 않게 함true. 지정가일 때만, 테이커가 되면 자동 취소
leverage레버리지 배수종목별 최대 레버리지 이하
margin_type마진모드"isolated"(격리), "cross"(교차). 포지션이 있을 때는 변경 불가
tp_pct / tp_price목표가 발동가격 (주문가격 대비 % / 가격)매수는 플러스, 매도는 마이너스 (예: 매수 10 = 10% 위)
tp_lo_pct / tp_lo_price목표가 지정가격 (넣으면 지정가로 청산, 없으면 시장가)비트겟은 사용 불가
sl_pct / sl_price손절가 발동가격매수는 마이너스, 매도는 플러스 (예: 매수 -5 = 5% 아래)
sl_lo_pct / sl_lo_price손절가 지정가격비트겟은 사용 불가
trailing_stop추적손절매 콜백 비율(%)거래소별 범위가 다름 (아래)
ts_ac_pct / ts_ac_price추적손절매 활성화 가격 (주문가격 대비)매수는 플러스, 매도는 마이너스. 페멕스·BingX는 사용 불가
condition_price조건주문: 가격이 조건가격에 닿을 때만 주문 활성화"last", "avg" 또는 가격
condition_pct조건가격 대비 % (last/avg 일 때 필수)예: 2

조건주문은 목표가·손절가·추적손절매와 함께 쓸 수 없습니다. 바이낸스의 스탑마켓(리밋), 바이빗의 조건부 주문과 같은 기능입니다.

예: 바이낸스 선물 롱 진입 + 레버리지 + 목표가·손절가

TVM:{"exchange":"binance-futures","account":"기본계정","symbol":"BTC/USDT","type":"market","side":"buy","bal_pct":20,"leverage":5,"margin_type":"isolated","tp_pct":3,"sl_pct":-1.5,"token":"인증키"}:MVT

잔액의 20%에 레버리지 5배로 시장가 롱 진입하고, 주문가격 대비 +3%에 목표가, −1.5%에 손절가를 겁니다.

6. 거래소별 exchange 값과 주의사항

거래소exchange 값마켓청산 방식
빗썸bithumbKRW현물 (청산 없음)
업비트upbitKRW현물 (청산 없음)
바이낸스 현물binanceUSDT, USDC, BTC, BNB현물 (청산 없음)
바이낸스 선물binance-futuresUSDT, USDC, USD(COIN-M)거래소 설정에 따름
바이빗 현물bybit-spotUSDT 등현물 (청산 없음)
바이빗 선물bybitUSDT, USDUSDT: 양방향 / USD: 한방향
비트겟 현물bitget-spotUSDT 등현물 (청산 없음)
비트겟 선물bitgetUSDT, USD(코인선물)양방향
페멕스 현물phemex-spotUSDT 등현물 (청산 없음)
페멕스 선물phemexUSDT, USDUSDT: 양방향 / USD: 한방향
OKX 현물okx-spotUSDT 등현물 (청산 없음)
OKX 선물okxUSDT, USDC, USD양방향
BingX 선물bingxUSDT양방향
한국투자증권kisKOSPI, KOSDAQ, NASD, NYSE, AMEX주식 (청산 없음)

“양방향"은 청산에 buy_close / sell_close, “한방향"은 close 를 씁니다. 메시지 작성화면의 주문방법 목록도 이에 맞춰 바뀝니다.

빗썸 · 업비트

  • 원화(KRW) 마켓만 지원합니다. (업비트 BTC·USDT 마켓은 지원하지 않습니다)
  • amount_type 을 krw 로 하면 원하는 원화 금액만큼 주문할 수 있습니다. (예: "amount":100000,"amount_type":"krw" = 10만원어치)
  • 업비트는 주문가격에 포지션 평균가격(avg) 을 선택할 수 있습니다.
  • 현물이므로 레버리지·목표가·손절가 등 선물 옵션과 청산은 사용할 수 없습니다. 매도(sell)로 보유 코인을 팝니다.

바이낸스 (현물 · 선물)

  • 선물의 청산 방식은 바이낸스 거래소 설정의 포지션 모드를 따릅니다. 한방향이면 close, 양방향이면 buy_close/sell_close 입니다. 모드를 바꿨다면 주문메시지를 새로 만들어 주세요. → 바이낸스선물 양방향 포지션 설정법
  • USD 마켓(COIN-M)은 주문수량을 계약 수량으로 입력합니다. (1계약의 USD 금액은 작성화면에 표시됩니다)
  • 추적손절매 콜백 비율은 0.1 ~ 5% 입니다.
  • 리듀스 온리는 한방향 모드에서만 사용할 수 있습니다.

바이빗 (현물 · 선물)

  • USDT 마켓은 양방향 모드, USD 마켓(인버스)은 한방향 모드로 동작합니다.
  • USD 마켓은 주문수량을 USD 금액으로 입력합니다.
  • 레버리지는 0.1 단위로 설정할 수 있습니다.
  • 테스트넷: bybit-testnet(선물), bybit-spot-testnet(현물) → 바이빗 테스트넷 사용법

비트겟

  • 선물은 양방향 모드로 동작하므로 청산은 buy_close/sell_close 를 씁니다. 리듀스 온리는 사용할 수 없습니다.
  • 목표가·손절가의 지정가격(tp_lo_*, sl_lo_*)은 사용할 수 없습니다. 발동가격에서 시장가로 청산합니다.
  • 추적손절매 콜백 비율은 1 ~ 10% 입니다.
  • 카피 트레이딩 대상 코인은 100% 수량 시장가 청산만 가능합니다. (지정가 청산, 부분 청산 미지원)

OKX

  • 선물은 양방향 모드로 동작합니다.
  • 선물은 레버리지를 쓰지 않아도 마진모드(margin_type)가 필수입니다.
  • 주문수량(개수)은 계약 수량입니다. (1계약의 크기는 종목마다 다르며 작성화면에 표시됩니다) USDT·USDC 마켓은 amount_type 으로 금액 기준 주문도 할 수 있습니다.
  • 추적손절매 콜백 비율은 0.1 ~ 100% 입니다.
  • 테스트넷: okx-testnet(선물), okx-spot-testnet(현물)

BingX

  • 선물만 지원하며 양방향 모드로 동작합니다.
  • 추적손절매 콜백 비율은 1 ~ 100% 이고, 활성화 가격(ts_ac_*)은 사용할 수 없습니다.

페멕스

  • USDT 마켓은 양방향 모드, USD 마켓은 한방향 모드로 동작합니다. USD 마켓은 주문수량을 계약 수량(장) 으로 입력합니다.
  • 레버리지는 격리 모드에서만 적용되며 0.1 단위로 설정할 수 있습니다.
  • 추적손절매 활성화 가격(ts_ac_*)은 사용할 수 없습니다.
  • 테스트넷: phemex-testnet(선물), phemex-spot-testnet(현물)

한국투자증권

  • API키 등록 시 계정명에 증권 계좌번호를 입력해야 합니다.
  • 종목은 API키를 등록한 뒤 선택할 수 있습니다. 마켓은 코스피(KOSPI), 코스닥(KOSDAQ), 나스닥(NASD), 뉴욕(NYSE), 아멕스(AMEX)입니다.
  • 주문수량(개수)은 주식 수입니다.
  • 해외주식(미국) 은 지정가 주문만 가능하며, 주문가격에 BID·ASK는 선택할 수 없습니다.
  • 주문이 들어가지 않는다면 해당 시장의 거래 시간인지 먼저 확인해 주세요.

7. 자주 하는 실수

  • 목표가·손절가의 부호를 반대로 넣음: 매수(롱)는 목표가 +, 손절가 −, 매도(숏)는 목표가 −, 손절가 + 입니다. 작성화면이 잘못된 부호를 알려 줍니다.
  • 격리 주문에서 주문수량(%)을 100 넘게 입력: 격리 주문은 반드시 100 이하로 넣어 주세요.
  • 양방향 모드 거래소에서 close 사용: 양방향 모드에서는 buy_close/sell_close 를 써야 합니다. 거래소의 포지션 모드를 바꿨다면 청산 메시지를 새로 만들어 주세요.
  • 청산할 때 총자산 대비(equity) 선택: 포지션 안에서 청산할 때는 잔액 대비를 선택해 주세요. 총자산 대비로 청산하려면 수량(%)을 꼭 넣어야 합니다.
  • 지연시간(delay)을 길게 설정: 최대 300초까지 가능하지만, 길수록 가격이 변해 주문이 실행되지 않을 가능성이 높아집니다. 또 한 얼러트의 전체 처리 시간이 약 530초를 넘으면 남은 주문메시지는 실행되지 않으니, 여러 메시지에 지연시간을 겹쳐 쓰지 않도록 주의해 주세요.
  • 계정명을 바꾼 뒤 기존 메시지를 그대로 사용: account 가 API키 등록화면의 계정명과 같아야 합니다.

그 밖에 주문이 들어가지 않을 때의 점검 순서는 주문이 안 될 때 확인할 것을 참고해 주세요.


파인스크립트 전략의 alert_message 에 주문메시지를 넣는 방법은 지표를 전략으로 바꾸는 방법에서 설명합니다.