ArrayMax
ArrayMax returnerar det största värdet som lagras i en ProBuilder-array. Använd den för att extrahera maximum från insamlade datapunkter i indikatorer och strategier.
Syntax
result = ArrayMax($MyArray)Parametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
$MyArray | array | obligatorisk | Arrayvariabeln som ska skannas. Arraynamn börjar alltid med $. |
Så fungerar det
ArrayMax undersöker varje element som har tilldelats i arrayen och returnerar det enskilt största värdet. Den ersätter det vanliga mönstret att loopa över index och jämföra varje element mot ett löpande maximum, vilket håller skript kortare och mindre felbenägna.
Funktionen arbetar på arrayen som den ser ut i det ögonblick anropet sker. Arrayer i ProBuilder bevaras från bar till bar, så en array som får ett nytt element per bar samlar historik, och ArrayMax speglar allt som lagrats så långt, inte bara den aktuella baren. För att begränsa resultatet till ett rullande fönster kan du antingen skriva över en fast uppsättning index eller rensa arrayen med Unset innan den fylls på igen.
Om arrayen inte innehåller några element alls returnerar ArrayMax ett odefinierat värde. Att skydda anropet med IsSet eller kontrollera LastSet undviker att ett odefinierat resultat förs in i senare beräkningar.
ArrayMax skiljer sig från Highest, som arbetar på prisserier över ett fast antal barer, och från MAX, som jämför exakt två skalära värden. ArrayMax är den enda av de tre som arbetar på en valfri användarfylld samling.
Exempel
Exempel 1, Högsta av fem lagrade priser (Indicator)
// Store five closing prices in an array
$prices[1] = 130
$prices[2] = 135
$prices[3] = 128
$prices[4] = 140
$prices[5] = 138
// Extract the largest stored value
highestPrice = ArrayMax($prices)
RETURN highestPriceArrayen innehåller fem värden och ArrayMax returnerar 140, det största av dem. Detta är den kanoniska användningen: fyll på, sedan fråga.
Exempel 2, Breakout-nivå från registrerade swing highs (ProOrder)
DEFPARAM CumulateOrders = false
// Record the high of each bar where RSI was above 60
IF RSI[14](close) > 60 THEN
$swingHighs[LastSet($swingHighs) + 1] = high
ENDIF
// Enter long on a break above the strongest recorded high
IF IsSet($swingHighs[1]) THEN
breakoutLevel = ArrayMax($swingHighs)
IF close CROSSES OVER breakoutLevel THEN
BUY 1 CONTRACT AT MARKET
ENDIF
ENDIF
SET STOP %LOSS 2Strategin lägger till en high i arrayen när momentum är starkt, och använder sedan ArrayMax för att härleda ett breakout-tröskelvärde från alla registrerade highs.
Exempel 3, Filter för volymspik (ProScreener)
// Collect the volume of the last 20 bars into an array
FOR i = 1 TO 20 DO
$vols[i] = volume[i]
NEXT
// Flag instruments whose current volume exceeds every stored value
maxVol = ArrayMax($vols)
SCREENER[volume > maxVol] (volume AS "Volume")Screenern lagrar de föregående 20 volymvärdena och behåller sedan endast instrument där den aktuella barens volym överstiger ArrayMax för det fönstret.
Vanliga fel och fallgropar
- Argumentet måste vara en array. Att skicka in en vanlig variabel, en prisserie eller ett indikatorresultat ger ett kompileringsfel. Endast variabler med prefixet
$och som indexeras med hakparenteser räknas. - Tom array returnerar undefined. Att anropa ArrayMax innan något element tilldelats ger ett odefinierat värde som tyst sprider sig genom beräkningarna. Kontrollera
IsSet($array[index])ellerLastSetförst. - Arrayer ackumuleras över barer. En array som utökas på varje bar växer under diagrammets hela livstid, så ArrayMax täcker hela den ackumulerade historiken. För ett rullande maximum, återanvänd ett fast indexintervall eller töm arrayen med
Unset. - Inte en ersättning för Highest. För maximum av en inbyggd serie över de senaste n barerna,
Highest[n](series)är enklare och snabbare än att kopiera värden till en array.
Relaterade instruktioner
ArrayMin, returnerar det minsta värdet som lagras i en array.ArraySort, sorterar arrayelement i stigande eller fallande ordning.IsSet, testar om ett givet arrayelement har tilldelats.LastSet, returnerar det högsta index som tilldelats i en array.Unset, rensar en array eller ett enskilt element.Highest, det högsta värdet i en serie över ett fast antal barer.MAX, det större av två skalära värden.BarIndex, den aktuella barens position i inläst data.