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

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

probuilder
FOR variable = start_value TO end_value DO
  // code executed on each iteration
NEXT

Slik 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)

probuilder
// 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)

probuilder
// 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.5

Verdien 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)

probuilder
// 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 9 kjø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 10 gå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.
  • 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.