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
FOR variable = start_value TO end_value DO
// code executed on each iteration
NEXTSå 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)
// 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)
// 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.5Vä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)
// 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 9kör tio iterationer, inte nio. Gränser som är fel på ett är det vanligaste loopfelet. - Fallande intervall med TO.
FOR i = 20 TO 10gå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.
Relaterade instruktioner
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.