Scripting: escribir un indicador (JavaScript)

Un script de indicador define compute(bars, params, ctx) y devuelve una lista de salidas. Esta página enumera las formas que puede devolver, de dónde salen sus parámetros y cómo se guarda el script.

Senzoukria · Documentación · Actualizado en septiembre de 2026


Dónde encontrarlo

Dónde
Página Scripting → Nuevo indicador
Punto de entrada
compute(bars, params, ctx), que devuelve un array de salidas
Destino
«En el gráfico» (superpuesto) o «Panel propio»
Lenguaje por defecto
JavaScript; un script sin lenguaje registrado se lee como JavaScript
Presupuesto
2 segundos por ejecución, en un worker sin red, sin acceso a archivos y sin API de la plataforma

Qué hace

compute() recibe las barras, los valores de los parámetros y un contexto, y devuelve una lista de salidas. El renderizador solo conoce esas salidas —nunca qué script las produjo—, así que añadir un indicador jamás toca el pipeline.

El tiempo viaja en la marca de tiempo de bucket de cada barra, en nanosegundos, la clave temporal de todo el pipeline de footprint. Un punto cuyo valor es null es un hueco: el renderizador levanta el lápiz en vez de trazar una recta falsa a través de un calentamiento o de un reinicio de sesión.

Merece la pena respetar dos convenciones, porque los indicadores integrados las siguen: el delta de un nivel es el volumen comprador menos el vendedor y el delta de una barra es la suma de sus niveles; y el tamaño de tick sale del contexto, nunca escrito a mano en el código.

Formas de salida

Las formas que puede devolver un indicador
FormaPor defectoQué cambia
linegrosor 1Una serie alineada con las barras; los valores null son huecos.
histogramColumnas con un color positivo y otro negativo; una barra sin valor no emite ningún punto.
bandsfill 0,12Series superior, base e inferior con una opacidad de relleno acotada entre 0 y 1. No existe un helper lib.bands en JavaScript: se construye con of.bands en Python, o se devuelve como objeto plano.
markersPuntos a un precio sobre una barra, como punto, flecha arriba o abajo o cuadrado, con etiqueta opcional.
levelsto = nullNiveles horizontales de una barra a otra; un final null lleva el nivel hasta el borde derecho.
tablealign leftUna tabla flotante en el DOM: se puede leer, seleccionar y copiar.
panelUn panel pequeño de filas etiqueta/valor, coloreables de forma opcional.

Parámetros

Los parámetros se pueden declarar en el panel del editor, pero un script también puede leer una clave directamente del código. El lector de parámetros analiza el código de forma estática buscando las tres formas que realmente se escriben —params.get("clave", defecto), params["clave"] y params.clave ?? defecto— además de alias de una línea, como una lambda o una función flecha que envuelva params.

Eso es lo que alimenta la opción «Explorar todos los parámetros legibles» del asistente de backtest, que configura hasta cinco ejes a partir de los parámetros que tu script lee de verdad, con valores alrededor de sus defectos. Es una propuesta en un campo que puedes corregir, no un contrato: una clave construida o un bucle sobre un diccionario no se verán.

Límites y trampas

  • Devolver algo que no sea una de las formas anteriores se informa como valor de retorno no reconocido, en lugar de dibujarse.
  • Una ejecución que termina sin error y no pinta nada suele significar que los valores devueltos no son números.
  • Los scripts viven en el almacenamiento local de esta máquina; no se sincronizan ni se respaldan por ti.
  • table y panel son las dos únicas formas que no se dibujan en el canvas: salen como DOM, porque una tabla tiene que poder seleccionarse.

Esta página en otros idiomas

Preguntas frecuentes

¿Cómo llevo mi indicador al gráfico?
Guárdalo y activa «Mostrar en el gráfico». Se suma al panel de Indicadores, en el grupo «Mis scripts», y desde ahí se activa y se desactiva como cualquier otro indicador.
¿Puede un script devolver varias salidas?
Sí. compute() devuelve un array, y los indicadores integrados hacen lo mismo: un VWAP, por ejemplo, emite una salida bands y una salida line.
¿Por qué falta mi media móvil al principio del gráfico?
Porque los valores de calentamiento se devuelven como null, y null levanta el lápiz. Trazar a través de ellos inventaría datos que el período todavía no ha producido.