Word nu lid
Instructies/probuilder · probacktest · proorder · proscreener

DOWNTO

DOWNTO laat in ProBuilder een FOR-loop aflopend tellen van een hogere startwaarde naar een lagere eindwaarde, waarbij bij elke doorloop van de loop met één wordt verlaagd.

Syntaxis

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

Hoe het werkt

Een FOR-lus met DOWNTO start de teller op startValue en verlaagt hem na elke doorloop met één, waarbij de body wordt uitgevoerd voor elke waarde tot en met endValue. Het is de aflopende tegenhanger van TO, die oploopt.

Richting is van belang zodra de iteratievolgorde het resultaat beïnvloedt. Barverschuivingen in ProBuilder lopen op met de leeftijd, dus close[20] is ouder dan close[0]. Een lus geschreven FOR i = 20 DOWNTO 0 doorloopt daarom bars van oudste naar nieuwste, wat de natuurlijke volgorde is voor berekeningen die chronologisch een toestand opbouwen, zoals het bijhouden van de meest recente keer dat een gebeurtenis optrad of het opnieuw doorlopen van een reeks bars op tijdsvolgorde.

De startwaarde moet groter dan of gelijk aan de eindwaarde zijn. Als startValue is kleiner dan endValue, wordt de body nooit uitgevoerd en gaat het script na NEXT verder zonder enige fout. BREAK blijft binnen de body beschikbaar om de loop vroegtijdig te verlaten.

Voorbeelden

Voorbeeld 1, Dalende bars tellen van oudste naar nieuwste (Indicator)

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

De teller loopt van 20 omlaag naar 0, dus de scan begint bij de oudste bar in het venster en beweegt naar het heden, en stopt bij de eerste bar die op of boven zijn open sloot.

Voorbeeld 2, Offset van de meest recente opwaartse gap (Indicator)

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"

Omdat DOWNTO eerst oudere bars verwerkt, overschrijft elke gevonden gap de vorige, zodat de offset van de meest recente gap achterblijft in lastGap wanneer de lus eindigt.

Voorbeeld 3, Chronologische 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

De loop doorloopt de laatste tien veranderingen van bar tot bar in chronologische volgorde en saldeert stijgingen tegen dalingen. Een score van 8 of meer duidt op een aanhoudende stijging en activeert een long-instap.

Veelvoorkomende fouten en valkuilen

  • Start kleiner dan eind. FOR i = 0 DOWNTO 20 voert nul iteraties uit. Er wordt geen fout opgeworpen, dus latere variabelen behouden stilzwijgend hun beginwaarden. Controleer of de grenzen in afnemende orde staan.
  • De richting verandert het resultaat. Loops die een variabele overschrijven bij een match, of die BREAK uitvoeren bij een voorwaarde, geven met DOWNTO andere antwoorden dan met TO. Kies de richting die past bij de bedoelde chronologie.
  • Off-by-one aan de randen. Beide grenzen zijn inclusief. FOR i = 20 DOWNTO 0 loopt 21 keer. Verwijzen naar close[i + 1] binnen de body reikt ook één bar verder dan het genoemde venster.
  • Geen aangepaste stapgrootte. De teller beweegt altijd met precies één. Om elke tweede waarde over te slaan is rekenwerk op de teller binnen de body nodig in plaats van een stapclausule.
  • FOR, de getelde loop die DOWNTO aanpast.
  • TO, de oplopende tegenhanger van DOWNTO.
  • NEXT, sluit de FOR-loop af en verplaatst de teller.
  • DO, optionele markering tussen de loop-header en de body.
  • BREAK, verlaat de loop voordat de teller de eindwaarde bereikt.
  • WHILE, voorwaardegestuurd alternatief wanneer het aantal iteraties onbekend is.
  • WEND, sluit een WHILE-lus af.
  • BarIndex, huidige barnummer, vaak gecombineerd met aflopende scans.