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
Unset($array)Parameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
$array | Array | erforderlich | Die 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)
// 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)
// 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 1Unset 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)
// 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
IsSetbevor 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.
Verwandte Befehle
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.