Payload webhook TradingView
Campos exatos lidos pelo WebhookIngress quando uma alerta TradingView chega à TheConnector.
Objetivo
Esta página documenta o contrato público do WebhookIngress para alertas TradingView. Não é o payload de ordens manuais do dashboard.
Caminho de acesso
- Na área cliente:
Minhas contas> abrir uma conta de trading > copiar a chave de acesso. - No TradingView:
Alerta>Notificações> colarhttps://webhook.theconnector.fr/YOUR_ACCESS_KEYemWebhook URL. - No campo
Messagedo TradingView, colar a mensagem: JSON ou uma linha, como preferir.
Dois formatos, o mesmo resultado
O WebhookIngress lê dois formatos de mensagem e trata-os exatamente da mesma forma: um objeto JSON ou uma única linha de texto. Use o que preferir. Numa linha, a ação e o símbolo vêm primeiro e depois os restantes campos na forma nome=valor, separados por vírgulas.
JSON mínimo
{
"action": "buy",
"symbol": "EURUSD",
"risk": 1,
"sl": 0.2,
"tp": 0.4,
"priceMode": "percent"
}
priceMode indica a unidade de sl, tp e price no próprio alerta: price, pips ou percent. Aqui o stop fica a 0,2 % da entrada e o objetivo a 0,4 %, seja qual for o modo de preço da conta; sem priceMode, aplica-se o modo de preço da conta.
Campos lidos pelo WebhookIngress
actioné obrigatório. Aliases, em JSON como numa linha:side,type,command,msgtype.typeindica o comando, não um tipo de ordem:buycomtype=limitdá dois comandos diferentes, e o alerta é recusado — uma ordem pendente tem o seu próprio comando,buylimit,selllimit,buystopousellstop, com o preço de entrada emprice.symbolé obrigatório para comandos de trading. Aliases:pair,ticker,instrument,market,asset.riské enviado como risco numérico. Para lotes exatos, usevolume,lot,lots,fixedVolumeousize.sletpsão os nomes atuais de stop loss / take profit. Aliases:stoploss,stop_loss,takeprofit,take_profit.pricesó é usado para ordens pendentes:buystop,buylimit,sellstop,selllimit.expiration(aliasexpiry) dá a uma ordem pendente um tempo de vida, em minutos: a corretora apaga-a se não tiver sido acionada até lá, mesmo com o robô desligado. Exemplo:"expiration": 60. É ignorado nas ordens a mercado. Requer o robô 0.0.30 ou posterior: com um robô mais antigo o alerta é recusado em vez de deixar a ordem pendente indefinidamente. Se a corretora não aceitar expiração nesse símbolo, a ordem é recusada, nunca colocada sem ela.priceModedefine a unidade desl,tpepricepara este alerta:price,pipsoupercent. Sem ele, aplica-se o modo de preço da conta.ticket,orderId,order_id,positionIdouposition_idsó servem quando há uma ordem ou posição conhecida.account/accountCodeeplatformsão opcionais com a URL da conta; servem apenas em rotas partilhadas.streamIdouidpode ser enviado para acompanhamento. O servidor mantém-no no seu próprio id, precedido deTV-(17 caracteres no máximo, hífenes trocados por_), seguido de_e de 8 caracteres. Dois alertas enviados com o mesmo id são, portanto, dois alertas distintos: o segundo nunca é tratado como duplicado. Se faltar, o servidor cria um id.tag(aliascomment) nomeia a estratégia a que o alerta pertence. Numa entrada é escrito no comentário da posição no corretor; num fecho limita o fecho às posições que têm esse nome, por isso várias estratégias podem partilhar uma conta e um símbolo. Passa a minúsculas e é cortado a 12 caracteres, e é respeitado a partir do robô 0.0.21 — abaixo dessa versão, um fecho com nome é recusado em vez de ser executado sobre a posição de outra estratégia. Se enviares o seu própriostreamId, ele substitui o gerado e o nome nunca chega ao comentário da posição: omitestreamIdquando usares nomes.clientRequestedAtUtc,requestedAtUtcourequestedAtpodem ser enviados como data UTC informativa.
A mesma mensagem numa linha
A mesma ordem que acima, escrita numa única linha:
buy,EURUSD,risk=1,sl=0.2,tp=0.4,priceMode=percent
O que não enviar
Não dependa de ttl_ms: o parser atual do WebhookIngress não o lê. vol_lots é lido como volume. Cada preço mantém a unidade em que está escrito: um sufixo fixa a unidade apenas desse valor (sl_pips, sl_price, sl_pct, tp_pips, tp_price, tp_pct, e entry_pips, entry_price, entry_pct para a entrada de uma ordem pendente); sl, tp e price sem sufixo usam o priceMode (ou unit) escrito no alerta e, caso contrário, o modo de preço da conta. O robô aplica uma só unidade a toda a ordem: um alerta cujos preços pedem duas unidades é recusado, nunca enviado sem o seu stop-loss ou take-profit — sl_pips com tp_price, ou sl sem sufixo ao lado de tp_pips (mesmo numa conta configurada em pips; acrescente priceMode=pips). Ponha um sufixo em todos os preços, ou em nenhum. Um alerta que escreve o mesmo campo duas vezes com dois valores diferentes também é recusado (sl=10 e depois sl=20, ou "type":"sell" com "action":"buy"); o mesmo valor duas vezes conta como um.
Alertas escritos para o WebhookTrade
Um alerta no formato do WebhookTrade é lido tal como está para symbol, action (buy_limit, sell_stop…), price, stop_loss, take_profit, size (lotes) e expiration (minutos); comment dá nome à estratégia, como tag; username, api_key, broker e account_type são ignorados. Das suas ações de fecho, close_all é lido como closeall; em vez de close_buy, close_sell e close_pending, envie closelong, closeshort, ou cancellong e cancelshort. Os seus outros parâmetros de stop, objetivo, tamanho, trailing e break-even — sl_percentage, tp_percentage, sl_distance, tp_distance, sl_distance_price, tp_distance_price, stop_amount, profit_amount, size_percentage, risk_percentage, size_multiplier, ts_…, breakeven_… — fazem com que o alerta seja recusado, com uma mensagem que os nomeia: executada sem eles, a ordem sairia sem o seu stop ou com outro tamanho. Escreva-os com sl / tp e priceMode, volume ou risk, e betrigger / trailtrig / traildist.
Já tem alertas? Mantenha-os
Não precisa de reescrever os seus alertas. Uma mensagem de uma linha funciona tal como está, mesmo que comece por um identificador de licença: em cada alerta do TradingView, substitua apenas o URL do webhook pelo seu, o que termina com a sua chave de acesso. O valor colocado antes do comando é então ignorado, e nomes de parâmetros como sl_pips, tp_price ou vol_lots são traduzidos automaticamente. Uma exceção: um alerta que mistura unidades de preço (sl_pips com tp_price, por exemplo) passa a ser recusado: escreva todos os preços na mesma unidade.