Формат Webhook Payload
Payload — это JSON-сообщение, которое TradingView отправляет на ваш webhook Amabit при срабатывании алерта. Формат различается для Strategy Mode и Signal Mode.
Payload для алерта стратегии
Для стратегий TradingView с использованием strategy.entry() и strategy.close():
{
"action": "{{strategy.order.action}}",
"symbol": "{{ticker}}",
"contracts": "{{strategy.order.contracts}}",
"position_size": "{{strategy.position_size}}",
"price": "{{close}}",
"order_type": "market",
"order_id": "{{strategy.order.id}}",
"comment": "{{strategy.order.comment}}"
}Требуется режим One-Way (Net)
Стратегические вебхуки полагаются на единую нетто-позицию по символу. Hedge Mode (когда одновременно открыты и LONG, и SHORT по одному символу) не поддерживается — входящие сигналы будут отклонены. Перед использованием Strategy webhook'а переключите аккаунт на One-Way / Net Mode на бирже.
Главное поле — position_size: ЗНАКОВАЯ целевая позиция, которую стратегия хочет иметь ПОСЛЕ этого сигнала: положительное = long, отрицательное = short, 0 = нет позиции. Amabit читает текущую позицию на бирже и сам считает разницу:
| Текущая → Целевая | Действие |
|---|---|
0 → +Q | один BUY-ордер на Q |
+Q → +2Q | один BUY-ордер на Q |
+2Q → 0 | один SELL на 2Q, автоматически reduce_only |
+2Q → −Q | два ордера: SELL 2Q (reduce_only) на закрытие + SELL Q на открытие шорта |
0 → 0 | ничего не делается — уже на целевой позиции |
reduce_only рассчитывается автоматически из дельты и не должен задаваться в Strategy-payload — любое значение игнорируется. Поля action и contracts сохраняются для логов/отладки, но реальные направление и размер берутся из position_size.
Payload для ручного сигнала
Для пользовательских индикаторов или ручных алертов:
{
"action": "buy",
"symbol": "BTCUSDT",
"quantity": 0.01,
"price": "{{close}}",
"order_type": "market",
"reduce_only": false
}Измените "action" на "sell" для сигналов продажи.
Справочник полей
| Поле | Обязательное | Значения | Описание |
|---|---|---|---|
action | Да (Signal) | "buy", "sell" | Направление сделки. Также можно использовать side. В Strategy Mode — справочное, реальная сторона определяется из position_size |
symbol | Да | например, "BTCUSDT" | Торговая пара в формате Binance. Префиксы биржи вида BINANCE:BTCUSDT автоматически удаляются |
quantity / contracts | Да (Signal) | Число | Объём сделки в базовой валюте. Не обязательно, если webhook использует "% of Balance". В Strategy Mode — справочное, реальный размер определяется из position_size |
position_size | Да (Strategy) | ЗНАКОВОЕ число | Только Strategy. Целевая позиция ПОСЛЕ сигнала: положительное = long, отрицательное = short, 0 = flat |
price | Нет | Число или "{{close}}" | Цена для лимитных ордеров. Также используется как цена входа для расчёта TP/SL в Signal Mode |
order_type | Нет | "market", "limit" | По умолчанию используется тип ордера, настроенный в webhook, если не указан |
order_id | Нет | Строка | Опциональный идентификатор — записывается для отслеживания |
comment | Нет | Строка | Опциональный комментарий — сохраняется в журнале исполнения |
reduce_only | Нет (Signal) | true, false | Только Signal Mode. Если true, только уменьшает существующую позицию. Игнорируется в Strategy Mode — Amabit вычисляет его сам из position_size |
position_side | Нет | "LONG", "SHORT" | Переопределяет сторону позиции webhook по умолчанию. Только для Hedge Mode фьючерсов — не используется в Strategy Mode (Strategy требует One-Way mode) |
Плейсхолдеры TradingView
TradingView заменяет эти плейсхолдеры реальными значениями в момент срабатывания алерта:
| Плейсхолдер | Значение |
|---|---|
{{strategy.order.action}} | "buy" или "sell" (справочно в Strategy Mode) |
{{strategy.order.contracts}} | Количество контрактов/единиц из стратегии (справочно в Strategy Mode) |
{{strategy.position_size}} | Strategy Mode — знаковая целевая позиция после ордера: положительное = long, отрицательное = short, 0 = flat |
{{strategy.order.id}} | ID ордера, назначенный стратегией |
{{strategy.order.comment}} | Комментарий, заданный в strategy.entry() или strategy.close() |
{{ticker}} | Символ графика (например, "BTCUSDT" или "BINANCE:BTCUSDT") |
{{close}} | Текущая цена закрытия |
{{open}}, {{high}}, {{low}} | Значения OHLC текущей свечи |
{{volume}} | Объём текущей свечи |
{{time}} | Временная метка текущей свечи |
Формат символа
Amabit ожидает формат символа Binance — название пары без разделителей:
| Принимается | Не принимается |
|---|---|
BTCUSDT | BTC/USDT |
ETHUSDT | ETH-USDT |
BINANCE:BTCUSDT | SOL/USDT |
TIP
Если ваш график TradingView использует префикс биржи (например, BINANCE:BTCUSDT), это нормально — Amabit автоматически удаляет префикс. Но форматы со слэшем или дефисом (BTC/USDT, BTC-USDT) не поддерживаются.
Если {{ticker}} выдаёт неподдерживаемый формат, захардкодируйте символ в payload.
Примеры
Лимитный ордер
Исполнить по цене алерта вместо рыночной:
{
"action": "buy",
"symbol": "BTCUSDT",
"quantity": 0.005,
"price": "{{close}}",
"order_type": "limit"
}Reduce-Only (Фьючерсы)
Закрыть существующую позицию без открытия новой:
{
"action": "sell",
"symbol": "BTCUSDT",
"quantity": 0.01,
"order_type": "market",
"reduce_only": true
}Hedge Mode — Закрыть длинную позицию
{
"action": "sell",
"symbol": "BTCUSDT",
"quantity": 0.01,
"order_type": "market",
"position_side": "LONG",
"reduce_only": true
}Использование % от баланса (Quantity не нужен)
Если ваш webhook настроен с размером лота Custom % of Balance, поле quantity игнорируется:
{
"action": "buy",
"symbol": "ETHUSDT",
"order_type": "market"
}