TO
TO setter sluttverdien for en FOR-løkketeller i ProBuilder, slik at løkken kjører fra startverdien sin opp til den grensen inklusive, én iterasjon per verdi.
Syntaks
FOR variable = start_value TO end_value DO
// code executed on each iteration
NEXTSlik fungerer det
I hodet på en FOR-løkke skiller TO tellerens startverdi fra sluttverdien. Løkken tilordner startverdien til telleren, kjører løkkekroppen, og hvert gjennomløp av NEXT øker telleren med én. Iterasjonen fortsetter så lenge telleren ikke har passert verdien etter TO, og begge grensene er inkludert, så FOR i = 1 TO 20 kjører tjue ganger.
TO beskriver alltid et stigende område. Når startverdien allerede overstiger sluttverdien, kjøres kroppen aldri i det hele tatt, løkken hoppes rett og slett over. Å telle nedover krever det tilhørende nøkkelordet DOWNTO, som i stedet reduserer telleren.
Sluttverdien kan være en literal, en variabel eller et uttrykk, noe som gjør TO nyttig for dataavhengige intervaller som FOR i = 0 TO lastset($array) eller vindusstørrelser hentet fra en optimaliseringsvariabel. Uttrykket evalueres når løkken starter.
Siden skript allerede kjøres én gang per bar, feier TO-områder typisk over periodelengder, historiske barforskyvninger eller array-indekser innenfor gjeldende bar i stedet for over tid.
Eksempler
Eksempel 1, Akkumulere et forholdstall over 20 barer (Indikator)
// Sum the close/open ratio of the last 20 bars
total = 0
FOR x = 1 TO 20 DO
total = total + close[x] / open[x]
NEXT
RETURN total AS "close/open sum"TO fastsetter øvre grense til 20, så kroppen kjører for x = 1 til og med 20 inklusive, og leser én historisk bar per iterasjon.
Eksempel 2, Variabel sluttverdi fra lagrede data (ProBacktest)
// Record the range of each bar, then average all stored values
$ranges[max(0, lastset($ranges) + 1)] = high - low
sum = 0
n = lastset($ranges)
IF n >= 4 THEN
FOR i = 0 TO n DO
sum = sum + $ranges[i]
NEXT
avgRange = sum / (n + 1)
IF high - low > avgRange * 2 AND NOT onmarket THEN
BUY 1 CONTRACT AT MARKET
ENDIF
ENDIF
SET STOP %LOSS 1.5Verdien etter TO er et uttrykk, så løkken dekker automatisk nøyaktig den utfylte delen av arrayet etter hvert som det vokser.
Eksempel 3, Skanne flere tilbakeblikk i én gjennomgang (ProScreener)
// Count how many lookback windows show the close above its average
score = 0
FOR p = 10 TO 50 DO
IF close > average[p](close) THEN
score = score + 1
ENDIF
NEXT
SCREENER[score >= 35] (score AS "Trend score")TO avslutter gjennomgangen på periode 50, så poengsummen aggregerer 41 ulike sjekker av glidende gjennomsnitt per instrument.
Vanlige feil og fallgruver
- Inklusiv grense. Telleren tar selve sluttverdien, så
FOR i = 0 TO 9kjører ti iterasjoner, ikke ni. Grenser som er feil med én er den vanligste løkkefeilen. - Synkende område med TO.
FOR i = 20 TO 10går aldri inn i løkkekroppen fordi startverdien allerede overskrider grensen. Bruk DOWNTO for å telle nedover. - Sluttverdi som avhenger av løkkekroppen. Grensen etter TO er fast når løkken starter. Å endre variablene den ble beregnet fra inne i kroppen forlenger eller forkorter ikke iterasjonen.
- Store områder på hver bar. Hele intervallet satt av TO kjører én gang per bar gjennom hele diagrammet. Brede intervaller rundt kostbare kall som
average[p]sinke omberegningen merkbart.
Relaterte instruksjoner
FOR, åpner den tellende løkken hvis område TO definerer.DOWNTO, deklarerer et synkende område i stedet for et stigende.DO, skiller løkkehodet fra løkkekroppen.NEXT, avslutter løkkekroppen og øker telleren.BREAK, går ut av løkken før telleren når TO-grensen.WHILE, betingelsesdrevet løkke for områder som ikke er kjent på forhånd.