Pine 알림에서 바이낸스 실주문까지 — 3가지 주류 방식과 완벽한 구축 절차, 리스크 관리로 24시간 자동 운영.
TradingView는 세계 최대 차팅·전략 커뮤니티입니다. Pine 스크립트로 작성한 전략을 바이낸스에서 자동 실행하려면 Webhook이 다리입니다 — 알림이 발동되면 TradingView가 JSON을 지정 URL로 POST하고, 서버가 받아 바이낸스 API로 매매를 실행합니다.
전체 흐름: TradingView 알림 → Webhook URL(자체 서버 또는 외부) → 바이낸스 API → 실주문.
장점: 시각적 전략 로직, 풍부한 Pine 생태계. 단점: 서명·리스크·재연결 직접 처리 또는 유료 플랫폼 사용.
| 방식 | 난이도 | 비용 | 지연 | 추천 대상 |
|---|---|---|---|---|
| 자체 VPS 브릿지 | 중-상 | $5-10/mo | 500ms-1.5s | 코드 가능, 통제 원함 |
| 외부 플랫폼 (3Commas 등) | 낮음 | $15-50/mo | 800ms-2s | 운영 부담 회피 |
| 바이낸스 API + 로컬 스크립트 | 낮음 | 전기료 | 로컬 네트워크 의존 | 상시 켜둔 PC 보유 |
VPS에 Node.js / Python / Go 소형 서비스를 운영, 공개 URL로 받아 바이낸스 API 호출. 가장 유연하며 모든 커스텀 리스크 로직 추가 가능.
3Commas, Cryptohopper, Wundertrading, Aleeert.com 등. 즉시 사용 가능한 Webhook URL 제공, 바이낸스 API만 연결. 편하지만 월 비용·플랫폼 위험·API 위탁.
TradingView 데스크톱은 외부 스크립트 실행 가능, 로컬 Python으로 바이낸스 호출. 무료지만 PC 항상 켜야 함.
다음은 Pine v5 EMA 골든크로스 롱 전략 예시, alert_message로 JSON 전송:
//@version=5
strategy("EMA Cross Webhook", overlay=true)
fast = ta.ema(close, 12)
slow = ta.ema(close, 26)
longCond = ta.crossover(fast, slow)
shortCond = ta.crossunder(fast, slow)
if longCond
strategy.entry("L", strategy.long, alert_message='{"passphrase":"YOUR_SECRET","action":"buy","symbol":"BTCUSDT","qty":0.01,"type":"MARKET"}')
if shortCond
strategy.close("L", alert_message='{"passphrase":"YOUR_SECRET","action":"close","symbol":"BTCUSDT"}')
핵심 포인트:
alert_message는 유효한 JSON 형식 필수passphrase는 공유 시크릿, URL 추측 공격 방지{{strategy.order.alert_message}}https://your-vps.com/tv-webhookDigitalOcean/Vultr/Hetzner $5/월 1코어 1G 충분. 도쿄 또는 싱가포르가 바이낸스 지연 최저.
TradingView는 HTTPS만 POST. Cloudflare 무료 SSL 또는 Caddy/Nginx + Let's Encrypt 사용.
Express(Node) 또는 FastAPI(Python)로 POST 엔드포인트, passphrase 검증 후 바이낸스 호출.
pm2 또는 systemd로 자동 재시작, 로그 파일 저장.
API 관리 → 키 생성 → 현물·마진 또는 선물만 활성, 출금 비활성, VPS IP 화이트리스트.
차트 우클릭 → 알림 추가 → Webhook URL=https://your-vps.com/tv-webhook, Message={{strategy.order.alert_message}}, 생성.
50-100 USDT 현물 BTC로 3-5일 운영, 모든 신호 정상 변환 확인 후 증액.
import express from 'express';
import crypto from 'crypto';
import axios from 'axios';
const app = express();
app.use(express.json());
const KEY = process.env.BN_KEY;
const SECRET = process.env.BN_SECRET;
const PASSPHRASE = process.env.PASSPHRASE;
const BASE = 'https://fapi.binance.com';
function sign(query){
return crypto.createHmac('sha256', SECRET).update(query).digest('hex');
}
app.post('/tv-webhook', async (req, res) => {
const { passphrase, symbol, action, qty, type='MARKET' } = req.body;
if (passphrase !== PASSPHRASE) return res.status(401).send('bad passphrase');
const side = action === 'buy' ? 'BUY' : 'SELL';
const ts = Date.now();
const query = `symbol=${symbol}&side=${side}&type=${type}&quantity=${qty}×tamp=${ts}`;
const url = `${BASE}/fapi/v1/order?${query}&signature=${sign(query)}`;
try{
const r = await axios.post(url, null, { headers:{'X-MBX-APIKEY':KEY}});
res.json(r.data);
}catch(e){
console.error(e.response?.data || e.message);
res.status(500).send('order failed');
}
});
app.listen(3000, () => console.log('listening 3000'));
/fapi/v2/account로 평가손익 조회, 임계 초과 시 자동 정지bookTicker 확인, 스프레드 과대면 취소apt install ntp코드 BNAPP으로 바이낸스 가입 시 평생 수수료 페이백, 고빈도 자동매매에서 더 큰 절약.
추천 코드 BNAPP으로 가입 시 평생 수수료 할인