ArrayMax
ArrayMax gibt den größten in einem ProBuilder-Array gespeicherten Wert zurück. Verwenden Sie es, um das Maximum aus gesammelten Datenpunkten in Indikatoren und Strategien zu extrahieren.
Syntax
result = ArrayMax($MyArray)Parameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
$MyArray | Array | erforderlich | Die zu durchsuchende Array-Variable. Array-Namen beginnen immer mit $. |
So funktioniert es
ArrayMax untersucht jedes Element, das im Array zugewiesen wurde, und gibt den einzelnen größten Wert zurück. Es ersetzt das verbreitete Muster, über Indizes zu iterieren und jedes Element mit einem laufenden Maximum zu vergleichen, was Skripte kürzer und weniger fehleranfällig hält.
Die Funktion arbeitet mit dem Array in dem Zustand, in dem es zum Zeitpunkt des Aufrufs vorliegt. Arrays in ProBuilder bleiben von Bar zu Bar erhalten, sodass ein Array, das pro Bar ein neues Element erhält, Historie ansammelt, und ArrayMax gibt alles bisher Gespeicherte wieder, nicht nur den aktuellen Bar. Um das Ergebnis auf ein rollierendes Fenster zu begrenzen, überschreiben Sie entweder eine feste Menge an Indizes oder leeren das Array mit Unset bevor sie neu gefüllt wird.
Wenn das Array überhaupt keine Elemente enthält, gibt ArrayMax einen undefinierten Wert zurück. Den Aufruf abzusichern mit IsSet oder prüfen LastSet verhindert, dass ein undefiniertes Ergebnis in spätere Berechnungen einfließt.
ArrayMax unterscheidet sich von Highest, der auf Preisserien über eine feste Anzahl von Bars arbeitet, und von MAX, der genau zwei Skalarwerte vergleicht. ArrayMax ist die einzige der drei Funktionen, die auf einer beliebigen, vom Benutzer gefüllten Sammlung arbeitet.
Beispiele
Beispiel 1, Höchster von fünf gespeicherten Kursen (Indikator)
// 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 highestPriceDas Array enthält fünf Werte und ArrayMax gibt 140 zurück, den größten davon. Das ist die kanonische Verwendung: füllen, dann abfragen.
Beispiel 2, Breakout-Niveau aus aufgezeichneten Swing-Hochs (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 2Die Strategie fügt dem Array ein Hoch hinzu, wenn das Momentum stark ist, und nutzt dann ArrayMax, um aus allen aufgezeichneten Hochs eine Breakout-Schwelle abzuleiten.
Beispiel 3, Filter für Volumenspitzen (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")Der Screener speichert die vorherigen 20 Volumenwerte und behält dann nur Instrumente, bei denen das Volumen des aktuellen Bars den ArrayMax dieses Fensters übertrifft.
Häufige Fehler und Stolperfallen
- Das Argument muss ein Array sein. Die Übergabe einer einfachen Variablen, einer Preisreihe oder eines Indikatorergebnisses erzeugt einen Kompilierungsfehler. Nur Variablen mit dem Präfix
$und mit eckigen Klammern indiziert sind, kommen infrage. - Ein leeres Array gibt undefined zurück. Der Aufruf von ArrayMax, bevor ein Element zugewiesen wurde, ergibt einen undefinierten Wert, der sich unbemerkt durch die Arithmetik fortpflanzt. Prüfen Sie
IsSet($array[index])oderLastSetzuerst. - Arrays sammeln sich über Bars hinweg an. Ein Array, an das auf jedem Bar angehängt wird, wächst über die gesamte Lebensdauer des Charts, ArrayMax erfasst daher die komplette angesammelte Historie. Für ein rollierendes Maximum verwenden Sie einen festen Indexbereich wieder oder leeren das Array mit
Unset. - Kein Ersatz für Highest. Für das Maximum einer eingebauten Reihe über die letzten n Bars,
Highest[n](series)ist einfacher und schneller, als Werte in ein Array zu kopieren.
Verwandte Befehle
ArrayMin, gibt den kleinsten in einem Array gespeicherten Wert zurück.ArraySort, sortiert Array-Elemente in aufsteigender oder absteigender Reihenfolge.IsSet, prüft, ob ein bestimmtes Array-Element zugewiesen wurde.LastSet, gibt den höchsten in einem Array zugewiesenen Index zurück.Unset, löscht ein Array oder ein einzelnes Element.Highest, höchster Wert einer Reihe über eine feste Anzahl von Bars.MAX, der größere von zwei Skalarwerten.BarIndex, Position des aktuellen Bars in den geladenen Daten.