Unset
Unset wist in één aanroep elke opgeslagen waarde uit een ProBuilder-array, waarmee de array terugkeert naar een lege staat zodat hij later opnieuw met verse data kan worden gevuld.
Syntaxis
Unset($array)Parameters
| Naam | Type | Standaard | Beschrijving |
|---|---|---|---|
$array | array | verplicht | De arrayvariabele waarvan de inhoud wordt gewist. Arraynamen beginnen altijd met $. |
Hoe het werkt
Unset wist alle elementen van de opgegeven array in één keer. Na de aanroep geldt geen enkele index meer als toegekend: IsSet geeft 0 voor elke positie en LastSet retourneert -1, precies alsof er nooit naar de array is geschreven. De variabele zelf wordt niet verwijderd; volgende toekenningen vullen hem normaal opnieuw.
De instructie bestaat omdat arrays van bar tot bar blijven bestaan. Waarden die op eerdere bars zijn geschreven, blijven op latere bars beschikbaar, en dat is wat arrays nuttig maakt als accumulatiebuffers, maar het betekent ook dat verouderde data overleeft tenzij die expliciet wordt gewist. Unset is de resetschakelaar voor die persistentie.
Typische patronen koppelen de reset aan een marktgebeurtenis of een kalendergrens: een sessiebuffer wissen wanneer een nieuwe handelsdag begint, verzamelde statistieken weggooien wanneer de prijs een belangrijk niveau doorbreekt, of een tijdelijke array leegmaken aan het begin van een berekening per bar voordat die opnieuw wordt gevuld. Alleen de genoemde array wordt beïnvloed, andere arrays en gewone variabelen houden hun waarden.
Een element lezen na Unset zonder het eerst opnieuw toe te kennen levert de niet-toegekende status op in plaats van de oude waarde, dus code die de array gebruikt moet hem of opnieuw vullen of controleren IsSet voor het uitlezen.
Voorbeelden
Voorbeeld 1, Een buffer wissen bij een breakdown (Indicator)
// 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"De array bewaart gemiddelde waarden tot de breakdown-voorwaarde afgaat, waarna Unset hem leegmaakt zodat hij opnieuw uit verse data kan worden opgebouwd.
Voorbeeld 2, Sessiestatistieken elke dag resetten (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 loopt op de eerste bar van elke dag, zodat de statistiekenarray altijd alleen de huidige sessie beschrijft.
Voorbeeld 3, Tijdelijke array die op elke bar opnieuw wordt opgebouwd (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")Omdat arrays tussen bars blijven bestaan, garandeert de Unset aan het begin dat de buffer alleen waarden bevat die voor de huidige bar zijn berekend.
Veelvoorkomende fouten en valkuilen
- Lezen na het wissen. Elementen die na Unset worden benaderd zijn niet toegewezen, geen restwaarden die gegarandeerd nul zijn. Vul de array opnieuw of scherm leesacties af met
IsSetvoordat waarden worden verbruikt. - Vergeten dat arrays blijven bestaan. Unset overslaan geeft geen foutmelding, het mengt stilzwijgend data van oude bars in nieuwe berekeningen. Buffers die per bar of per sessie opnieuw worden opgebouwd, hebben een expliciete reset nodig.
- Meer wissen dan bedoeld. Unset wist altijd de hele array. Er is geen vorm per index, een enkel element verwijderen vereist dat de array zonder dat element opnieuw wordt opgebouwd.
- LastSet geeft daarna -1. Code die toevoegt met
$array[lastset($array) + 1]werkt nog steeds na Unset omdat -1 + 1 = 0, maar code die leest$array[lastset($array)]zonder controle indexeert -1.
Gerelateerde instructies
IsSet, test of een specifieke array-index een waarde bevat.LastSet, geeft de hoogste toegewezen index, -1 na Unset.ArrayMax, grootste waarde die momenteel in een array is opgeslagen.ArrayMin, kleinste waarde die momenteel in een array is opgeslagen.ArraySort, sorteert de inhoud van een array ter plaatse.ONCE, eenmalige initialisatie voor gewone variabelen.BarIndex, huidige barpositie, vaak gebruikt als index bij arrays.