Bli medlem i dag
Instruksjoner/probuilder · probacktest · proorder · proscreener

FOR

FOR-løkken i ProBuilder gjentar en kodeblokk et fast antall ganger, og teller oppover med TO eller nedover med DOWNTO. Hver FOR-blokk avsluttes med NEXT.

Syntaks

probuilder
FOR variable = start TO end DO
  // commands repeated on each pass
NEXT

Teller nedover:

probuilder
FOR variable = start DOWNTO end DO
  // commands repeated on each pass
NEXT

Slik fungerer det

På hver bar initialiserer løkken tellervariabelen til startverdien, utfører blokken, og øker deretter telleren med 1 (TO) eller reduserer den med 1 (DOWNTO). Når telleren passerer sluttverdien, fortsetter kjøringen etter NEXT. Nøkkelordet DO er valgfritt i gjeldende ProRealTime™-versjoner, men å beholde det gir bedre lesbarhet.

Telleren er en vanlig variabel og brukes ofte som en barforskyvning, så close[i] inne i en løkke leser sluttkursen i barer tilbake. Dette gjør FOR til standardverktøyet for å summere, skanne eller tegne over et spenn av historiske barer.

Løkker kan nøstes. Hele løkken kjøres på nytt på hver bar i diagrammet, så en løkke med 100 gjennomløp på et diagram med 10,000 barer utfører én million iterasjoner. Hold intervallene så små som beregningen tillater, og bruk BREAK for å avslutte tidlig når resultatet er kjent.

Eksempler

Eksempel 1, Sum av åpningspriser over et intervall av barer (Indikator)

probuilder
a = 0
FOR i = 10 TO 20 DO
  // add the open of each bar in the range to the running total
  a = open[i] + a
NEXT
RETURN a AS "Sum of Opens"

Telleren i går fra bar-offset 10 til bar-offset 20 og akkumulerer hver åpningskurs i a, som returneres når løkken er ferdig.

Eksempel 2, Telling av bullish barer i et vindu (ProScreener)

probuilder
count = 0
FOR i = 0 TO 19 DO
  // count the bars that closed above their open
  IF close[i] > open[i] THEN
    count = count + 1
  ENDIF
NEXT
SCREENER[count >= 15] (count AS "Bullish bars")

Løkken undersøker de siste 20 barene, og screeneren lister opp instrumenter der minst 15 av dem lukket høyere enn de åpnet.

Eksempel 3, Bakoverskanning med DOWNTO (ProOrder)

probuilder
// find the most recent bar that matches the 50-bar high
hh = highest[50](high)
found = 50
FOR i = 50 DOWNTO 0 DO
  IF high[i] = hh THEN
    found = i
  ENDIF
NEXT
// enter only if the high was printed within the last 5 bars
IF found <= 5 AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

DOWNTO skanner fra den eldste forskyvningen mot gjeldende bar, og lar found ved den nyeste forskyvningen der 50-bars høyeste ble satt.

Vanlige feil og fallgruver

  • Manglende NEXT. Hver FOR trenger en tilsvarende NEXT. Med nøstede løkker kan kompilatoren flagge feilen langt fra løkken som faktisk er uavsluttet, så par dem fra innerst til ytterst.
  • Start forbi slutt. A FOR i = 10 TO 5 løkken kjører aldri, og det gjør heller ikke FOR i = 5 DOWNTO 10. Retningsnøkkelordet må samsvare med retningen på intervallet, ellers hoppes blokken over uten varsel.
  • Endring av telleren inne i løkken. Å tilordne løkkevariabelen på nytt inne i blokken forstyrrer den automatiske økningen og kan gi hoppede gjennomløp eller uventede avslutninger. Bruk en separat variabel for mellomregninger.
  • Ytelse på store intervaller. Løkken kjøres på nytt på hver bar, så brede intervaller multipliseres raskt. Foretrekk innebygde funksjoner som summation eller highest når en finnes, og avslutt tidlig med BREAK når svaret er funnet.
  • TO, oppadgående områdeseparator inne i et FOR-hode.
  • DOWNTO, nedadgående områdeseparator inne i et FOR-hode.
  • NEXT, lukker en FOR-blokk og utløser neste gjennomløp.
  • DO, valgfritt nøkkelord som avslutter et FOR- eller WHILE-hode.
  • BREAK, avslutter gjeldende løkke før området er oppbrukt.
  • WHILE, betingelsesdrevet løkke for et ukjent antall gjennomløp.
  • WEND, lukker en WHILE-blokk.
  • BarIndex, bar-teller som er nyttig for å begrense løkkeområder.