주문메시지 항목 설명과 거래소별 주의사항
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":"인증키"}:MVTTVM:으로 시작해서: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 … (거래소별 값) | 필수 |
account | API키 등록화면의 계정명 | 기본계정(이전 메시지의 * 도 기본계정) 또는 추가한 계정명 | 필수 |
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_type | amount 의 단위 | krw, usdt, usdc, usd … | 선택 |
bal_pct | 주문수량 (자산 대비 %) | 예: 30 | 수량 방식 중 하나 |
equity | bal_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 값 | 마켓 | 청산 방식 |
|---|---|---|---|
| 빗썸 | bithumb | KRW | 현물 (청산 없음) |
| 업비트 | upbit | KRW | 현물 (청산 없음) |
| 바이낸스 현물 | binance | USDT, USDC, BTC, BNB | 현물 (청산 없음) |
| 바이낸스 선물 | binance-futures | USDT, USDC, USD(COIN-M) | 거래소 설정에 따름 |
| 바이빗 현물 | bybit-spot | USDT 등 | 현물 (청산 없음) |
| 바이빗 선물 | bybit | USDT, USD | USDT: 양방향 / USD: 한방향 |
| 비트겟 현물 | bitget-spot | USDT 등 | 현물 (청산 없음) |
| 비트겟 선물 | bitget | USDT, USD(코인선물) | 양방향 |
| 페멕스 현물 | phemex-spot | USDT 등 | 현물 (청산 없음) |
| 페멕스 선물 | phemex | USDT, USD | USDT: 양방향 / USD: 한방향 |
| OKX 현물 | okx-spot | USDT 등 | 현물 (청산 없음) |
| OKX 선물 | okx | USDT, USDC, USD | 양방향 |
| BingX 선물 | bingx | USDT | 양방향 |
| 한국투자증권 | kis | KOSPI, 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 에 주문메시지를 넣는 방법은 지표를 전략으로 바꾸는 방법에서 설명합니다.