Word nu lid
Instructies/probuilder · probacktest · proorder · proscreener

LastSet

LastSet geeft de hoogste index van een ProBuilder-array waaraan een waarde is toegekend, of -1 wanneer geen enkel element is gezet. Nuttig voor dunbezette arrays.

Syntaxis

probuilder
lastIndex = lastset($array)

Parameters

NaamTypeStandaardBeschrijving
$arrayarrayverplichtDe arrayvariabele die geïnspecteerd wordt. Arraynamen beginnen altijd met $.

Hoe het werkt

Arrays in ProBuilder zijn sparse. Een waarde toekennen aan $prices[7] maakt of initialiseert de elementen 0 tot en met 6 niet, hij markeert alleen index 7 als gezet. LastSet doorloopt de array en geeft de hoogste index die ooit is toegewezen, ongeacht eventuele gaten daaronder.

Wanneer de array nooit is beschreven, of is gewist met Unset, geeft LastSet -1 terug. Die sentinelwaarde onderscheidt een lege array van een array waarvan element 0 een waarde bevat.

Het meestgebruikte patroon is LastSet behandelen als een teller van de effectieve lengte. Wanneer een array sequentieel vanaf index 0 wordt gevuld, lastset($array) + 1 is gelijk aan het aantal opgeslagen elementen, en $array[lastset($array)] leest de meest recent toegevoegde waarde. Samen met IsSet, dat een enkele index test, maakt LastSet veilige iteratie mogelijk over arrays waarvan de grootte niet vooraf bekend is.

Omdat de waarde ook toekenningen van eerdere bars weergeeft, is LastSet ook nuttig om te detecteren of een accumulatiebuffer wel gevuld is voordat je eruit leest.

Voorbeelden

Voorbeeld 1, De laatst toegekende index vinden (Indicator)

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

Alleen de indices 3 en 7 zijn gezet. LastSet negeert het gat en geeft 7, de hoogste toegekende positie.

Voorbeeld 2, De meest recent opgeslagen instapprijs lezen (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

De array groeit met één slot per instap. LastSet lokaliseert de laatst toegevoegde prijs, en de controle op -1 voorkomt dat er uit een lege array wordt gelezen.

Voorbeeld 3, Alleen het gemiddelde nemen van de tot nu toe verzamelde waarden (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 levert zowel de positie om toe te voegen als de lusgrens, zodat de code nooit verder itereert dan het gevulde deel van de array.

Veelvoorkomende fouten en valkuilen

  • Index, geen aantal. LastSet geeft een positie terug, dus een array die vanaf index 0 is gevuld bevat lastset($array) + 1 elementen. Het vergeten van de offset levert loopgrenzen op die er één naast zitten.
  • -1 gebruikt als index. Bij een lege array is het resultaat -1, en $array[lastset($array)] leest dan een negatieve index. Test op lastset($array) >= 0 voor elke uitlezing.
  • Gaten zijn onzichtbaar. LastSet rapporteert alleen de hoogste toegekende index. Elementen eronder kunnen nog niet-toegekend zijn, dus een lus van 0 tot LastSet kan slots lezen die nooit zijn beschreven. Gebruik IsSet op elke index wanneer gaten mogelijk zijn.
  • Gewist door Unset. Na Unset($array) geeft de functie opnieuw -1, ook al bestaat de arrayvariabele zelf nog en kan hij opnieuw gevuld worden.
  • IsSet, test of één specifieke array-index een waarde bevat.
  • Unset, wist alle opgeslagen waarden uit een array.
  • ArrayMax, geeft de grootste in een array opgeslagen waarde terug.
  • ArrayMin, geeft de kleinste in een array opgeslagen waarde terug.
  • ArraySort, sorteert de inhoud van een array in oplopende of aflopende volgorde.
  • BarIndex, nulgebaseerde positie van de huidige bar, vaak gebruikt als array-index.
  • ONCE, initialiseert een variabele alleen op de eerste bar.