Bli medlem idag
Instruktioner/probuilder · probacktest · proorder · proscreener

DOWNTO

DOWNTO i ProBuilder gör att en FOR-loop räknar nedåt från ett högre startvärde till ett lägre slutvärde, och minskar med ett för varje genomgång av loopen.

Syntax

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

Så fungerar det

En FOR-loop med DOWNTO startar räknaren på startValue och minskar det med ett efter varje varv, vilket kör kroppen för varje värde ner till och med endValue. Det är den nedåtgående motsvarigheten till TO, som räknar upp.

Riktningen spelar roll närhelst iterationsordningen påverkar resultatet. Barförskjutningar i ProBuilder växer med åldern, så close[20] är äldre än close[0]. En loop skriven FOR i = 20 DOWNTO 0 besöker därför barer från äldsta till nyaste, vilket är den naturliga ordningen för beräkningar som bygger upp tillstånd kronologiskt, som att hålla reda på den senaste förekomsten av en händelse eller spela upp en följd av barer i tidsordning.

Startvärdet måste vara större än eller lika med slutvärdet. Om startValue är mindre än endValue, körs kroppen aldrig och skriptet fortsätter efter NEXT utan något fel. BREAK är fortfarande tillgängligt inuti kroppen för att överge loopen tidigt.

Exempel

Exempel 1, Räkna fallande barer från äldst till nyast (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

Räknaren går från 20 ned till 0, så skanningen börjar vid den äldsta baren i fönstret och rör sig mot nutiden, och stannar vid den första bar som stängde på eller över sin öppning.

Exempel 2, Offset för det senaste uppåtgapet (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"

Eftersom DOWNTO behandlar äldre barer först skriver varje upptäckt gap över det föregående, så att det senaste gapets förskjutning hamnar i lastGap när loopen avslutas.

Exempel 3, Kronologisk momentum-poäng (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

Loopen går igenom de senaste tio förändringarna från bar till bar i tidsordning och nettoräknar uppgångar mot nedgångar. En poäng på 8 eller mer indikerar en ihållande uppgång och utlöser en long-entry.

Vanliga fel och fallgropar

  • Start mindre än slut. FOR i = 0 DOWNTO 20 utför noll iterationer. Inget fel genereras, så variabler längre ned behåller tyst sina ursprungliga värden. Verifiera att gränserna står i fallande ordning.
  • Riktningen ändrar resultatet. Loopar som skriver över en variabel vid träff, eller som använder BREAK vid ett villkor, ger andra svar med DOWNTO än med TO. Välj den riktning som matchar den avsedda kronologin.
  • Ett fel på ett vid kanterna. Båda gränserna är inkluderande. FOR i = 20 DOWNTO 0 körs 21 gånger. Att referera till close[i + 1] inuti kroppen sträcker sig också en bar utanför det angivna fönstret.
  • Ingen egen stegstorlek. Räknaren flyttas alltid exakt ett steg. Att hoppa över varannat värde kräver aritmetik på räknaren inne i kroppen snarare än en stegklausul.
  • FOR, den räknade loopen som DOWNTO modifierar.
  • TO, den uppåtgående motsvarigheten till DOWNTO.
  • NEXT, avslutar FOR-loopen och flyttar räknaren.
  • DO, valfri markör mellan loopens huvud och kroppen.
  • BREAK, avslutar loopen innan räknaren når slutvärdet.
  • WHILE, villkorsstyrt alternativ när antalet iterationer är okänt.
  • WEND, avslutar en WHILE-loop.
  • BarIndex, det aktuella barens nummer, ofta använt tillsammans med nedåtgående skanningar.