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

FOR

FOR-loopen i ProBuilder upprepar ett kodblock ett bestämt antal gånger och räknar uppåt med TO eller nedåt med DOWNTO. Varje FOR-block avslutas med NEXT.

Syntax

probuilder
FOR variable = start TO end DO
  // commands repeated on each pass
NEXT

Räkna nedåt:

probuilder
FOR variable = start DOWNTO end DO
  // commands repeated on each pass
NEXT

Så fungerar det

På varje bar initierar loopen räknarvariabeln till startvärdet, kör blocket och ökar sedan räknaren med 1 (TO) eller minskar den med 1 (DOWNTO). När räknaren passerar slutvärdet fortsätter körningen efter NEXT. Nyckelordet DO är valfritt i nuvarande ProRealTime™-versioner men att behålla det förbättrar läsbarheten.

Räknaren är en vanlig variabel och används ofta som barförskjutning, så close[i] inuti en loop läser stängningspriset i barer bakåt. Det gör FOR till standardverktyget för att summera, söka igenom eller rita över ett intervall av historiska barer.

Loopar kan nästlas. Hela loopen körs igen på varje bar i diagrammet, så en loop med 100 genomlöp på ett diagram med 10,000 barer utför en miljon iterationer. Håll intervallen så små som beräkningen tillåter och använd BREAK för att avbryta tidigt när resultatet är känt.

Exempel

Exempel 1, Summa av öppningspriser över ett bar-intervall (Indikator)

probuilder
a = 0
FOR i = 10 TO 20 DO
  // add the open of each bar in the range to the running total
  a = open[i] + a
NEXT
RETURN a AS "Sum of Opens"

Räknaren i går från baroffset 10 till baroffset 20 och ackumulerar varje öppningspris i a, som returneras när loopen är klar.

Exempel 2, Räkna bullish barer i ett fönster (ProScreener)

probuilder
count = 0
FOR i = 0 TO 19 DO
  // count the bars that closed above their open
  IF close[i] > open[i] THEN
    count = count + 1
  ENDIF
NEXT
SCREENER[count >= 15] (count AS "Bullish bars")

Loopen granskar de senaste 20 barerna och screenern listar instrument där minst 15 av dem stängde högre än de öppnade.

Exempel 3, Bakåtriktad skanning med DOWNTO (ProOrder)

probuilder
// find the most recent bar that matches the 50-bar high
hh = highest[50](high)
found = 50
FOR i = 50 DOWNTO 0 DO
  IF high[i] = hh THEN
    found = i
  ENDIF
NEXT
// enter only if the high was printed within the last 5 bars
IF found <= 5 AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

DOWNTO skannar från den äldsta förskjutningen mot den aktuella baren, vilket lämnar found vid den senaste offset där 50-barshögsta sattes.

Vanliga fel och fallgropar

  • Saknad NEXT. Varje FOR behöver ett matchande NEXT. Med nästlade loopar kan kompilatorn flagga felet långt från den loop som faktiskt är oavslutad, så matcha paren inifrån och ut.
  • Start bortom slut. A FOR i = 10 TO 5 loopen körs aldrig, och inte heller FOR i = 5 DOWNTO 10. Riktningsnyckelordet måste stämma med intervallets riktning, annars hoppas blocket över utan varning.
  • Att ändra räknaren inuti loopen. Att tilldela loopvariabeln ett nytt värde inuti blocket stör den automatiska ökningen och kan ge överhoppade genomlöp eller oväntade avbrott. Använd en separat variabel för mellanliggande beräkningar.
  • Prestanda vid stora intervall. Loopen körs om på varje bar, så breda intervall växer snabbt. Föredra inbyggda funktioner som summation eller highest när en sådan finns, och avbryt tidigt med BREAK när svaret är hittat.
  • TO, uppåtriktad intervallseparator inne i ett FOR-huvud.
  • DOWNTO, nedåtriktad intervallseparator inne i ett FOR-huvud.
  • NEXT, avslutar ett FOR-block och utlöser nästa varv.
  • DO, valfritt nyckelord som avslutar ett FOR- eller WHILE-huvud.
  • BREAK, avslutar den aktuella loopen innan intervallet är uttömt.
  • WHILE, villkorsstyrd loop för ett okänt antal varv.
  • WEND, avslutar ett WHILE-block.
  • BarIndex, bar-räknare som är användbar för att avgränsa loopintervall.