DO
DO i ProBuilder markerer starten på løkkekroppen i FOR- og WHILE-setninger. Det er valgfritt, utfører ingen operasjon, og finnes for å gjøre løkker lesbare.
Syntaks
FOR variable = start TO end DO
// actions executed on each iteration
NEXTI en WHILE-løkke:
WHILE condition DO
// actions executed while the condition is true
WENDSlik fungerer det
DO er et strukturelt nøkkelord. Det står mellom løkkedeklarasjonen, enten FOR variable = start TO end eller WHILE condition, og setningene som kjøres på hver iterasjon. Kompilatoren godtar løkker med eller uten den; utførelsen er identisk uansett. Formålet er lesbarhet, å markere nøyaktig hvor løkkehodet slutter og kroppen begynner.
I en FOR-løkke kjøres kroppen mellom DO og NEXT én gang for hver verdi av telleren, oppover med TO eller nedover med DOWNTO. I en WHILE-løkke gjentas kroppen mellom DO og WEND så lenge betingelsen evalueres til sann, og betingelsen testes på nytt før hvert gjennomløp.
Løkker kjøres i sin helhet på hver bar i diagrammet eller backtesten, så en løkke som skanner hundrevis av barer gjentar den skanningen på hver nye bar. BREAK avslutter den omsluttende løkken tidlig, noe som holder antall iterasjoner nede når de gjenstående gjennomløpene ikke kan endre resultatet.
Eksempler
Eksempel 1, Telle påfølgende fallende barer (Indikator)
Value = 0
FOR i = 1 TO 20 DO
// Stop counting at the first bar that is not a down bar
IF (Close[i] < Open[i]) THEN
Value = Value + 1
ELSE
BREAK
ENDIF
NEXT
RETURN ValueLøkken går bakover gjennom de forrige 20 barene og teller hvor mange som lukket under sin open, og stopper ved den første baren som ikke gjorde det. DO skiller løkkehodet fra tellelogikken.
Eksempel 2, Påfølgende stigende barer med en WHILE-løkke (ProScreener)
i = 0
count = 0
// Walk backward while each bar closed above its open
WHILE (close[i] > open[i]) AND (i < 100) DO
count = count + 1
i = i + 1
WEND
SCREENER[count >= 3] (count AS "up bars in a row")WHILE-løkken teller den gjeldende rekken av stigende barer, begrenset til 100 iterasjoner, og screeneren treffer instrumenter med en rekke på tre eller mer.
Eksempel 3, Filter for volatilitetstopp (ProBacktest)
total = 0
// Sum the range of the previous 10 completed bars
FOR i = 1 TO 10 DO
total = total + Range[i]
NEXT
avgRange = total / 10
// Enter when the current bar's range doubles the recent average
IF Range > 2 * avgRange AND NOT ONMARKET THEN
BUY 1 CONTRACT AT MARKET
ENDIFEn FOR-løkke med DO akkumulerer kursområdene for de siste ti barene for å bygge et gjennomsnitt, som så styrer inngangsbetingelsen.
Vanlige feil og fallgruver
- Feil avsluttende nøkkelord. FOR-løkker avsluttes med NEXT og WHILE-løkker avsluttes med WEND. Å kombinere FOR med WEND, eller WHILE med NEXT, er en kompileringsfeil selv når DO er med.
- DO på en egen linje. DO hører til på slutten av linjen med løkkehodet. Å plassere det på en egen linje, eller gjenta det foran hver setning, kompilerer ikke.
- Uendelige WHILE-løkker. DO beskytter ikke mot en betingelse som aldri blir falsk. En WHILE-kropp må endre noe betingelsen avhenger av, eller inneholde et hardt tak på antall iterasjoner, ellers henger skriptet.
- Å anta at DO er påkrevd. Å utelate DO er lovlig, så fraværet av det i eksisterende kode er ikke en feil. Blandede stiler i ett og samme skript kompilerer fint, men går ut over lesbarheten.
Relaterte instruksjoner
FOR, tellende løkke der DO innleder kroppen.NEXT, lukker en FOR-løkke og flytter telleren videre.TO, stigende tellerretning i en FOR-header.DOWNTO, synkende tellerretning i en FOR-header.WHILE, betingelsesdrevet løkke som også godtar DO.WEND, avslutter en WHILE-løkke.BREAK, går ut av den omsluttende løkken før den er ferdig.IF, betinget logikk som ofte nestes inne i løkkekropper.