PineアラートからBinance実注文まで — 主流3方式と完全な構築手順、リスク管理で24時間自動運用。
TradingViewは世界最大のチャート・戦略コミュニティ。Pineで書いた戦略をBinanceで自動執行したいとき、Webhookが橋渡し役 — アラート発動時にTradingViewがJSONを指定URLにPOSTし、サーバーが受信しBinance APIを叩いて売買を実行。
全体: TradingViewアラート → Webhook URL(自前または外部)→ Binance API → 実注文。
長所: 戦略ロジック可視化、Pineエコシステム豊富。短所: 署名・リスク管理・再接続を自前処理、または有料プラットフォーム利用。
| 方式 | 難易度 | コスト | 遅延 | 向き |
|---|---|---|---|---|
| 自前VPSブリッジ | 中-上 | $5-10/mo | 500ms-1.5s | コード書ける、制御重視 |
| サードパーティ (3Commas等) | 低 | $15-50/mo | 800ms-2s | 運用回避したい人 |
| Binance API + ローカル | 低 | 電気代 | ローカル回線依存 | 常時稼働PC保有 |
VPS上でNode.js/Python/Go小型サービス運用、公開URLで受信しBinance API呼び出し。最も柔軟、任意のカスタムリスクロジック追加可能。
3Commas、Cryptohopper、Wundertrading、Aleeert.comなど。すぐ使えるWebhook URL提供、Binance API繋げばOK。簡単だが月額・プラットフォームリスク・APIカストディ。
TradingViewデスクトップで外部スクリプト実行可能、ローカルPythonでBinance呼び出し。月額不要だが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で十分。東京またはシンガポールがBinanceに最低遅延。
TradingViewはHTTPSのみPOST。Cloudflare無料SSLまたはCaddy/Nginx + Let's Encrypt使用。
Express(Node)またはFastAPI(Python)でPOSTエンドポイント、passphrase検証後にBinance呼び出し。
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でBinance登録、永久手数料ペイバック。高頻度自動戦略でさらに節約。
紹介コード BNAPP で登録して永久手数料割引