DOWNTO
DOWNTO en ProBuilder hace que un bucle FOR cuente hacia abajo desde un valor inicial más alto hasta un valor final más bajo, decrementando en uno en cada pasada por el bucle.
Sintaxis
FOR variable = startValue DOWNTO endValue DO
// loop body
NEXTCómo funciona
Un bucle FOR con DOWNTO inicia el contador en startValue y lo decrementa en uno tras cada pasada, ejecutando el cuerpo para cada valor hasta e incluyendo endValue. Es la contraparte descendente de TO, que incrementa.
La dirección importa siempre que el orden de iteración afecte al resultado. Los desplazamientos de bar en ProBuilder crecen con la antigüedad, así que close[20] es más antiguo que close[0]. Un bucle escrito FOR i = 20 DOWNTO 0 recorre por tanto los bars del más antiguo al más reciente, que es el orden natural para cálculos que acumulan estado cronológicamente, como seguir la aparición más reciente de un evento o reproducir una secuencia de bars en orden temporal.
El valor inicial debe ser mayor o igual que el valor final. Si startValue es menor que endValue, el cuerpo nunca se ejecuta y el script continúa después de NEXT sin ningún error. BREAK sigue disponible dentro del cuerpo para abandonar el bucle antes de tiempo.
Ejemplos
Ejemplo 1, Contar barras a la baja de la más antigua a la más reciente (Indicador)
Value = 0
// Scan from 20 bars back toward the current bar
FOR i = 20 DOWNTO 0 DO
IF (Close[i] < Open[i]) THEN
Value = Value + 1
ELSE
BREAK
ENDIF
NEXT
RETURN ValueEl contador va de 20 hasta 0, por lo que el recorrido empieza en la barra más antigua de la ventana y avanza hacia el presente, deteniéndose en la primera barra que cerró en o por encima de su apertura.
Ejemplo 2, Desplazamiento del gap al alza más reciente (Indicador)
lastGap = -1
// Visit bars oldest first so the final assignment is the newest gap
FOR i = 50 DOWNTO 1 DO
IF low[i - 1] > high[i] THEN
lastGap = i - 1
ENDIF
NEXT
RETURN lastGap AS "bars since last up gap"Como DOWNTO procesa primero las barras más antiguas, cada hueco detectado sobrescribe el anterior, dejando el desplazamiento del hueco más reciente en lastGap cuando termina el bucle.
Ejemplo 3, Puntuación de momentum cronológica (ProOrder)
score = 0
// Compare each bar with the one before it, oldest pair first
FOR i = 10 DOWNTO 1 DO
IF close[i] > close[i + 1] THEN
score = score + 1
ELSE
score = score - 1
ENDIF
NEXT
IF score >= 8 AND NOT ONMARKET THEN
BUY 1 CONTRACT AT MARKET
ENDIFEl bucle recorre los últimos diez cambios de barra a barra en orden temporal y compensa las subidas con las bajadas. Una puntuación de 8 o más indica un avance persistente y activa una entrada long.
Errores y trampas habituales
- Inicio menor que el final.
FOR i = 0 DOWNTO 20ejecuta cero iteraciones. No se lanza ningún error, así que las variables posteriores conservan en silencio sus valores iniciales. Comprueba que los límites están en orden descendente. - La dirección cambia el resultado. Los bucles que sobrescriben una variable al encontrar una coincidencia, o que hacen BREAK ante una condición, dan respuestas distintas con DOWNTO que con TO. Elige la dirección que coincida con la cronología deseada.
- Error de uno en los extremos. Ambos límites son inclusivos.
FOR i = 20 DOWNTO 0se ejecuta 21 veces. Referenciarclose[i + 1]dentro del cuerpo también alcanza una bar más allá de la ventana indicada. - Sin paso personalizado. El contador siempre avanza exactamente de uno en uno. Saltarse valores alternos requiere aritmética sobre el contador dentro del cuerpo, no una cláusula de paso.
Instrucciones relacionadas
FOR, el bucle contado que DOWNTO modifica.TO, la contraparte ascendente de DOWNTO.NEXT, cierra el bucle FOR y mueve el contador.DO, marcador opcional entre el encabezado del bucle y el cuerpo.BREAK, sale del bucle antes de que el contador alcance el valor final.WHILE, alternativa guiada por una condición cuando no se conoce el número de iteraciones.WEND, cierra un bucle WHILE.BarIndex, número de la barra actual, a menudo combinado con recorridos descendentes.