NEXT
NEXT lukker en FOR-løkkeblokk i ProBuilder, og sender kjøringen tilbake til løkkehodet til telleren passerer sluttverdien sin. Hver FOR krever én NEXT.
Syntaks
FOR variable = start TO end DO
// statements executed on each iteration
NEXTSlik fungerer det
En FOR-løkke i ProBuilder består av et hode, en kropp og det avsluttende nøkkelordet NEXT. Hodet tilordner en startverdi til tellervariabelen og deklarerer sluttverdien med TO for stigende løkker eller DOWNTO for synkende. Alt mellom DO og NEXT utgjør kroppen.
Hver gang kjøringen når NEXT, økes telleren (eller reduseres med DOWNTO) og sammenlignes med sluttverdien. Når telleren fortsatt er innenfor området, hopper kjøringen tilbake til toppen av løkkekroppen. Når den har passert sluttverdien, fortsetter kjøringen med den første setningen etter NEXT. Begge grensene er inkluderende, så FOR i = 10 TO 20 kjører elleve iterasjoner.
NEXT er rent strukturelt, det tar ingen argumenter og gir ingen verdi. Hver FOR må lukkes av nøyaktig én NEXT, og nestede løkker krever én NEXT per FOR, lukket fra den innerste løkken og utover. For å forlate en løkke før telleren er oppbrukt, bruk BREAK, som overfører kontrollen til setningen etter den tilhørende NEXT.
Siden hele skriptet allerede kjøres én gang per bar, brukes løkker avgrenset av NEXT vanligvis til beregninger over et spekter av perioder eller array-indekser innenfor én enkelt bar, ikke til å gå gjennom tiden steg for steg.
Eksempler
Eksempel 1, Summere gjennomsnitt over et intervall av perioder (Indikator)
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"Løkken kjører med i på 10 til og med 20. NEXT øker telleren og gjentar kroppen, og etter siste iterasjon returneres den akkumulerte summen.
Eksempel 2, Telle bullish barer i et vindu (ProOrder)
// 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
ENDIFKroppen mellom DO og NEXT undersøker én historisk bar per iterasjon. Etter at NEXT har fullført den tiende gjennomgangen, mates tellingen inn i inngangsbetingelsen.
Eksempel 3, Gjennomsnitt av et intervall av sluttkurser (ProScreener)
// 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 lukker akkumuleringsløkken, hvoretter gjennomsnittet sammenlignes med gjeldende sluttkurs for å filtrere instrumenter.
Vanlige feil og fallgruver
- Manglende eller overflødig NEXT. Hver FOR trenger nøyaktig én NEXT. I nestede løkker parer kompilatoren hver NEXT med den nærmeste åpne FOR, så en manglende NEXT gir ofte en feil flere linjer unna den virkelige feilen.
- Endre telleren inne i kroppen. Å tilordne løkkevariabelen på nytt mellom DO og NEXT endrer hvor mange iterasjoner som gjenstår, og kan skape løkker som aldri avsluttes innenfor baren. Bruk heller BREAK for tidlig utgang.
- Feil retningsnøkkelord.
FOR i = 20 TO 10går aldri inn i kroppen fordi telleren allerede overskrider sluttverdien. Synkende intervaller krever DOWNTO i stedet for TO. - Tunge løkker på hver bar. Hele FOR...NEXT-blokken kjøres én gang per bar. Store intervaller kombinert med kostbare kall som
average[i]multipliserer beregningstiden over hele diagrammet.
Relaterte instruksjoner
FOR, åpner den tellede løkken som NEXT lukker.TO, deklarerer den stigende sluttverdien til løkketelleren.DOWNTO, deklarerer et synkende løkkeintervall.DO, skiller løkkehodet fra kroppen.BREAK, går ut av løkken før telleren er oppbrukt.WHILE, betingelsesdrevet løkkealternativ.WEND, lukker en WHILE-løkke, motstykket til NEXT.