Bli medlem i dag
Instruksjoner/probuilder · probacktest · proorder · proscreener

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

probuilder
lastIndex = lastset($array)

Parametere

NavnTypeStandardBeskrivelse
$arrayarraypåkrevdArray-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)

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

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

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

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

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 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) + 1 elementer. Å 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 for lastset($array) >= 0 fø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 IsSet på 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.
  • 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.