Desbordamiento de pila del indicador en Tradovate a ~63.500 barras
Si desplaza un indicador de superposición personalizado lo suficientemente atrás, simplemente se detiene, con un error Maximum call stack size exceeded en la consola. Es un límite del navegador alrededor de las 63.500 velas, y la solución es cargar menos historial, no más.
Está en medio de un backtest, desplazando un indicador de superposición personalizado varios meses atrás en velas de un minuto, y en algún momento el indicador simplemente se detiene. La línea se aplana, las bandas desaparecen o la superposición se niega silenciosamente a redibujarse. Abre la consola del navegador y ahí está: RangeError: Maximum call stack size exceeded. Esto no es un gráfico corrupto, un feed de datos defectuoso ni algo que haya configurado mal. Es un límite. Los indicadores de superposición personalizados en Tradovate fallan de forma constante en cuanto el gráfico cargado supera aproximadamente las 63.500 velas, y ninguna cantidad de datos comprados ni de cambios de navegador mueve esa pared. La solución es casi contraintuitiva: cargar menos historial, no más. A continuación se explica exactamente qué está pasando y cómo mantener sus superposiciones funcionando.
Solución rápida para el desbordamiento de pila en ~63.500 barras
- Cargue menos velas, punto. El desbordamiento se produce por tener demasiadas barras en memoria, así que reducir el rango cargado por debajo de ~63.500 es la clave de todo.
- Pase a un marco temporal mayor. El mismo rango de calendario necesita solo una fracción de las barras en un gráfico de 5 o 15 minutos frente a uno de 1 minuto.
- Deje de desplazarse tan atrás. Cada desplazamiento hacia atrás carga más historial en el cálculo. Analice una ventana más ajustada y la superposición seguirá dibujándose.
- No suba el valor de Minimum Number of Bars to Load. Aumentar ese ajuste lo acerca al límite, no lo aleja de él.
- Divida los backtests largos en tramos. Revise un período amplio en segmentos de fechas más cortos para que ninguna vista individual supere el límite.
- Evite las soluciones sin salida. Comprar más datos históricos, cambiar de navegador y quitar indicadores no ayuda. Solo ayuda cargar menos velas.
Qué significa aquí “Maximum Call Stack Size Exceeded”
Los gráficos de Tradovate se ejecutan en el navegador, en JavaScript. Cada indicador que agrega es código que recorre las barras del gráfico y recalcula sus valores. Una superposición personalizada, algo que se dibuja sobre el precio como medias móviles, Bandas de Bollinger o VWAP, tiene que procesar toda la serie cargada para renderizarse correctamente. Ese procesamiento depende de la pila de llamadas del navegador, un espacio de trabajo de tamaño fijo que el motor utiliza para llevar el control de las llamadas de función anidadas. Cada navegador limita la profundidad que puede alcanzar esa pila, y cuando un cálculo se ejecuta más profundo que ese límite, el motor lanza una parada total: RangeError: Maximum call stack size exceeded.
En Tradovate, el punto de fallo específico para las superposiciones personalizadas se sitúa alrededor de las 63.500 velas. Al superarlo, la superposición deja de calcular, a menudo con un error que se remonta a la rutina interna de series temporales del gráfico (verá algo como replaceTail en la consola si lo comprueba). Cabe destacar que ~63.500 está justo al lado de 65.536, el clásico límite de 64K. Esto es un fuerte indicio de que se trata de un límite incorporado en el motor de gráficos y no de un fallo aleatorio, que es exactamente la razón por la que atacarlo desde distintos ángulos nunca lo supera.
Por qué afecta específicamente a las superposiciones personalizadas
El desencadenante es el número total de velas, no lo que se ve en pantalla
Esta es la parte que desconcierta a la gente. Puede que solo esté viendo un par de cientos de barras visibles cuando la superposición falla, así que parece aleatorio. Pero el gráfico no solo contiene lo que está en el área visible, contiene todo lo que ha cargado. Desplácese lo suficientemente atrás, ejecute una repetición de mercado larga o abra un rango de fechas amplio, y miles de barras fuera de pantalla estarán en memoria alimentando los cálculos de la superposición. El gráfico visible se ve tranquilo; es la serie subyacente la que hace que se desborde.
Los marcos temporales bajos alcanzan el límite rápido
Las barras se acumulan rápidamente en intervalos pequeños. Un gráfico de un minuto de datos continuos de futuros acumula decenas de miles de velas en apenas un par de meses, así que un backtest que parece corto puede superar las 63.500 sin previo aviso. Suba ese mismo estudio a velas de 5 o 15 minutos y ese mismo tramo de historial necesita solo una fracción de las velas, lo que lo mantiene bien por debajo del límite.
Una sola superposición sigue siendo un recálculo completo
Reducir el gráfico a una sola superposición personalizada parece que debería ayudar, y no ayuda. Esa única superposición sigue teniendo que recalcular en todas las barras cargadas. La profundidad de la pila depende del tamaño de la serie, no de cuántos indicadores tenga apilados. Así que el número de velas es lo que importa, y es el único número que vale la pena atacar.
Cómo solucionar el desbordamiento de pila: paso a paso
Reduzca el rango de velas cargado
Haga clic derecho en el gráfico y abra su configuración. Busque el control de carga, normalmente etiquetado como algo similar a Minimum Number of Bars to Load, y manténgalo modesto en lugar de al máximo. Confirme la etiqueta actual en su versión, ya que Tradovate ajusta el texto con el tiempo. El instinto cuando un indicador no se dibuja es cargar más historial para que tenga “suficientes” datos. Resista esa tentación aquí. Con este error, más barras es el problema. Quiere menos velas alimentando la superposición, para que el recálculo se mantenga lo bastante superficial para la pila del navegador.
Pase a un marco temporal mayor
Esta es, con diferencia, la palanca más efectiva. Abra el selector de intervalo y suba de 1 minuto a 5, 15 minutos o más. Como cada barra ahora cubre más tiempo, el mismo rango de fechas se reduce a muchas menos velas, y vuelve a estar por debajo del límite de inmediato. Si su estrategia realmente necesita resolución de un minuto, aún puede tenerla, simplemente la estudia en ventanas más cortas en lugar de una única carga continua gigante.
Deje de desplazarse tan atrás en el pasado
Cada vez que arrastra el gráfico hacia la izquierda, Tradovate trae más historial y se lo entrega a la superposición. Si ha estado desplazándose semanas o meses de datos de marco temporal bajo, eso hace que su número de velas aumente en tiempo real. Reinicie el gráfico a una ventana reciente y deje que se recargue con una serie más pequeña. La superposición que acaba de fallar volverá a calcular en cuanto el número cargado vuelva a estar por debajo del límite.
Reconstruya la vista con una plantilla y luego añada la superposición
Cambiar el ajuste de barras de un gráfico después de los hechos no siempre hace que la serie más pequeña se aplique de forma limpia. La opción fiable es configurar un gráfico como lo desea, en un marco temporal mayor con una carga modesta, guardarlo como plantilla y luego aplicar esa plantilla en un gráfico nuevo antes de añadir la superposición personalizada. Cargar la superposición en un gráfico ya reducido evita repetir todo el cálculo sobredimensionado y le da un renderizado limpio.
Divida los backtests largos en segmentos
Si está revisando un trimestre o un año entero en un intervalo pequeño, no intente mantenerlo todo en una sola carga continua. Divídalo en segmentos de fechas más cortos, unas pocas semanas cada vez en un marco temporal bajo, o suba todo el conjunto a un intervalo mayor. Obtiene el mismo análisis sin pedirle jamás a una sola superposición que procese más de 60.000 barras de una vez.
Repórtelo a soporte si el problema persiste por debajo del límite
Si una superposición lanza el error de pila en un gráfico modesto, claramente por debajo del límite, vale la pena reportarlo. Envíe al soporte de Tradovate el instrumento exacto, el marco temporal, aproximadamente cuántas barras se cargaron y el error completo de la consola, incluida la traza de replaceTail si puede capturarla. Los números concretos les ayudan a reproducirlo. Eso sí, tenga en cuenta que el límite de ~63.500 en sí es un comportamiento conocido, no algo que un ticket de soporte vaya a eliminar.



Qué no lo soluciona
Muchas soluciones que suenan razonables no sirven de nada aquí, y saberlo le ahorra una tarde entera:
- Comprar más datos históricos. Esta es la gran trampa. Los datos adicionales lo empujan aún más allá del límite, ya que el desbordamiento se debe precisamente al volumen de velas.
- Cambiar de navegador. El límite de la pila de llamadas es aproximadamente el mismo en Chrome, Edge, Firefox y Safari, así que un navegador nuevo apenas mueve el límite.
- Quitar todos los indicadores menos uno. Una sola superposición sigue recalculando toda la serie, así que lo que desborda es el número de velas cargadas, no el número de indicadores.
- Subir el valor de Minimum Number of Bars to Load. Eso empuja el número de velas hacia el límite. Es la dirección equivocada.
Todas y cada una de estas dejan el límite de ~63.500 exactamente donde está. La única palanca que cambia el resultado es cargar menos velas.
Tabla de resolución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| La superposición personalizada deja de dibujarse tras desplazarse muy atrás | El número de velas cargadas superó ~63.500 | Reinicie a una ventana reciente; pase a un marco temporal mayor |
| La consola muestra “Maximum call stack size exceeded” | El recálculo de la superposición superó la profundidad de la pila del navegador | Reduzca el rango cargado hasta que el número baje del límite |
| Las bandas/medias fallan en un backtest largo de 1 minuto | El marco temporal bajo acumuló demasiadas barras | Suba el intervalo o divida el período en segmentos más cortos |
| Comprar más datos empeoró la situación | El historial adicional empujó el número más allá del límite | Recorte el historial en su lugar; menos datos, no más |
| Subir Minimum Bars to Load no ayudó | Una carga mayor lo acercó al límite | Reduzca la carga y aplique una plantilla recortada antes de añadir la superposición |
| El error aparece en un gráfico pequeño, claramente por debajo del límite | Posible defecto que vale la pena reportar | Envíe a soporte el instrumento, el marco temporal, el número de barras y la traza completa del error |
Ejecute la estrategia fuera del gráfico con PickMyTrade
Aquí está el punto más amplio. Si una superposición del navegador está haciendo trabajo real en su proceso, alimentando entradas durante un backtest o impulsando una señal en vivo, está dependiendo de un motor de gráficos que tiene un límite duro incorporado. Eso está bien para evaluar visualmente una configuración. Es un riesgo para la automatización. El enfoque más limpio es ejecutar la lógica en algún lugar construido para soportarla, y reservar el gráfico para lo que los gráficos hacen bien: mirar el precio.
- Construya la condición donde sí escala. Una plataforma de gráficos como TradingView puede expresar la lógica de su superposición en un script y disparar un webhook en el instante en que se cumplan sus condiciones, sin depender del número de velas cargadas en una pestaña del navegador.
- Enrútelo directo a Tradovate. PickMyTrade toma ese webhook y coloca la orden en su cuenta de Tradovate automáticamente, de modo que la señal se convierte en una ejecución sin un gráfico de por medio.
- Replique en varias cuentas. El mismo disparador puede impulsar varias cuentas de evaluación o fondeadas a la vez, para que no tenga que volver a ejecutar una superposición frágil en cada pantalla.
- Enrutamiento seguro frente a los límites de solicitudes. El flujo de órdenes se espacia para mantenerse dentro de los límites de solicitudes de Tradovate, evitando las tormentas de reintentos que provocan bloqueos independientes.
Conserva sus superposiciones para el análisis visual, recortadas por debajo del límite, y entrega la ejecución a un pipeline al que no le importa cuántas velas tenga cargadas un gráfico.
Ejecute su estrategia fuera del motor de gráficos
Construya la lógica de su superposición en TradingView y deje que PickMyTrade enrute la señal a Tradovate, sin ningún límite de velas de por medio.
Comience su prueba gratuitaPreguntas frecuentes
Es un error del lado del navegador. El gráfico se ejecuta en JavaScript, y cada superposición personalizada se recalcula a sí misma en todas las barras del gráfico. Cuando el número de velas cargadas es lo bastante grande, ese cálculo se ejecuta más profundo de lo que permite la pila de llamadas del navegador y lanza un RangeError: Maximum call stack size exceeded. En Tradovate esto aparece alrededor de las 63.500 velas para los indicadores de superposición personalizados, y la superposición simplemente deja de dibujarse o actualizarse a partir de ese punto.
Porque el desencadenante es el número total de velas, no lo que se ve en pantalla. Desplazarse muy atrás, ejecutar una repetición larga o hacer backtest de un rango de fechas amplio en un marco temporal bajo acumula barras en memoria. Cuando el recálculo de la superposición supera aproximadamente las 63.500 velas, la pila de llamadas se desborda y el indicador se detiene. Reduzca el rango cargado por debajo de ese límite y volverá a calcular.
No es una especificación publicada, es el punto práctico en el que las superposiciones personalizadas fallan. La cifra se sitúa justo alrededor de la marca de 64.000, lo cual es un indicio clásico de un límite interno en el motor de gráficos y no un número arbitrario. Trátelo como un límite de trabajo firme: mantenga el número de velas cargadas cómodamente por debajo de él y las superposiciones se comportarán bien.
Haga lo contrario de cargar más historial. Pase a un marco temporal mayor para que el mismo rango de fechas necesite muchas menos barras, deje de desplazarse tan atrás en el pasado, reduzca la ventana que está estudiando y mantenga Minimum Number of Bars to Load en un valor modesto en lugar de al máximo. Si está haciendo backtest de un período largo, divídalo en tramos más cortos para que ninguna vista individual supere el límite.
No. Más datos empeoran la situación, no la mejoran. El desbordamiento se debe a que se procesan demasiadas velas a la vez, así que añadir historial lo empuja aún más allá del límite. Comprar datos adicionales, cambiar de navegador o reducir el gráfico a una sola superposición dejan el límite exactamente donde está. La única palanca que ayuda es cargar menos velas.
No de forma significativa. El límite de la pila de llamadas es aproximadamente el mismo en los navegadores más comunes, así que un navegador distinto apenas aporta algo. Quitar indicadores hasta dejar una sola superposición tampoco ayuda, porque una única superposición personalizada sigue teniendo que recalcular todo el número de velas. Reducir el rango cargado es lo que realmente lo soluciona.
Sí, y para la automatización es el camino más limpio. En lugar de depender de una superposición del navegador que se atasca con historiales largos, construya su lógica en una plataforma de gráficos como TradingView y dispare un webhook cuando se cumplan sus condiciones. Enrute ese webhook a través de un puente de automatización para que coloque la operación en su cuenta de Tradovate. La estrategia se ejecuta fuera del gráfico, así que un límite de pila de llamadas en un gráfico cargado nunca se interpone entre su señal y su ejecución.
Esta guía tiene fines exclusivamente educativos e informativos y no constituye asesoramiento financiero, de inversión ni de trading. Operar con futuros y otros productos apalancados conlleva un riesgo sustancial de pérdida y no es adecuado para todos los inversores. PickMyTrade es una plataforma de automatización independiente de terceros y no está afiliada, respaldada ni patrocinada por Tradovate, Inc. ni por Bookmap. Todos los nombres, logotipos y marcas relacionados son propiedad de sus respectivos dueños. Las funciones y los pasos de la plataforma cambian con el tiempo, así que confirme siempre el proceso actual en la documentación oficial de la plataforma antes de actuar.