От Pine-алерта до реального ордера на Binance — 3 главных подхода, полная настройка и риск-контроль для работы 24/7.
TradingView — крупнейшее в мире сообщество графиков и стратегий. Когда вы пишете Pine-скрипт и хотите автоматизировать торговлю на Binance, Webhook — это мост: TradingView POST'ит JSON на указанный URL при срабатывании алерта, сервер принимает и вызывает API Binance для покупки/продажи.
Путь: алерт TradingView → Webhook URL (свой сервер или сторонний) → API Binance → реальный ордер.
Плюсы: визуальная логика, богатая Pine-экосистема. Минусы: нужно обрабатывать подпись, риски, реконнект, либо платить за готовую платформу.
| Подход | Сложность | Стоимость | Задержка | Подходит для |
|---|---|---|---|---|
| Своя VPS-прокладка | Средне-Высоко | $5-10/mo | 500ms-1.5s | Тех. подкованных, желающих контроля |
| Сторонняя платформа (3Commas и др.) | Низко | $15-50/mo | 800ms-2s | Тех, кто хочет ноль обслуживания |
| Binance API + локальный скрипт | Низко | Электричество | Зависит от локальной сети | Имеющих включённый ПК |
Маленький Node.js/Python/Go сервис на VPS, публичный URL, подпись и вызов API Binance. Максимальная гибкость, любая кастомная риск-логика.
3Commas, Cryptohopper, Wundertrading, Aleeert.com — дают готовый Webhook URL, подключаешь API Binance и работаешь. Просто, но месячная плата + риск платформы + кастодиальный API.
Десктоп-клиент TradingView запускает внешние скрипты, локальный Python вызывает Binance. Без подписки, но ПК должен быть всегда включён.
Минимальная стратегия EMA-кроссовер на Pine v5 с 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 должен быть валидным JSONpassphrase — общий секрет против угадывания URL{{strategy.order.alert_message}}https://your-vps.com/tv-webhookDigitalOcean/Vultr/Hetzner $5/мес, 1 vCPU 1G достаточно. Токио или Сингапур — наименьшая задержка до Binance.
TradingView POST'ит только на HTTPS. Бесплатный SSL Cloudflare или Caddy/Nginx + Let's Encrypt.
Express(Node) или FastAPI(Python) с POST-эндпоинтом, проверка passphrase, вызов Binance.
pm2 или systemd для автоперезапуска, логи в файл.
Управление API → создать ключ → только спот/маржа или фьючерсы, не вывод, IP VPS в белом списке.
ПКМ по графику → Добавить алерт → 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Регистрация в Binance по коду BNAPP даёт пожизненный кешбэк — высокочастотные стратегии экономят больше.
Регистрация по коду BNAPP даёт пожизненную скидку