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
| Forma | Campos | Valores por defecto aplicados |
|---|---|---|
| line | points [{time, value|null}], style {color, width, style} | color #7ed321; grosor acotado entre 0,5 y 12; estilo solid, dashed o dots |
| histogram | points [{time, value}], positiveColor, negativeColor | #22c55e positivo, #ef4444 negativo; una barra sin valor finito no emite ningún punto |
| bands | arrays de puntos upper, basis y lower, fillAlpha, style | fillAlpha 0,12, acotado entre 0 y 1; estilo como en line |
| markers | markers [{time, price, kind, color, label?}] | kind dot salvo arrow-up, arrow-down o square; color #7ed321 |
| levels | levels [{price, from, to|null, color, label?, style?}] | to null = llega hasta el borde derecho; solo price y from son obligatorios |
| table | title?, 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 |
| panel | title?, 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.
Páginas relacionadas
- Editor de indicadores del usuario en el gráfico
- Scripts en C++ (motor WASM)
- El VWAP explicado
- Indicador Bandas de VWAP de sesión
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.