Bli medlem idag
Instruktioner/probuilder · probacktest · proorder · proscreener

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

probuilder
lastIndex = lastset($array)

Parametrar

NamnTypStandardBeskrivning
$arrayarrayobligatoriskArrayvariabeln 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)

probuilder
// Assign values at two non-contiguous indices
$myArray[3] = 50
$myArray[7] = 100
lastIndex = lastset($myArray) // returns 7
RETURN lastIndex

Bara 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)

probuilder
// 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
ENDIF

Arrayen 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)

probuilder
// 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) + 1 element. 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ör lastset($array) >= 0 fö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 IsSet på 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.
  • 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.