LastSet
LastSet returnerer den høyeste indeksen i et ProBuilder-array som har fått tilordnet en verdi, eller -1 når ingen element er satt. Nyttig for spredt utfylte arrayer.
Syntaks
lastIndex = lastset($array)Parametere
| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
$array | array | påkrevd | Array-variabelen som skal inspiseres. Array-navn starter alltid med $. |
Slik fungerer det
Arrayer i ProBuilder er sparse. Å tilordne en verdi til $prices[7] oppretter eller initialiserer ikke elementene 0 til 6, den markerer bare indeks 7 som satt. LastSet skanner arrayet og returnerer den største indeksen som noen gang er tildelt, uavhengig av eventuelle hull under den.
Når arrayet aldri har blitt skrevet til, eller er tømt med Unset, returnerer LastSet -1. Denne sentinelverdien skiller en tom array fra en array der element 0 inneholder en verdi.
Det vanligste mønsteret er å bruke LastSet som en teller for effektiv lengde. Når en array fylles sekvensielt fra indeks 0, lastset($array) + 1 er lik antallet lagrede elementer, og $array[lastset($array)] leser den sist tilføyde verdien. Sammen med IsSet, som tester en enkelt indeks, lar LastSet deg iterere trygt over arrayer hvis størrelse ikke er kjent på forhånd.
Fordi verdien også gjenspeiler tilordninger gjort på tidligere barer, er LastSet også nyttig for å oppdage om en akkumuleringsbuffer i det hele tatt er fylt før du leser fra den.
Eksempler
Eksempel 1, Finne den sist tilordnede indeksen (Indikator)
// Assign values at two non-contiguous indices
$myArray[3] = 50
$myArray[7] = 100
lastIndex = lastset($myArray) // returns 7
RETURN lastIndexBare indeksene 3 og 7 er satt. LastSet ignorerer hullet og returnerer 7, den høyeste tilordnede posisjonen.
Eksempel 2, Lese den sist lagrede inngangsprisen (ProBacktest)
// Append each entry price to an array
IF longtriggered THEN
$entries[lastset($entries) + 1] = tradeprice
ENDIF
// Exit when price falls 2% below the latest recorded entry
IF lastset($entries) >= 0 THEN
IF close < $entries[lastset($entries)] * 0.98 THEN
SELL AT MARKET
ENDIF
ENDIF
IF close crosses over average[50](close) THEN
BUY 1 CONTRACT AT MARKET
ENDIFArrayet vokser med én plass per inngang. LastSet finner den sist tilføyde prisen, og vakten mot -1 hindrer lesing fra et tomt array.
Eksempel 3, Gjennomsnitt av bare verdiene som er samlet så langt (ProScreener)
// Store the close of every bullish bar
IF close > open THEN
$bullCloses[lastset($bullCloses) + 1] = close
ENDIF
// Average the collected values once at least five exist
count = lastset($bullCloses) + 1
avgBull = 0
IF count >= 5 THEN
FOR i = 0 TO lastset($bullCloses) DO
avgBull = avgBull + $bullCloses[i]
NEXT
avgBull = avgBull / count
ENDIF
SCREENER[close > avgBull AND count >= 5] (avgBull AS "Avg bull close")LastSet gir både posisjonen for tilføyelse og løkkegrensen, så koden itererer aldri forbi den utfylte delen av arrayet.
Vanlige feil og fallgruver
- Indeks, ikke antall. LastSet returnerer en posisjon, så et array fylt fra indeks 0 inneholder
lastset($array) + 1elementer. Å glemme forskyvningen gir løkkegrenser som er feil med én. - -1 brukt som indeks. På et tomt array er resultatet -1, og
$array[lastset($array)]leser så en negativ indeks. Test forlastset($array) >= 0før enhver lesing. - Hull er usynlige. LastSet rapporterer bare den høyeste tilordnede indeksen. Elementer under den kan fortsatt være utilordnet, så en løkke fra 0 til LastSet kan lese plasser som aldri ble skrevet. Bruk
IsSetpå hver indeks når hull er mulige. - Tømmes av Unset. Etter
Unset($array)returnerer funksjonen -1 igjen, selv om selve matrisevariabelen fortsatt finnes og kan fylles på nytt.
Relaterte instruksjoner
IsSet, tester om én bestemt array-indeks inneholder en verdi.Unset, tømmer alle lagrede verdier fra et array.ArrayMax, returnerer den største verdien lagret i en array.ArrayMin, returnerer den minste verdien lagret i en array.ArraySort, sorterer array-innhold i stigende eller synkende rekkefølge.BarIndex, nullbasert posisjon for gjeldende bar, ofte brukt som array-indeks.ONCE, initialiserer en variabel bare på den første baren.