Output degli script: line, histogram, bands, markers, levels, table, panel
Uno script utente restituisce un array di output, ciascuno identificato da una forma. Cinque forme sono disegnate sul canvas (line, histogram, bands, markers, levels) e due sono rese come schede DOM trascinabili (table, panel). Ogni output viene normalizzato prima di raggiungere il renderer, e tutto ciò che non è riconosciuto viene segnalato invece di sparire in silenzio.
Senzoukria · Documentazione · Aggiornato a settembre 2026
Dove trovarlo
- Dove
- Valore di ritorno di compute() in qualsiasi script utente; disegnato sul grafico quando lo script è mostrato
- Destinazioni
- «Sul grafico» (sovrapposto) o «Pannello dedicato» (un pannello di 90 px sotto il grafico)
- Limiti DOM
- Tabella: 50 righe e 8 colonne; riquadro: 50 voci; l'eccedenza viene troncata
- Chiave temporale
- point.time deve corrispondere al bucketTsNs di una barra (epoch in nanosecondi); gli altri punti vengono scartati
Che cosa fa
Il renderer conosce solo valori SeriesOutput; non vede mai lo script che li ha prodotti. Gli indicatori integrati e gli script utente condividono quindi le stesse forme e le stesse regole di normalizzazione: un punto fuori dalle barre visibili viene scartato, un valore non finito diventa un buco (value: null), e un valore null scritto di proposito, per esempio durante il riscaldamento di una media mobile, viene conservato come penna sollevata invece che come un falso segmento.
La destinazione di disegno si sceglie per script. «Sul grafico» si sovrappone al prezzo; «Pannello dedicato» riserva un pannello la cui altezza è fissata dal renderer a 90 px. Poiché tabelle e riquadri sono elementi DOM, uno script destinato a un pannello i cui unici output restanti sono una tabella non riserva un pannello vuoto: la separazione tra output canvas e output DOM avviene prima che il renderer conti i pannelli.
Le forme e i loro campi
| Forma | Campi | Default applicati |
|---|---|---|
| line | points [{time, value|null}], style {color, width, style} | colore #7ed321; spessore limitato tra 0,5 e 12; stile solid, dashed o dots |
| histogram | points [{time, value}], positiveColor, negativeColor | #22c55e positivo, #ef4444 negativo; una barra senza valore finito non emette alcun punto |
| bands | array di punti upper, basis, lower, fillAlpha, style | fillAlpha 0,12, limitato tra 0 e 1; stile come per line |
| markers | markers [{time, price, kind, color, label?}] | kind dot salvo arrow-up, arrow-down o square; colore #7ed321 |
| levels | levels [{price, from, to|null, color, label?, style?}] | to null = arriva fino al bordo destro; solo price e from sono obbligatori |
| table | title?, columns [{key, label, align?}], rows [{key: string|number|null}] | Rifiutata senza colonne; massimo 8 colonne e 50 righe; le chiavi di riga sconosciute vengono scartate |
| panel | title?, entries [{label, value, color?}] | Massimo 50 voci; una voce senza valore stringa o numero finito viene saltata |
Schede tabella e riquadro
Tabelle e riquadri sono resi come schede flottanti sopra il grafico perché una tabella deve poter essere letta, selezionata e copiata, cosa che un canvas non offre, e perché un pannello di 90 px contiene appena tre righe. Ogni scheda porta come titolo il nome dello script, seguito da « · » e dal titolo dell'output quando ne è stato dato uno. Le schede si trascinano dall'intestazione; la loro posizione viene salvata per output sotto la chiave orderflow.seriesTables.v1 alla fine del trascinamento. Senza una posizione salvata, le schede scendono a cascata dall'angolo in alto a destra (60 px in basso e 12 px verso l'interno, con uno scarto di 26 px e 14 px per ogni scheda aggiuntiva), così due schede non si sovrappongono mai esattamente.
Il DOM viene aggiornato una volta per frame di animazione, non alla cadenza di pubblicazione delle barre a 4 Hz, e una cella nulla viene stampata come «—» invece che come 0. L'allineamento delle colonne è a sinistra per impostazione predefinita; uno script che vuole i numeri a destra imposta align: "right" sulla colonna.
Come usarli
Gli helper lib costruiscono le forme più comuni: lib.line(chronoBars, values, color, width), lib.histogram, lib.markers, lib.levels, lib.table(columns, rows, title) e lib.panel. Gli array passati agli helper lib sono in ordine cronologico, quindi inverti prima le barre, che arrivano dalla più recente. Uno script può restituire più output, per esempio un output bands e uno line per una VWAP con bande sigma.
Una forma rifiutata non sparisce: lo script viene segnalato nel pannello Indicatori, dove la riga sotto il suo nome diventa «Valore di ritorno non riconosciuto. Un indicatore restituisce una serie, delle linee o dei marker — vedi \"Indicatore: cosa restituire\".» al posto della sua destinazione. Uno script che restituisce output che non disegnano nulla viene segnalato come «empty», il che distingue «non funziona» da «non c'era nulla da mostrare».
Limiti e trappole
- Gli spessori sotto 0,5 o sopra 12 px vengono limitati; i nomi di stile sconosciuti ricadono su solid.
- I punti histogram con valore nullo o non finito vengono rimossi del tutto, a differenza delle linee dove null è un buco.
- I levels sono segmenti con chiave price e from; non vengono filtrati sul tempo delle barre, quindi un from più vecchio dello storico caricato parte semplicemente dal bordo sinistro.
- Una tabella con più di 50 righe viene troncata; se il conteggio conta, scrivi tu stesso il troncamento nel titolo.
Pagine correlate
- Editor di indicatori personali sul grafico
- Script C++ (motore WASM)
- La VWAP spiegata
- Bande VWAP di sessione
Questa pagina in altre lingue
Domande frequenti
- Perché la mia tabella non è nel pannello che ho scelto?
- Tabelle e riquadri vengono sempre resi come schede DOM sopra il grafico, qualunque sia la destinazione. La destinazione riguarda solo le forme su canvas, come linee e istogrammi.
- Come mostro un buco invece di una linea a zero durante il riscaldamento?
- Restituisci value: null per quei punti. Il renderer solleva la penna; uno zero disegnerebbe un segmento falso.
- Posso spostare la scheda della tabella e conservarne la posizione?
- Sì. Trascinala dall'intestazione; la posizione viene salvata per output in localStorage e ripristinata alla riapertura del grafico.