LastSet
LastSet gibt den höchsten Index eines ProBuilder-Arrays zurück, dem ein Wert zugewiesen wurde, oder -1, wenn kein Element gesetzt ist. Nützlich für lückenhaft gefüllte Arrays.
Syntax
lastIndex = lastset($array)Parameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
$array | Array | erforderlich | Die zu prüfende Array-Variable. Array-Namen beginnen immer mit $. |
So funktioniert es
Arrays in ProBuilder sind dünn besetzt. Die Zuweisung eines Werts an $prices[7] erzeugt oder initialisiert die Elemente 0 bis 6 nicht, es markiert nur Index 7 als gesetzt. LastSet durchsucht das Array und gibt den größten Index zurück, der jemals zugewiesen wurde, unabhängig von Lücken darunter.
Wenn in das Array noch nie geschrieben wurde oder es geleert wurde mit Unset, gibt LastSet -1 zurück. Dieser Sentinel-Wert unterscheidet ein leeres Array von einem Array, dessen Element 0 einen Wert enthält.
Das häufigste Muster ist, LastSet als Zähler der effektiven Länge zu verwenden. Wenn ein Array fortlaufend ab Index 0 gefüllt wird, lastset($array) + 1 entspricht der Anzahl der gespeicherten Elemente, und $array[lastset($array)] liest den zuletzt angefügten Wert. Zusammen mit IsSet, das einen einzelnen Index prüft, erlaubt LastSet eine sichere Iteration über Arrays, deren Größe im Voraus nicht bekannt ist.
Da der Wert auch Zuweisungen von früheren Bars widerspiegelt, ist LastSet auch nützlich, um festzustellen, ob ein Akkumulationspuffer überhaupt gefüllt wurde, bevor daraus gelesen wird.
Beispiele
Beispiel 1, Den letzten zugewiesenen Index finden (Indikator)
// Assign values at two non-contiguous indices
$myArray[3] = 50
$myArray[7] = 100
lastIndex = lastset($myArray) // returns 7
RETURN lastIndexNur die Indizes 3 und 7 sind gesetzt. LastSet ignoriert die Lücke und gibt 7 zurück, die höchste zugewiesene Position.
Beispiel 2, Den zuletzt gespeicherten Einstiegskurs lesen (ProBacktest)
// Append each entry price to an array
IF longtriggered THEN
$entries[lastset($entries) + 1] = tradeprice
ENDIF
// Exit when price falls 2% below the latest recorded entry
IF lastset($entries) >= 0 THEN
IF close < $entries[lastset($entries)] * 0.98 THEN
SELL AT MARKET
ENDIF
ENDIF
IF close crosses over average[50](close) THEN
BUY 1 CONTRACT AT MARKET
ENDIFDas Array wächst pro Einstieg um einen Platz. LastSet findet den zuletzt angehängten Kurs, und die Absicherung gegen -1 verhindert das Lesen aus einem leeren Array.
Beispiel 3, Nur den Durchschnitt der bisher gesammelten Werte bilden (ProScreener)
// Store the close of every bullish bar
IF close > open THEN
$bullCloses[lastset($bullCloses) + 1] = close
ENDIF
// Average the collected values once at least five exist
count = lastset($bullCloses) + 1
avgBull = 0
IF count >= 5 THEN
FOR i = 0 TO lastset($bullCloses) DO
avgBull = avgBull + $bullCloses[i]
NEXT
avgBull = avgBull / count
ENDIF
SCREENER[close > avgBull AND count >= 5] (avgBull AS "Avg bull close")LastSet liefert sowohl die Position zum Anhängen als auch die Schleifengrenze, sodass der Code nie über den gefüllten Teil des Arrays hinaus iteriert.
Häufige Fehler und Stolperfallen
- Index, nicht Anzahl. LastSet gibt eine Position zurück, daher enthält ein ab Index 0 gefülltes Array
lastset($array) + 1Elemente. Den Offset zu vergessen führt zu Schleifengrenzen, die um eins verschoben sind. - -1 als Index verwendet. Bei einem leeren Array ist das Ergebnis -1, und
$array[lastset($array)]liest dann einen negativen Index. Prüfen Sie auflastset($array) >= 0vor jedem Lesen. - Lücken sind unsichtbar. LastSet meldet nur den höchsten zugewiesenen Index. Elemente darunter können weiterhin nicht zugewiesen sein, daher kann eine Schleife von 0 bis LastSet Plätze lesen, die nie geschrieben wurden. Verwenden Sie
IsSetbei jedem Index, wenn Lücken möglich sind. - Wird von Unset gelöscht. Nach
Unset($array)gibt die Funktion wieder -1 zurück, obwohl die Array-Variable selbst weiterhin existiert und neu gefüllt werden kann.
Verwandte Befehle
IsSet, prüft, ob ein bestimmter Array-Index einen Wert enthält.Unset, löscht alle gespeicherten Werte aus einem Array.ArrayMax, gibt den größten in einem Array gespeicherten Wert zurück.ArrayMin, gibt den kleinsten in einem Array gespeicherten Wert zurück.ArraySort, sortiert den Inhalt eines Arrays auf- oder absteigend.BarIndex, nullbasierte Position des aktuellen Bars, oft als Array-Index verwendet.ONCE, initialisiert eine Variable nur auf dem ersten Bar.