LastSet
LastSet returnerar det högsta indexet i en ProBuilder-array som har tilldelats ett värde, eller -1 när inget element är satt. Användbar för glest ifyllda arrayer.
Syntax
lastIndex = lastset($array)Parametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
$array | array | obligatorisk | Arrayvariabeln som ska inspekteras. Arraynamn börjar alltid med $. |
Så fungerar det
Arrayer i ProBuilder är glesa. Att tilldela ett värde till $prices[7] skapar eller initierar inte elementen 0 till 6, den markerar bara index 7 som satt. LastSet skannar arrayen och returnerar det största index som någonsin har tilldelats, oavsett eventuella luckor under det.
När arrayen aldrig har skrivits till, eller har rensats med Unset, returnerar LastSet -1. Det sentinelvärdet skiljer en tom array från en array där element 0 innehåller ett värde.
Det vanligaste mönstret är att använda LastSet som en räknare för effektiv längd. När en array fylls sekventiellt från index 0, lastset($array) + 1 är lika med antalet lagrade element, och $array[lastset($array)] läser det senast tillagda värdet. Tillsammans med IsSet, som testar ett enskilt index, tillåter LastSet säker iteration över arrayer vars storlek inte är känd i förväg.
Eftersom värdet också speglar tilldelningar gjorda på tidigare barer är LastSet även användbar för att upptäcka om en ackumuleringsbuffert alls har fyllts innan man läser från den.
Exempel
Exempel 1, Hitta det senast tilldelade indexet (Indikator)
// Assign values at two non-contiguous indices
$myArray[3] = 50
$myArray[7] = 100
lastIndex = lastset($myArray) // returns 7
RETURN lastIndexBara index 3 och 7 är satta. LastSet ignorerar luckan och returnerar 7, den högsta tilldelade positionen.
Exempel 2, Läsa det senast lagrade entrypriset (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
ENDIFArrayen växer med en plats per entry. LastSet hittar det senast tillagda priset, och skyddet mot -1 förhindrar läsning från en tom array.
Exempel 3, Beräkna medelvärdet av bara de värden som samlats in så här långt (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 ger både positionen att lägga till på och loopens gräns, så koden itererar aldrig förbi den ifyllda delen av arrayen.
Vanliga fel och fallgropar
- Index, inte antal. LastSet returnerar en position, så en array fylld från index 0 innehåller
lastset($array) + 1element. Att glömma förskjutningen ger loopgränser som är fel med ett. - -1 använt som index. På en tom array är resultatet -1, och
$array[lastset($array)]läser då ett negativt index. Testa förlastset($array) >= 0före varje läsning. - Luckor är osynliga. LastSet rapporterar bara det högsta tilldelade indexet. Element under det kan fortfarande vara otilldelade, så en loop från 0 till LastSet kan läsa platser som aldrig skrevs. Använd
IsSetpå varje index när luckor är möjliga. - Rensas av Unset. Efter
Unset($array)returnerar funktionen -1 igen, även om själva arrayvariabeln fortfarande finns och kan fyllas på igen.
Relaterade instruktioner
IsSet, testar om ett specifikt arrayindex innehåller ett värde.Unset, rensar alla lagrade värden från en array.ArrayMax, returnerar det största värdet som lagras i en array.ArrayMin, returnerar det minsta värdet som lagras i en array.ArraySort, sorterar arrayens innehåll i stigande eller fallande ordning.BarIndex, nollbaserad position för den aktuella baren, ofta använd som arrayindex.ONCE, initierar en variabel endast på den första baren.