IsSet
IsSet i ProBuilder returnerer 1 når et gitt array-element har fått tilordnet en verdi og 0 når det ikke har det, noe som hindrer lesing av uinitialiserte array-oppføringer.
Syntaks
ISSET($MyArray[index])Parametere
| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
| $MyArray | array | påkrevd | Arrayet som elementet testes i. Arraynavn begynner med $. |
| indeks | heltall | påkrevd | Elementposisjonen som skal sjekkes. |
Formel
ISSET($a[i]) = 1 if element i of $a has been assigned
= 0 otherwiseSlik fungerer det
ProBuilder-arrayer trenger ikke å deklareres med en størrelse, og elementer kan skrives på vilkårlige indekser. Den fleksibiliteten betyr at et array kan inneholde hull: indeks 0 og indeks 2 kan inneholde verdier mens indeks 1 aldri ble berørt. ISSET rapporterer, per element, om en tilordning har skjedd.
Å lese et element som aldri ble satt, utløser ingen feil, det gir simpelthen en standardverdi, noe som gjør feil av dette slaget stille og vanskelige å spore. Å sikre lesinger med ISSET gjør den tause standardverdien til en eksplisitt gren, slik at skriptet kan hoppe over elementet, sette inn en reserveverdi eller søke andre steder.
Sjekken er per indeks, ikke per array. Å teste ISSET($a[0]) sier ingenting om $a[1]. Et element forblir satt når det først er tilordnet, med mindre det eksplisitt tømmes med UNSET, og etter det returnerer ISSET 0 for det igjen. LASTSET utfyller ISSET ved å returnere den høyeste indeksen som er tilordnet, noe som er nyttig for å iterere over et tynt utfylt array.
Eksempler
Eksempel 1, Teste spredte array-elementer (Indikator)
// Assign two of four elements
$levels[0] = 10
$levels[2] = 30
// ISSET returns 1 for assigned indices and 0 for the gaps
a = ISSET($levels[0]) // 1
b = ISSET($levels[1]) // 0
c = ISSET($levels[2]) // 1
d = ISSET($levels[3]) // 0
RETURN a + b + c + d AS "elements set"Bare indeks 0 og 2 ble skrevet, så de fire sjekkene returnerer 1, 0, 1, 0 og indikatoren plotter 2, antallet utfylte elementer.
Eksempel 2, Lese en verdi per bar bare når den finnes (Indikator)
// Store the high of each bar that sets a new 20-bar peak
IF high >= Highest[20](high) THEN
$peaks[BarIndex] = high
ENDIF
// Fall back to 0 on bars where no peak was recorded
val = 0
IF ISSET($peaks[BarIndex]) THEN
val = $peaks[BarIndex]
ENDIF
RETURN val AS "latest peak"Arrayet skrives bare på topp-barer, og etterlater hull overalt ellers. ISSET skiller registrerte barer fra tomme før elementet leses.
Eksempel 3, Sikre lagrede inngangspriser (ProBacktest)
// Record each entry price in an array as trades open
IF NOT ONMARKET AND close CROSSES OVER Average[50](close) THEN
BUY 1 CONTRACT AT MARKET
$entryPrices[n] = close
n = n + 1
ENDIF
// Exit 2 percent above the last stored entry, if one exists
IF LONGONMARKET AND ISSET($entryPrices[n - 1]) THEN
IF close > $entryPrices[n - 1] * 1.02 THEN
SELL AT MARKET
ENDIF
ENDIFFør utgangsregelen leser den sist lagrede inngangsprisen, bekrefter ISSET at elementet finnes, noe som beskytter de første barene der ingen handel ennå er registrert.
Vanlige feil og fallgruver
- Lesinger av usatte elementer feiler stille. Å lese et element som aldri ble tilordnet returnerer en standardverdi i stedet for en feil, så en manglende ISSET-vakt gir feil tall i stedet for et krasj.
- Null er en satt verdi. Et element som er tilordnet verdien 0, rapporterer likevel ISSET = 1. Å teste
$a[i] = 0er ikke en erstatning for ISSET, siden den ikke kan skille "tilordnet null" fra "aldri tilordnet". - Virkeområde per element. ISSET sjekker én indeks om gangen. Å verifisere at et array "har data" krever at du sjekker de konkrete indeksene koden skal lese, eller bruker LASTSET for å finne det utfylte området.
- UNSET nullstiller flagget. Etter at UNSET har fjernet et element, returnerer ISSET 0 for den indeksen igjen. Kode som holder på en indeks over flere barer, bør sjekke på nytt før den leser.
Relaterte instruksjoner
Unset, tømmer et array-element eller et helt array.LastSet, returnerer den høyeste indeksen som er tilordnet i en array.ArrayMax, største verdi lagret i et array.ArrayMin, minste verdi lagret i et array.ArraySort, sorterer innholdet i en array på plass.ONCE, engangsinitialisering av variabler på den første baren.BarIndex, nummeret på gjeldende bar, en vanlig array-indeks.