Únete hoy
Instrucciones/probuilder · probacktest · proorder · proscreener

NEXT

NEXT cierra un bloque de bucle FOR en ProBuilder, devolviendo la ejecución a la cabecera del bucle hasta que el contador supera su valor final. Cada FOR requiere un NEXT.

Sintaxis

probuilder
FOR variable = start TO end DO
  // statements executed on each iteration
NEXT

Cómo funciona

Un bucle FOR en ProBuilder consta de una cabecera, un cuerpo y la palabra clave de cierre NEXT. La cabecera asigna un valor inicial a la variable contador y declara el valor final con TO para los bucles ascendentes o DOWNTO para los descendentes. Todo lo que hay entre DO y NEXT forma el cuerpo.

Cada vez que la ejecución llega a NEXT, el contador se incrementa (o se decrementa con DOWNTO) y se compara con el valor final. Cuando el contador sigue dentro del rango, la ejecución vuelve al inicio del cuerpo del bucle. Cuando ha superado el valor final, la ejecución continúa con la primera instrucción después de NEXT. Ambos límites son inclusivos, por lo que FOR i = 10 TO 20 ejecuta once iteraciones.

NEXT es puramente estructural, no toma argumentos ni produce ningún valor. Cada FOR debe cerrarse con exactamente un NEXT, y los bucles anidados requieren un NEXT por cada FOR, cerrando desde el bucle más interno hacia fuera. Para salir de un bucle antes de que el contador se agote, usa BREAK, que transfiere el control a la instrucción siguiente al NEXT correspondiente.

Como el script completo ya se ejecuta una vez por bar, los bucles delimitados por NEXT se usan normalmente para cálculos sobre un rango de periodos o de índices de array dentro de un mismo bar, no para avanzar en el tiempo.

Ejemplos

Ejemplo 1, Sumar medias sobre un rango de periodos (Indicador)

probuilder
a = 0
FOR i = 10 TO 20 DO
  // accumulate the moving average of the open for each period length
  a = average[i](open) + a
NEXT
RETURN a AS "compound averages direction"

El bucle se ejecuta con i en 10 hasta 20. NEXT incrementa el contador y repite el cuerpo, y tras la última iteración se devuelve la suma acumulada.

Ejemplo 2, Contar bars alcistas en una ventana (ProOrder)

probuilder
// Count how many of the last 10 bars closed up
bullCount = 0
FOR k = 0 TO 9 DO
  IF close[k] > open[k] THEN
    bullCount = bullCount + 1
  ENDIF
NEXT

IF bullCount >= 7 AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

El cuerpo entre DO y NEXT examina un bar histórico por iteración. Cuando NEXT completa la décima pasada, el recuento alimenta la condición de entrada.

Ejemplo 3, Promediar un rango de cierres (ProScreener)

probuilder
// Mean close of the last 15 bars, computed manually
total = 0
FOR n = 0 TO 14 DO
  total = total + close[n]
NEXT
meanClose = total / 15

SCREENER[close > meanClose * 1.02] (meanClose AS "15-bar mean")

NEXT cierra el bucle de acumulación, tras lo cual la media se compara con el cierre actual para filtrar instrumentos.

Errores y trampas habituales

  • NEXT ausente o de más. Cada FOR necesita exactamente un NEXT. En bucles anidados, el compilador empareja cada NEXT con el FOR abierto más cercano, por lo que si falta uno a menudo se produce un error a varias líneas del fallo real.
  • Modificar el contador dentro del cuerpo. Reasignar la variable del bucle entre DO y NEXT cambia cuántas iteraciones quedan y puede crear bucles que nunca terminan dentro del bar. Es preferible usar BREAK para salir antes.
  • Palabra clave de dirección incorrecta. FOR i = 20 TO 10 nunca entra en el cuerpo porque el contador ya supera el valor final. Los rangos descendentes requieren DOWNTO en lugar de TO.
  • Bucles pesados en cada bar. Todo el bloque FOR...NEXT se ejecuta una vez por bar. Los rangos amplios combinados con llamadas costosas como average[i] multiplican el tiempo de cálculo en todo el gráfico.
  • FOR, abre el bucle contado que NEXT cierra.
  • TO, declara el valor final ascendente del contador del bucle.
  • DOWNTO, declara un rango de bucle descendente.
  • DO, separa la cabecera del bucle del cuerpo.
  • BREAK, sale del bucle antes de que el contador se agote.
  • WHILE, alternativa de bucle gobernada por una condición.
  • WEND, cierra un bucle WHILE, el equivalente de NEXT.