Salidas de script: line, histogram, bands, markers, levels, table, panel

Un script del usuario devuelve un array de salidas, cada una identificada por una forma. Cinco formas se dibujan en el canvas (line, histogram, bands, markers, levels) y dos se representan como tarjetas DOM arrastrables (table, panel). Todas las salidas se normalizan antes de llegar al renderizador, y lo que no se reconoce se informa en vez de descartarse en silencio.

Senzoukria · Documentación · Actualizado en septiembre de 2026


Dónde encontrarlo

Dónde
Valor devuelto por compute() en cualquier script del usuario; se dibuja en el gráfico cuando el script está visible
Destinos
«En el gráfico» (superpuesto) o «Panel propio» (un panel de 90 px bajo el gráfico)
Límites del DOM
Tabla: 50 filas y 8 columnas; panel de valores: 50 entradas; lo que sobra se trunca
Clave temporal
point.time debe ser igual al bucketTsNs de una barra (época en nanosegundos); los demás puntos se descartan

Qué hace

El renderizador solo conoce valores SeriesOutput; nunca ve el script que los produjo. Los indicadores integrados y los scripts del usuario comparten por tanto las mismas formas y las mismas reglas de normalización: un punto fuera de las barras visibles se descarta, un valor no finito se convierte en hueco (value: null), y un valor null escrito a propósito, por ejemplo durante el calentamiento de una media móvil, se conserva como lápiz levantado en lugar de convertirse en un segmento falso.

El destino de dibujo se elige por script. «En el gráfico» se superpone al precio; «Panel propio» reserva un panel cuya altura fija el renderizador en 90 px. Como las tablas y los paneles de valores son elementos del DOM, un script de panel cuyas únicas salidas restantes son una tabla no reserva un panel vacío: la separación entre salidas de canvas y salidas del DOM se hace antes de que el renderizador cuente los paneles.

Formas y sus campos

Formas de salida aceptadas de un script del usuario, después de la normalización
FormaCamposValores por defecto aplicados
linepoints [{time, value|null}], style {color, width, style}color #7ed321; grosor acotado entre 0,5 y 12; estilo solid, dashed o dots
histogrampoints [{time, value}], positiveColor, negativeColor#22c55e positivo, #ef4444 negativo; una barra sin valor finito no emite ningún punto
bandsarrays de puntos upper, basis y lower, fillAlpha, stylefillAlpha 0,12, acotado entre 0 y 1; estilo como en line
markersmarkers [{time, price, kind, color, label?}]kind dot salvo arrow-up, arrow-down o square; color #7ed321
levelslevels [{price, from, to|null, color, label?, style?}]to null = llega hasta el borde derecho; solo price y from son obligatorios
tabletitle?, columns [{key, label, align?}], rows [{key: string|number|null}]Se rechaza sin columnas; máximo 8 columnas y 50 filas; las claves de fila desconocidas se descartan
paneltitle?, entries [{label, value, color?}]Máximo 50 entradas; una entrada sin valor de tipo cadena o número finito se omite

Tarjetas de tabla y de panel

Las tablas y los paneles de valores se representan como tarjetas flotantes sobre el gráfico porque una tabla tiene que poder leerse, seleccionarse y copiarse, cosa que un canvas no ofrece, y porque un panel de 90 px solo admite tres líneas. Cada tarjeta se titula con el nombre del script, seguido de « · » y del título de la salida cuando se indica uno. Las tarjetas se arrastran por su cabecera; su posición se guarda por salida bajo la clave orderflow.seriesTables.v1 al terminar el arrastre. Sin posición guardada, las tarjetas se escalonan desde la esquina superior derecha (60 px hacia abajo y 12 px hacia dentro, con un desplazamiento de 26 px y 14 px por cada tarjeta adicional), para que dos tarjetas nunca se superpongan exactamente.

El DOM se actualiza una vez por fotograma de animación, no a los 4 Hz de publicación de las barras, y una celda null se imprime como «—» en vez de 0. La alineación de columna es a la izquierda por defecto; un script que quiera los números a la derecha fija align: "right" en la columna.

Cómo usarlo

Los helpers de lib construyen las formas habituales: lib.line(chronoBars, values, color, width), lib.histogram, lib.markers, lib.levels, lib.table(columns, rows, title) y lib.panel. Los arrays que se pasan a los helpers de lib van en orden cronológico, así que invierte primero las barras, que llegan de la más reciente a la más antigua. Un script puede devolver varias salidas, por ejemplo una salida bands y una line para un VWAP con bandas sigma.

Una forma rechazada no desaparece: el script se marca en el panel de Indicadores, donde la línea bajo su nombre pasa a ser «Valor de retorno no reconocido. Un indicador devuelve una serie, líneas o marcadores — consulta \"Indicador: qué devolver\".» en lugar de su destino de dibujo. Un script que devuelve salidas que no dibujan nada se marca como «empty», lo que distingue «no funciona» de «no había nada que mostrar».

Límites y trampas

  • Los grosores por debajo de 0,5 o por encima de 12 px se acotan; los nombres de estilo desconocidos vuelven a solid.
  • Los puntos de histograma con valor null o no finito se eliminan por completo, a diferencia de las líneas, donde null es un hueco.
  • Los niveles son segmentos con clave en price y from; no se filtran por el tiempo de la barra, así que un from anterior al historial cargado simplemente empieza en el borde izquierdo.
  • Una tabla de más de 50 filas se trunca; escribe tú el truncamiento en el título si el recuento importa.

Esta página en otros idiomas

Preguntas frecuentes

¿Por qué mi tabla no está en el panel que elegí?
Las tablas y los paneles de valores siempre se representan como tarjetas DOM sobre el gráfico, sea cual sea el destino de dibujo. El destino solo afecta a las formas de canvas, como las líneas y los histogramas.
¿Cómo muestro un hueco en vez de una línea a cero durante el calentamiento?
Devuelve value: null en esos puntos. El renderizador levanta el lápiz; un cero dibujaría un segmento falso.
¿Puedo mover la tarjeta de la tabla y conservar su sitio?
Sí. Arrástrala por su cabecera; la posición se guarda por salida en localStorage y se restaura al reabrir el gráfico.