Unset
Unset rensar varje lagrat värde från en ProBuilder-array i ett enda anrop och återställer arrayen till ett tomt tillstånd så att den kan fyllas på med färska data senare.
Syntax
Unset($array)Parametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
$array | array | obligatorisk | Arrayvariabeln vars innehåll töms. Arraynamn börjar alltid med $. |
Så fungerar det
Unset rensar varje element i den angivna arrayen på en gång. Efter anropet räknas inget index längre som tilldelat: IsSet returnerar 0 för varje position och LastSet returnerar -1, precis som om arrayen aldrig hade skrivits till. Själva variabeln tas inte bort, efterföljande tilldelningar fyller den normalt igen.
Instruktionen finns eftersom arrayer består från bar till bar. Värden som skrivits på tidigare barer förblir tillgängliga på senare, vilket är det som gör arrayer användbara som ackumuleringsbuffertar, men det betyder också att inaktuella data lever vidare om de inte rensas explicit. Unset är nollställningsknappen för den beständigheten.
Typiska mönster kopplar nollställningen till en marknadshändelse eller en kalendergräns: att rensa en sessionsbuffert när en ny handelsdag börjar, att slänga insamlad statistik när priset bryter en viktig nivå, eller att tömma en temporär array i början av en beräkning per bar innan den fylls på igen. Endast den namngivna arrayen påverkas, andra arrayer och vanliga variabler behåller sina värden.
Att läsa ett element efter Unset utan att först tilldela det igen ger det otilldelade tillståndet i stället för det gamla värdet, så kod som använder arrayen bör antingen fylla den igen eller kontrollera IsSet före läsning.
Exempel
Exempel 1, Rensa en buffert vid en breakdown (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"Arrayen håller medelvärden till dess att breakdown-villkoret utlöses, varvid Unset tömmer den så att den kan byggas om från färska data.
Exempel 2, Nollställa sessionsstatistik varje dag (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 körs på den första baren varje dag, så statistikarrayen beskriver alltid bara den aktuella sessionen.
Exempel 3, Temporär array som byggs om på varje bar (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")Eftersom arrayer består mellan barer garanterar det inledande Unset att bufferten endast innehåller värden beräknade för den aktuella baren.
Vanliga fel och fallgropar
- Att läsa efter rensning. Element som läses efter Unset är otilldelade, inte nollgaranterade rester. Fyll på arrayen igen eller skydda läsningar med
IsSetinnan värden används. - Att glömma att arrayer består. Att hoppa över Unset ger inget fel, det blandar tyst in gamla barers data i nya beräkningar. Buffertar som byggs om per bar eller per session behöver en explicit nollställning.
- Att rensa mer än avsett. Unset raderar alltid hela arrayen. Det finns ingen form per index, att ta bort ett enskilt element kräver att arrayen byggs om utan det.
- LastSet returnerar -1 efteråt. Kod som lägger till med
$array[lastset($array) + 1]fungerar fortfarande efter Unset eftersom -1 + 1 = 0, men kod som läser$array[lastset($array)]utan skydd indexerar -1.
Relaterade instruktioner
IsSet, testar om ett specifikt arrayindex innehåller ett värde.LastSet, returnerar det högsta tilldelade indexet, -1 efter Unset.ArrayMax, det största värde som för närvarande lagras i en array.ArrayMin, det minsta värde som för närvarande lagras i en array.ArraySort, sorterar arrayens innehåll på plats.ONCE, engångsinitiering för vanliga variabler.BarIndex, aktuell barposition, ofta parad med arrayer som index.