|
Loopar: for, while, do/while och foreach |
Scroll Föregående Topp Nästa Fler |
HkScript stöder flera typer av loopar. Loopar används för att upprepa kod flera gånger, till exempel för att summera värden, söka bakåt i tiden eller gå igenom en lista med värden.
Viktigt om prestanda:
Ett HkScript körs normalt redan en gång för varje bar i dataserien. En loop inne i scriptet innebär därför ofta en extra upprepning för varje bar. Vid långa perioder eller många indikatorer kan detta göra scriptet långsammare.
Använd därför gärna inbyggda dataserie-funktioner som sum, highest och lowest när det passar, i stället för att alltid skriva egna loopar.
For-loop
En for-loop används när du vet ungefär hur många gånger koden ska upprepas.
local sum = 0;
local period = 10;
for (local i = 0; i < period; i++)
{
sum = sum + Close[-i];
}
plot1[0] = sum / period;
Tips: exemplet ovan kan normalt skrivas effektivare med Close.sum(period) / period.
While-loop
En while-loop körs så länge villkoret är sant. Var noga med att ändra värden i loopen så att den inte riskerar att bli oändlig.
local i = 0;
local antal = 0;
while (i < 20)
{
if (Close[-i] > Close[-i - 1])
{
antal++;
}
i++;
}
plot1[0] = antal;
Do/while
En do/while-loop liknar while, men kodblocket körs minst en gång eftersom villkoret kontrolleras efter blocket.
local i = 0;
do
{
i++;
}
while (i < 5);
Foreach
En foreach-loop används för att gå igenom innehållet i en array eller tabell. Den är mindre vanlig i normal indikatorberäkning, men kan vara användbar vid listor eller hjälptabeller.
local values = [1, 2, 3, 4];
local sum = 0;
foreach (v in values)
{
sum = sum + v;
}
plot1[0] = sum;
Break och continue
En break avbryter loopen direkt, och continue hoppar över resten av aktuell iteration och fortsätter med nästa varv i loopen.
local foundBarsBack = -1;
for (local i = 0; i < 50; i++)
{
if (Close[-i] == 0)
{
continue;
}
if (Close[-i] > Close[0] * 1.10)
{
foundBarsBack = i;
break;
}
}
plot1[0] = foundBarsBack;
När bör loopar undvikas?
Loopar är användbara, men bör användas med eftertanke. Om du till exempel vill beräkna ett glidande medelvärde, högsta värdet, lägsta värdet eller en summa över en period är det ofta bättre att använda inbyggda dataserie-funktioner.
Exempel:
Skriv hellre Close.sum(20) än en egen for-loop som summerar 20 historiska värden.
Sammanfattning
• Använd for när antalet varv är känt.
• Använd while när loopen styrs av ett villkor.
• Använd do/while när koden ska köras minst en gång.
• Använd foreach för arrayer eller tabeller.
• Använd break för att avbryta loopen och continue för att hoppa till nästa varv.