ArbiScans
Guida ai Template di Alert

I template di alert personalizzati ti permettono di controllare esattamente quali informazioni compaiono nei tuoi messaggi Telegram, nei payload webhook o nelle notifiche email quando un segnale di arbitraggio corrisponde ai tuoi criteri. I template usano una sintassi semplice con segnaposto, loop e logica condizionale — nessuna esperienza di programmazione richiesta.

Come Funzionano i Template

Quando un segnale soddisfa i filtri dell'alert, il sistema prende il testo del template salvato e sostituisce ogni segnaposto con il valore reale del segnale prima di inviare la notifica.

  • {variable} — sostituito con un singolo valore
  • {% for %} — ripete un blocco per ogni step di trading
  • {% if %} — mostra testo diverso in base a una condizione
Nota: I template devono essere compresi tra 50 e 10.000 caratteri. Usa il preset Semplice come punto di partenza se hai bisogno di un template minimo.
Variabili del segnale
Variabili del segnale
Segnaposto Descrizione Esempio
{signalId}ID numerico univoco del segnale4821
{signalType}Ex1 = tutti gli step sullo stesso exchange · Ex2 = cross-exchangeEx2
{coinType}Ciclo di trading: A-B-A (2 coppie) o A-B-C-A (3 coppie)A-B-C-A
{profitPercent}Profitto lordo in percentuale1.85
{feePercent}Commissione totale stimata in percentuale0.30
{netProfit}Profitto netto dopo le commissioni (profit − fee)1.55
{volume}Volume del primo step (principale)0.5
{lifetime}Età del segnale in secondi dalla creazione312
{createdAt}Timestamp del primo rilevamento del segnale2025-03-11 14:02:10
{updatedAt}Timestamp dell'ultimo aggiornamento del segnale2025-03-11 14:07:22
{freeSignal}1 se è un segnale gratuito (pubblico), altrimenti 00
Variabili di percorso e riepilogo
Segnaposto Descrizione Esempio
{coin_path}Percorso completo della coin da quote a quoteUSDT → BTC → ETH → USDT
{symbol_steps}Lista separata da virgole di tutte le coppie di tradingBTCUSDT, ETHBTC, ETHUSDT
{exchanges_list}Exchange coinvolti senza duplicati (separati da virgola)Binance, KuCoin
{signal_cards}Blocco riepilogativo pre-formattato del segnale(multi-line)
Variabili per step — da usare dentro i loop {% for i %}
Segnaposto Descrizione Esempio
{exchanges[i]}Nome dell'exchange allo step iBinance
{symbols[i]}Simbolo completo della coppia allo step iBTCUSDT
{baseSymbols[i]}Asset base della coppiaBTC
{quoteSymbols[i]}Asset quote della coppiaUSDT
{directions[i]}Direzione: 1 = Acquisto, -1 = Vendita1
{prices[i]}Prezzo di esecuzione allo step i42318.57
{volumes[i]}Volume scambiato allo step i0.01182
{i+1}Numero step a partire da 1 (leggibile dall'uomo)1, 2, 3
Variabili order book — da usare dentro i loop {% for i %}
Segnaposto Descrizione
{symbolStats[exchanges[i]+'_'+symbols[i]].minBid}Prezzo bid minimo nell'order book
{symbolStats[exchanges[i]+'_'+symbols[i]].maxBid}Prezzo bid massimo nell'order book
{symbolStats[exchanges[i]+'_'+symbols[i]].minAsk}Prezzo ask minimo nell'order book
{symbolStats[exchanges[i]+'_'+symbols[i]].maxAsk}Prezzo ask massimo nell'order book
{symbolStats[exchanges[i]+'_'+symbols[i]].bidQty}Quantità totale disponibile sul lato bid
{symbolStats[exchanges[i]+'_'+symbols[i]].askQty}Quantità totale disponibile sul lato ask
Sintassi del Template
Loop for — itera sugli step di trading

I segnali hanno 2 step (A-B-A) o 3 step (A-B-C-A). Il loop si esegue automaticamente una volta per ogni step.

{% for i in 0..symbols.length-1 %}
  Step {i+1}: {symbols[i]} on {exchanges[i]}
{% endfor %}

Output per un segnale a 3 step:

  Step 1: BTCUSDT on Binance
  Step 2: ETHBTC on Binance
  Step 3: ETHUSDT on KuCoin
If / else — testo condizionale

Usa {% if %}...{% else %}...{% endif %} per mostrare testo diverso in base a un valore. Funziona sia dentro che fuori dai loop.

Direzione Acquisto/Vendita:

{% if directions[i] == 1 %}BUY{% else %}SELL{% endif %}

Tipo di exchange:

{% if signalType == 'Ex2' %}Cross-Exchange{% else %}Same-Exchange{% endif %}

Tipo di ciclo coin:

{% if coinType == 'A-B-C-A' %}Triangular{% else %}Simple{% endif %}

Badge segnale gratuito:

{% if freeSignal == 1 %}🆓 Free Signal{% endif %}
Operatori supportati nelle condizioni
SegnapostoDescrizioneEsempio
==Uguale adirections[i] == 1
!=Diverso dasignalType != 'Ex1'
>Maggiore diprofitPercent > 2
<Minore difeePercent < 0.5
Template Predefiniti

Questi sono gli stessi template disponibili nel menu a tendina nel modal degli alert. Usali così come sono o come punto di partenza per il tuo template personalizzato.

Simple 5 righe · ideale per canali ad alto volume
🚀 Arbitrage Alert [{signalType}] - {coinType}
📊 Profit: +{profitPercent}% | Fee: {feePercent}% | Net: +{netProfit}%
🔀 Path: {coin_path}
🏦 {exchanges_list}
⏱ Lifetime: {lifetime}
Standard default consigliato
🚀 *Arbitrage Signal* [{signalType} | {coinType}]
━━━━━━━━━━━━━━━━━━━━

💰 *Profit:* +{profitPercent}%
💸 *Fee:* {feePercent}%
📈 *Net:* +{netProfit}%
📦 *Volume:* {volume}

🔀 *Path:* {coin_path}
🏦 *Exchanges:* {exchanges_list}

📋 *Steps:*
{% for i in 0..symbols.length-1 %}
  [{i+1}] {exchanges[i]} | {symbols[i]}
      ↳ {% if directions[i] == 1 %}🟢 Buy{% else %}🔴 Sell{% endif %} @ {prices[i]}
      ↳ Vol: {volumes[i]}
{% endfor %}

⏱ *Lifetime:* {lifetime}
🕐 *Updated:* {updatedAt}
Full tutti i dati · ideale per webhook / app C#
🚀 *Arbitrage Signal* #️⃣{signalId}
━━━━━━━━━━━━━━━━━━━━
📌 *Type:* {signalType} ({coinType})
{% if signalType == 'Ex2' %}🔁 *Cross-Exchange*{% else %}🔄 *Same-Exchange*{% endif %}

💰 *Profit:*     +{profitPercent}%
💸 *Fee:*        -{feePercent}%
📈 *Net Profit:* +{netProfit}%
📦 *Volume:*     {volume}

🔀 *Coin Path:* {coin_path}
📍 *Symbols:*   {symbol_steps}
🏦 *Exchanges:* {exchanges_list}

━━━━━━━━━━━━━━━━━━━━
📋 *STEP DETAILS*
━━━━━━━━━━━━━━━━━━━━
{% for i in 0..symbols.length-1 %}
[STEP {i+1}]
  Exchange:  {exchanges[i]}
  Pair:      {symbols[i]} ({baseSymbols[i]}/{quoteSymbols[i]})
  Action:    {% if directions[i] == 1 %}🟢 BUY{% else %}🔴 SELL{% endif %}
  Price:     {prices[i]}
  Volume:    {volumes[i]}
  Order Book:
    Bid → min: {symbolStats[exchanges[i]+'_'+symbols[i]].minBid}  max: {symbolStats[exchanges[i]+'_'+symbols[i]].maxBid}  qty: {symbolStats[exchanges[i]+'_'+symbols[i]].bidQty}
    Ask → min: {symbolStats[exchanges[i]+'_'+symbols[i]].minAsk}  max: {symbolStats[exchanges[i]+'_'+symbols[i]].maxAsk}  qty: {symbolStats[exchanges[i]+'_'+symbols[i]].askQty}
{% endfor %}

━━━━━━━━━━━━━━━━━━━━
⏱ Lifetime:  {lifetime}
🕐 Created:  {createdAt}
🔄 Updated:  {updatedAt}
{% if freeSignal == 1 %}🆓 Free Signal{% endif %}
Esempi Avanzati
Payload JSON per webhook

Invia dati strutturati al tuo endpoint o all'applicazione C#.

{
  "id": {signalId},
  "type": "{signalType}",
  "coinType": "{coinType}",
  "profit": {profitPercent},
  "fee": {feePercent},
  "netProfit": {netProfit},
  "volume": {volume},
  "path": "{coin_path}",
  "exchanges": "{exchanges_list}",
  "lifetime": {lifetime},
  "createdAt": "{createdAt}",
  "steps": [
    {% for i in 0..symbols.length-1 %}
    {
      "step": {i+1},
      "exchange": "{exchanges[i]}",
      "symbol": "{symbols[i]}",
      "base": "{baseSymbols[i]}",
      "quote": "{quoteSymbols[i]}",
      "direction": {% if directions[i] == 1 %}"buy"{% else %}"sell"{% endif %},
      "price": {prices[i]},
      "volume": {volumes[i]},
      "orderBook": {
        "minBid": {symbolStats[exchanges[i]+'_'+symbols[i]].minBid},
        "maxBid": {symbolStats[exchanges[i]+'_'+symbols[i]].maxBid},
        "minAsk": {symbolStats[exchanges[i]+'_'+symbols[i]].minAsk},
        "maxAsk": {symbolStats[exchanges[i]+'_'+symbols[i]].maxAsk},
        "bidQty": {symbolStats[exchanges[i]+'_'+symbols[i]].bidQty},
        "askQty": {symbolStats[exchanges[i]+'_'+symbols[i]].askQty}
      }
    }{% endfor %}
  ]
}
Evidenzia segnali ad alto profitto

Aggiungi un marcatore visivo quando il profitto netto supera una soglia.

{% if netProfit > 1.5 %}🔥 HIGH PROFIT{% else %}🚀 Signal{% endif %} [{signalType}] {coinType}
Net: +{netProfit}% | Path: {coin_path}
{% if signalType == 'Ex2' %}⚡ Cross-exchange — check transfer fees!{% endif %}
Riepilogo order book per step
Signal #{signalId} — {coinType} — Net +{netProfit}%

{% for i in 0..symbols.length-1 %}
▸ Step {i+1} · {exchanges[i]} · {symbols[i]}
  {% if directions[i] == 1 %}BUY{% else %}SELL{% endif %} @ {prices[i]} (vol: {volumes[i]})
  Bid  {symbolStats[exchanges[i]+'_'+symbols[i]].minBid} – {symbolStats[exchanges[i]+'_'+symbols[i]].maxBid}  qty {symbolStats[exchanges[i]+'_'+symbols[i]].bidQty}
  Ask  {symbolStats[exchanges[i]+'_'+symbols[i]].minAsk} – {symbolStats[exchanges[i]+'_'+symbols[i]].maxAsk}  qty {symbolStats[exchanges[i]+'_'+symbols[i]].askQty}
{% endfor %}
Consigli ed Errori Comuni
  • Chiudi sempre loop e condizioni. Ogni {% for %} necessita di un {% endfor %} corrispondente e ogni {% if %} di un {% endif %}.
  • Le variabili order book funzionano solo dentro un loop. La chiave exchanges[i]+'_'+symbols[i] richiede che i sia definito da un blocco {% for %}.
  • I confronti stringa richiedono le virgolette. Usa signalType == 'Ex2' (con virgolette singole), non signalType == Ex2.
  • I confronti numerici non richiedono virgolette. Usa directions[i] == 1 o netProfit > 1.5.
  • Lifetime è in secondi. Un valore di 312 significa 5 minuti e 12 secondi. Formattalo nel messaggio se necessario.
  • Grassetto Markdown Telegram. Racchiudi il testo con *asterischi* per il grassetto in Telegram (parse mode MarkdownV1).
  • Non usare parentesi graffe {} nude per nulla al di fuori dei segnaposto — verranno interpretate come tag template e potrebbero rompere il rendering.
Riferimento rapido ai tipi di dati
Variabile Tipo Note
{signalId}IntegerSicuro da usare in JSON senza virgolette
{profitPercent}, {feePercent}, {netProfit}DecimalFino a 4 decimali
{prices[i]}, {volumes[i]}DecimalFino a 8 decimali
{directions[i]}Integer1 o -1
{freeSignal}Integer0 o 1
{lifetime}IntegerSecondi (es. 312)
{createdAt}, {updatedAt}StringFormato: YYYY-MM-DD HH:MM:SS
Variabili di percorso e riepilogoStringRacchiudi tra virgolette nei payload JSON

Documentazione