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

TO

TO anger slutvärdet för en FOR-loopräknare i ProBuilder, så att loopen körs från sitt startvärde upp till den gränsen inklusive, en iteration per värde.

Syntax

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

Så fungerar det

I huvudet på en FOR-loop skiljer TO räknarens startvärde från dess slutvärde. Loopen tilldelar startvärdet till räknaren, kör loopkroppen, och varje passage genom NEXT ökar räknaren med ett. Iterationen fortsätter så länge räknaren inte har passerat värdet efter TO, och båda gränserna räknas in, så FOR i = 1 TO 20 körs tjugo gånger.

TO beskriver alltid ett stigande intervall. När startvärdet redan överstiger slutvärdet körs kroppen inte alls, loopen hoppas helt enkelt över. Att räkna nedåt kräver det kompletterande nyckelordet DOWNTO, som i stället minskar räknaren.

Slutvärdet kan vara en literal, en variabel eller ett uttryck, vilket gör TO användbart för databeroende intervall som FOR i = 0 TO lastset($array) eller fönsterstorlekar hämtade från en optimeringsvariabel. Uttrycket utvärderas när loopen startar.

Eftersom skript redan körs en gång per bar sveper TO-intervall vanligtvis över periodlängder, historiska barförskjutningar eller arrayindex inom den aktuella baren snarare än över tiden.

Exempel

Exempel 1, Ackumulera ett förhållande över 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 fastställer den övre gränsen till 20, så kroppen körs för x = 1 till 20 inklusive, och läser en historisk bar per iteration.

Exempel 2, Variabelt slutvärde från lagrade 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

Värdet efter TO är ett uttryck, så loopen täcker automatiskt exakt den fyllda delen av arrayen när den växer.

Exempel 3, Skanna flera lookbacks i en genomgång (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 avslutar svepet vid period 50, så poängen aggregerar 41 olika kontroller av glidande medelvärden per instrument.

Vanliga fel och fallgropar

  • Inkluderande gräns. Räknaren antar själva slutvärdet, så FOR i = 0 TO 9 kör tio iterationer, inte nio. Gränser som är fel på ett är det vanligaste loopfelet.
  • Fallande intervall med TO. FOR i = 20 TO 10 går aldrig in i loopkroppen eftersom startvärdet redan överstiger gränsen. Använd DOWNTO för att räkna nedåt.
  • Slutvärde som beror på loopkroppen. Gränsen efter TO fastställs när loopen startar. Att ändra variablerna den beräknades från inne i kroppen förlänger eller förkortar inte itereringen.
  • Stora intervall på varje bar. Hela intervallet som TO anger körs en gång per bar över hela diagrammet. Breda intervall kring kostsamma anrop som average[p] sakta ner omräkningen märkbart.
  • FOR, inleder den räknade loopen vars intervall TO definierar.
  • DOWNTO, deklarerar ett fallande intervall i stället för ett stigande.
  • DO, skiljer loophuvudet från loopkroppen.
  • NEXT, avslutar loopkroppen och ökar räknaren.
  • BREAK, lämnar loopen innan räknaren når TO-gränsen.
  • WHILE, villkorsstyrd loop för intervall som inte är kända i förväg.