Webhooks (TradingView, n8n…)
Crea URLs personales para recibir señales de cualquier sistema externo que pueda hacer POST. Pensado para TradingView Alerts, pero funciona con n8n, Zapier, scripts propios o cualquier cosa que sepa hablar HTTP.
Crear un webhook
- En el bot: 🎯 Mis grupos → 🔌 Webhooks (TradingView). O atajo:
/webhooks. - Toca + Nuevo, ponle un nombre (ej. "Gold scalper").
- Aparece la card con la URL — tap Copiar.
- Pega esa URL en el campo Webhook URL de tu alerta de TradingView.
Parser sin esquema estricto
No tienes que seguir un JSON exacto. Envía los campos que tengas y deducimos la intención. Cuanto más contexto incluyas, más fiable es la ejecución.
{
"action": "buy",
"symbol": "XAUUSD",
"sl": 4540,
"tp": 4570
}Anatomía del payload
{"symbol": "XAUUSD","side": "buy","entry": 4548.50,"sl": 4540,"tp": [4555, 4565, 4580]}
symbol→Instrumentoside→Lado (BUY)entry→Precio (mercado = ignorado)sl→Stop Losstp→3 take-profits → 3 órdenesReferencia de campos
Agrupados por propósito. Cada campo lista sus alias aceptados (≡ alternative_name) — manda el que más cómodo te quede.
El comando: comprar o vender, a mercado o pendiente.
action≡sidedirectionSentido de la operación. Si solo mandas esto, asumimos orden a mercado."buy""sell"order_typeVersión combinada: lado + tipo pendiente. Si lo usas, prevalece sobre action."BUY""SELL LIMIT""BUY STOP"
El instrumento. Acepta tu símbolo crudo o un alias común.
symbol≡tickerinstrumentpairassetSi tu broker usa otro nombre (ej. GOLD#), creas un mapeo una vez y a partir de ahí lo resolvemos solos."EURUSD""XAUUSD""BTCUSD"
Tamaño de la orden. Si lo omites, usamos tu configuración global.
volume≡lotslot_sizesizeLote estándar. Override puntual para esta señal — no toca tu config global.0.010.51.0
Niveles de protección y objetivos. Si no hay SL, no abrimos la orden (regla dura).
slhard≡stop_lossstoplossstopProtección contra pérdida ilimitada. Sin esto rechazamos la señal y te avisamos.1.08504540tp≡tpstp1tp2tp3targetstake_profitUno o varios objetivos. Con varios TPs abrimos una orden por cada uno y aplicamos SL-to-BE en TP1.1.095[1.09, 1.095, 1.10]
Solo si vas a colocar una orden LIMIT o STOP.
entry≡priceentry_priceEl nivel donde quieres que dispare la pendiente. Para market orders se ignora.1.09004562.5
Cuando vayas a modificar o cerrar este trade desde otra alerta posterior.
signal_id≡idtrade_idticketTu identificador. Lo guardamos junto al trade — cuando lleguemos a modify/close, lo usarás para referirte a esta posición."strat_v2_001""e29a"
Tipos de orden
Dos familias completamente distintas según cuándo se ejecuta la orden:
Mercado — disponible
✓ DisponibleEjecuta al instante al ask actual (BUY) o bid (SELL).
BUYSELL- La mayoría de señales de canales Telegram
- Alertas de strategy TradingView al cierre
Pendiente — próximamente
🔜 PróximamenteEspera al precio que indicas, dispara cuando se alcanza.
| Tipo | Dispara cuando |
|---|---|
BUY LIMIT | precio ≤ indicado |
BUY STOP | precio ≥ indicado |
SELL LIMIT | precio ≥ indicado |
SELL STOP | precio ≤ indicado |
- Quieres fill exacto a un nivel concreto
- Estrategias de breakout que necesitan stop por encima de resistencia
signal_id en detalle
El signal_id es tuidentificador, no el nuestro. Cualquier string < 64 chars vale (UUID, ticket de TradingView, hash, número correlativo…). Lo guardamos en la fila de trade_log sin modificarlo.
Cuando despleguemos modify/close, será así:
- Alerta de apertura: tu primer JSON con
signal_id: "abc123"→ abrimos posición y vinculamos el id. - Alerta de modify: mismo
signal_id: "abc123"+ nuevossl/tp+action: "modify"→ buscamos la posición y la modificamos. - Alerta de close: mismo id +
action: "close"→ cerramos.
Seguridad
El token en la URL es el auth principal. Si se filtra, usa el botón 🔄 Rotar token en la Mini App — la URL anterior deja de funcionar inmediatamente.
Opcional: HMAC-SHA256. Si configuras un secret para el webhook, validamos la firma del body en el header X-CopySignal-Sig. Útil si tienes un proxy/script entre TradingView y nosotros que pueda firmar; TradingView por sí solo no manda headers custom.
Pruébalo con curl
curl -X POST 'https://tg-api.affiliaction.net/wh/<YOUR_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{"symbol":"EURUSD","side":"buy","sl":1.085,"tp":[1.09,1.095]}'volume: 0.01) para verificar que tu plantilla se parsea bien antes de escalar.