Bli medlem idag
Instruktioner/probuilder · probacktest · proorder · proscreener

NEXT

NEXT stänger ett FOR-loopblock i ProBuilder och skickar exekveringen tillbaka till loopens huvud till dess att räknaren passerar sitt slutvärde. Varje FOR kräver ett NEXT.

Syntax

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

Så fungerar det

En FOR-loop i ProBuilder består av ett huvud, en kropp och det avslutande nyckelordet NEXT. Huvudet tilldelar räknarvariabeln ett startvärde och deklarerar slutvärdet med TO för stigande loopar eller DOWNTO för fallande. Allt mellan DO och NEXT utgör kroppen.

Varje gång exekveringen når NEXT ökas räknaren (eller minskas med DOWNTO) och jämförs med slutvärdet. När räknaren fortfarande ligger inom intervallet hoppar exekveringen tillbaka till början av loopkroppen. När den har passerat slutvärdet fortsätter exekveringen med den första satsen efter NEXT. Båda gränserna är inkluderande, så FOR i = 10 TO 20 kör elva iterationer.

NEXT är rent strukturellt, det tar inga argument och ger inget värde. Varje FOR måste stängas av exakt ett NEXT, och nästlade loopar kräver ett NEXT per FOR, stängda från den innersta loopen och utåt. För att lämna en loop innan räknaren är uttömd, använd BREAK, som överför kontrollen till satsen efter det matchande NEXT.

Eftersom hela skriptet redan körs en gång per bar används loopar som avgränsas av NEXT typiskt för beräkningar över ett intervall av perioder eller arrayindex inom en enda bar, inte för att stega genom tiden.

Exempel

Exempel 1, Summera medelvärden över ett intervall av perioder (Indikator)

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"

Loopen körs med i vid 10 till och med 20. NEXT ökar räknaren och upprepar kroppen, och efter den sista iterationen returneras den ackumulerade summan.

Exempel 2, Räkna hausseartade barer i ett fönster (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

Kroppen mellan DO och NEXT inspekterar en historisk bar per iteration. När NEXT har slutfört det tionde varvet matas räknaren in i entryvillkoret.

Exempel 3, Medelvärde av ett intervall av stängningskurser (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 stänger ackumuleringsloopen, varefter medelvärdet jämförs med den aktuella stängningskursen för att filtrera instrument.

Vanliga fel och fallgropar

  • Saknat eller extra NEXT. Varje FOR behöver exakt ett NEXT. I nästlade loopar parar kompilatorn varje NEXT med den närmaste öppna FOR, så ett saknat NEXT ger ofta ett fel flera rader bort från det verkliga misstaget.
  • Att ändra räknaren inuti kroppen. Att tilldela loopvariabeln ett nytt värde mellan DO och NEXT ändrar hur många iterationer som återstår och kan skapa loopar som aldrig avslutas inom baren. Använd hellre BREAK för tidig exit.
  • Fel riktningsnyckelord. FOR i = 20 TO 10 går aldrig in i kroppen eftersom räknaren redan överstiger slutvärdet. Fallande intervall kräver DOWNTO istället för TO.
  • Tunga loopar på varje bar. Hela FOR...NEXT-blocket körs en gång per bar. Stora intervall kombinerade med kostsamma anrop som average[i] multiplicerar beräkningstiden över hela diagrammet.
  • FOR, öppnar den räknade loop som NEXT stänger.
  • TO, deklarerar det stigande slutvärdet för loopräknaren.
  • DOWNTO, deklarerar ett fallande loopintervall.
  • DO, skiljer loopens huvud från kroppen.
  • BREAK, lämnar loopen innan räknaren är uttömd.
  • WHILE, villkorsstyrt loopalternativ.
  • WEND, stänger en WHILE-loop, motsvarigheten till NEXT.