DOWNTO
DOWNTO i ProBuilder får en FOR-løkke til å telle nedover fra en høyere startverdi til en lavere sluttverdi, og trekker fra én for hvert gjennomløp av løkken.
Syntaks
FOR variable = startValue DOWNTO endValue DO
// loop body
NEXTSlik fungerer det
En FOR-løkke med DOWNTO starter telleren på startValue og reduserer den med én etter hver runde, og kjører kroppen for hver verdi ned til og med endValue. Den er den synkende motparten til TO, som øker.
Retningen betyr noe når iterasjonsrekkefølgen påvirker resultatet. Barforskyvninger i ProBuilder vokser med alderen, så close[20] er eldre enn close[0]. En løkke skrevet FOR i = 20 DOWNTO 0 besøker derfor barer fra eldst til nyest, som er den naturlige rekkefølgen for beregninger som bygger opp tilstand kronologisk, som å spore den siste forekomsten av en hendelse eller spille av en rekke barer i tidsrekkefølge.
Startverdien må være større enn eller lik sluttverdien. Hvis startValue er mindre enn endValue, kjøres kroppen aldri, og skriptet fortsetter etter NEXT uten noen feil. BREAK er fortsatt tilgjengelig inne i kroppen for å forlate løkken tidlig.
Eksempler
Eksempel 1, Telle fallende barer fra eldst til nyest (Indikator)
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 ValueTelleren går fra 20 ned til 0, så skanningen starter på den eldste baren i vinduet og beveger seg mot nåtiden, og stopper ved den første baren som lukket på eller over sin open.
Eksempel 2, Offset for det siste oppgapet (Indikator)
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"Fordi DOWNTO behandler eldre bars først, overskriver hvert oppdagede gap det forrige, slik at forskyvningen til det nyeste gapet ligger i lastGap når løkken avsluttes.
Eksempel 3, Kronologisk momentum-score (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
ENDIFLøkken går gjennom de siste ti endringene fra bar til bar i tidsrekkefølge og netter oppganger mot nedganger. En score på 8 eller mer indikerer en vedvarende oppgang og utløser en long-inngang.
Vanlige feil og fallgruver
- Start mindre enn slutt.
FOR i = 0 DOWNTO 20kjører null iterasjoner. Ingen feil utløses, så variabler nedstrøms beholder stille startverdiene sine. Verifiser at grensene er i synkende rekkefølge. - Retningen endrer resultatet. Løkker som overskriver en variabel ved treff, eller som bruker BREAK ved en betingelse, gir andre svar med DOWNTO enn med TO. Velg retningen som passer den tilsiktede kronologien.
- Off-by-one i endene. Begge grenser er inkludert.
FOR i = 20 DOWNTO 0kjører 21 ganger. Å referere tilclose[i + 1]inne i kroppen strekker seg også én bar utover det angitte vinduet. - Ingen egendefinert trinnstørrelse. Telleren beveger seg alltid med nøyaktig én. Å hoppe over annenhver verdi krever aritmetikk på telleren inne i kroppen heller enn en trinnklausul.
Relaterte instruksjoner
FOR, den tellende løkken som DOWNTO endrer.TO, den stigende motparten til DOWNTO.NEXT, avslutter FOR-løkken og flytter telleren.DO, valgfri markør mellom løkkehodet og kroppen.BREAK, avslutter løkken før telleren når sluttverdien.WHILE, betingelsesdrevet alternativ når antall iterasjoner er ukjent.WEND, avslutter en WHILE-løkke.BarIndex, gjeldende barnummer, ofte brukt sammen med skanninger i synkende rekkefølge.