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

DOWNTO

DOWNTO i ProBuilder får en FOR-løkke til å telle nedover fra en høyere startverdi til en lavere sluttverdi, og trekker fra én for hvert gjennomløp av løkken.

Syntaks

probuilder
FOR variable = startValue DOWNTO endValue DO
  // loop body
NEXT

Slik fungerer det

En FOR-løkke med DOWNTO starter telleren på startValue og reduserer den med én etter hver runde, og kjører kroppen for hver verdi ned til og med endValue. Den er den synkende motparten til TO, som øker.

Retningen betyr noe når iterasjonsrekkefølgen påvirker resultatet. Barforskyvninger i ProBuilder vokser med alderen, så close[20] er eldre enn close[0]. En løkke skrevet FOR i = 20 DOWNTO 0 besøker derfor barer fra eldst til nyest, som er den naturlige rekkefølgen for beregninger som bygger opp tilstand kronologisk, som å spore den siste forekomsten av en hendelse eller spille av en rekke barer i tidsrekkefølge.

Startverdien må være større enn eller lik sluttverdien. Hvis startValue er mindre enn endValue, kjøres kroppen aldri, og skriptet fortsetter etter NEXT uten noen feil. BREAK er fortsatt tilgjengelig inne i kroppen for å forlate løkken tidlig.

Eksempler

Eksempel 1, Telle fallende barer fra eldst til nyest (Indikator)

probuilder
Value = 0
// Scan from 20 bars back toward the current bar
FOR i = 20 DOWNTO 0 DO
  IF (Close[i] < Open[i]) THEN
    Value = Value + 1
  ELSE
    BREAK
  ENDIF
NEXT
RETURN Value

Telleren går fra 20 ned til 0, så skanningen starter på den eldste baren i vinduet og beveger seg mot nåtiden, og stopper ved den første baren som lukket på eller over sin open.

Eksempel 2, Offset for det siste oppgapet (Indikator)

probuilder
lastGap = -1
// Visit bars oldest first so the final assignment is the newest gap
FOR i = 50 DOWNTO 1 DO
  IF low[i - 1] > high[i] THEN
    lastGap = i - 1
  ENDIF
NEXT
RETURN lastGap AS "bars since last up gap"

Fordi DOWNTO behandler eldre bars først, overskriver hvert oppdagede gap det forrige, slik at forskyvningen til det nyeste gapet ligger i lastGap når løkken avsluttes.

Eksempel 3, Kronologisk momentum-score (ProOrder)

probuilder
score = 0
// Compare each bar with the one before it, oldest pair first
FOR i = 10 DOWNTO 1 DO
  IF close[i] > close[i + 1] THEN
    score = score + 1
  ELSE
    score = score - 1
  ENDIF
NEXT

IF score >= 8 AND NOT ONMARKET THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

Løkken går gjennom de siste ti endringene fra bar til bar i tidsrekkefølge og netter oppganger mot nedganger. En score på 8 eller mer indikerer en vedvarende oppgang og utløser en long-inngang.

Vanlige feil og fallgruver

  • Start mindre enn slutt. FOR i = 0 DOWNTO 20 kjører null iterasjoner. Ingen feil utløses, så variabler nedstrøms beholder stille startverdiene sine. Verifiser at grensene er i synkende rekkefølge.
  • Retningen endrer resultatet. Løkker som overskriver en variabel ved treff, eller som bruker BREAK ved en betingelse, gir andre svar med DOWNTO enn med TO. Velg retningen som passer den tilsiktede kronologien.
  • Off-by-one i endene. Begge grenser er inkludert. FOR i = 20 DOWNTO 0 kjører 21 ganger. Å referere til close[i + 1] inne i kroppen strekker seg også én bar utover det angitte vinduet.
  • Ingen egendefinert trinnstørrelse. Telleren beveger seg alltid med nøyaktig én. Å hoppe over annenhver verdi krever aritmetikk på telleren inne i kroppen heller enn en trinnklausul.
  • FOR, den tellende løkken som DOWNTO endrer.
  • TO, den stigende motparten til DOWNTO.
  • NEXT, avslutter FOR-løkken og flytter telleren.
  • DO, valgfri markør mellom løkkehodet og kroppen.
  • BREAK, avslutter løkken før telleren når sluttverdien.
  • WHILE, betingelsesdrevet alternativ når antall iterasjoner er ukjent.
  • WEND, avslutter en WHILE-løkke.
  • BarIndex, gjeldende barnummer, ofte brukt sammen med skanninger i synkende rekkefølge.