Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

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

probuilder
lastIndex = lastset($array)

Parameter

NameTypStandardBeschreibung
$arrayArrayerforderlichDie 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)

probuilder
// Assign values at two non-contiguous indices
$myArray[3] = 50
$myArray[7] = 100
lastIndex = lastset($myArray) // returns 7
RETURN lastIndex

Nur 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)

probuilder
// 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
ENDIF

Das 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)

probuilder
// 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) + 1 Elemente. 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 auf lastset($array) >= 0 vor 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 IsSet bei 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.
  • 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.