Jetzt beitreten
Befehle/probuilder · probacktest · proorder · proscreener

Unset

Unset löscht in einem Aufruf jeden gespeicherten Wert aus einem ProBuilder-Array und versetzt das Array in einen leeren Zustand, sodass es später mit frischen Daten neu gefüllt werden kann.

Syntax

probuilder
Unset($array)

Parameter

NameTypStandardBeschreibung
$arrayArrayerforderlichDie Array-Variable, deren Inhalt gelöscht wird. Array-Namen beginnen immer mit $.

So funktioniert es

Unset löscht alle Elemente des angegebenen Arrays auf einmal. Nach dem Aufruf gilt kein Index mehr als zugewiesen: IsSet gibt für jede Position 0 zurück und LastSet gibt -1 zurück, genau als wäre das Array nie beschrieben worden. Die Variable selbst wird nicht gelöscht, nachfolgende Zuweisungen füllen sie normal wieder auf.

Den Befehl gibt es, weil Arrays von Bar zu Bar bestehen bleiben. Auf früheren Bars geschriebene Werte bleiben auf späteren verfügbar, was Arrays als Sammelpuffer nützlich macht, aber es bedeutet auch, dass veraltete Daten überdauern, sofern sie nicht ausdrücklich gelöscht werden. Unset ist der Rücksetzschalter für diese Beständigkeit.

Typische Muster koppeln das Zurücksetzen an ein Marktereignis oder eine Kalendergrenze: einen Sitzungspuffer leeren, wenn ein neuer Handelstag beginnt, gesammelte Statistiken verwerfen, wenn der Preis ein wichtiges Niveau durchbricht, oder ein Arbeits-Array zu Beginn einer Berechnung pro Bar leeren, bevor es neu gefüllt wird. Nur das genannte Array ist betroffen, andere Arrays und einfache Variablen behalten ihre Werte.

Das Lesen eines Elements nach Unset ohne vorherige Neuzuweisung liefert den nicht zugewiesenen Zustand statt des alten Werts, daher sollte Code, der das Array verwendet, es entweder neu füllen oder prüfen IsSet vor dem Lesen.

Beispiele

Beispiel 1, Einen Puffer bei einem Abwärtsausbruch leeren (Indikator)

probuilder
// Fill the array with moving average values
FOR i = 0 TO 19 DO
  $Array1[i] = average[i](close)
NEXT

// Reset the buffer when price breaks the 20-bar low
IF close crosses under low[20] THEN
  Unset($Array1)
ENDIF
RETURN lastset($Array1) AS "filled up to index"

Das Array hält Durchschnittswerte, bis die Abwärtsausbruchs-Bedingung auslöst, woraufhin Unset es leert, damit es aus frischen Daten neu aufgebaut werden kann.

Beispiel 2, Sitzungsstatistiken täglich zurücksetzen (ProOrder)

probuilder
// Collect the range of every bar during the session
IF intradaybarindex = 0 THEN
  // new trading day, discard yesterday's data
  Unset($barRanges)
ENDIF
$barRanges[max(0, lastset($barRanges) + 1)] = high - low

// Trade only when today already shows expanding ranges
IF lastset($barRanges) >= 5 THEN
  IF high - low > arraymax($barRanges) * 0.9 AND NOT onmarket THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ENDIF

SET STOP %LOSS 1

Unset läuft auf dem ersten Bar jedes Tages, sodass das Statistik-Array immer nur die aktuelle Sitzung beschreibt.

Beispiel 3, Arbeits-Array, das auf jedem Bar neu aufgebaut wird (ProScreener)

probuilder
// Start from an empty scratch buffer on each evaluation
Unset($gains)
FOR k = 0 TO 9 DO
  IF close[k] > close[k + 1] THEN
    $gains[k] = close[k] - close[k + 1]
  ENDIF
NEXT

// Sum only the indices that were actually set
total = 0
FOR k = 0 TO 9 DO
  IF isset($gains[k]) THEN
    total = total + $gains[k]
  ENDIF
NEXT

SCREENER[total > 0] (total AS "10-bar gain sum")

Da Arrays zwischen Bars bestehen bleiben, stellt das vorangestellte Unset sicher, dass der Puffer nur für den aktuellen Bar berechnete Werte enthält.

Häufige Fehler und Stolperfallen

  • Lesen nach dem Leeren. Elemente, die nach Unset gelesen werden, sind unbelegt und keine garantiert auf null gesetzten Überreste. Füllen Sie das Array neu oder sichern Sie Lesezugriffe ab mit IsSet bevor Werte verbraucht werden.
  • Vergessen, dass Arrays bestehen bleiben. Unset auszulassen erzeugt keinen Fehler, es mischt stillschweigend Daten alter Bars in neue Berechnungen. Puffer, die pro Bar oder pro Sitzung neu aufgebaut werden, brauchen ein ausdrückliches Zurücksetzen.
  • Mehr löschen als beabsichtigt. Unset löscht immer das gesamte Array. Es gibt keine Form pro Index, das Entfernen eines einzelnen Elements erfordert, das Array ohne dieses Element neu aufzubauen.
  • LastSet gibt danach -1 zurück. Code, der mit $array[lastset($array) + 1] funktioniert nach Unset weiterhin, weil -1 + 1 = 0, aber Code zum Auslesen von $array[lastset($array)] ohne Absicherung indexiert -1.
  • IsSet, prüft, ob ein bestimmter Array-Index einen Wert enthält.
  • LastSet, gibt den höchsten zugewiesenen Index zurück, -1 nach Unset.
  • ArrayMax, größter aktuell in einem Array gespeicherter Wert.
  • ArrayMin, kleinster aktuell in einem Array gespeicherter Wert.
  • ArraySort, sortiert den Inhalt eines Arrays an Ort und Stelle.
  • ONCE, einmalige Initialisierung für einfache Variablen.
  • BarIndex, aktuelle Bar-Position, oft als Index zusammen mit Arrays verwendet.