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

ArrayMax

ArrayMax geeft de grootste waarde die in een ProBuilder-array is opgeslagen. Gebruik het om het maximum uit verzamelde datapunten in indicatoren en strategieën te halen.

Syntaxis

probuilder
result = ArrayMax($MyArray)

Parameters

NaamTypeStandaardBeschrijving
$MyArrayarrayverplichtDe arrayvariabele die gescand wordt. Arraynamen beginnen altijd met $.

Hoe het werkt

ArrayMax bekijkt elk element dat in de array is toegewezen en geeft de enkele grootste waarde terug. Het vervangt het gangbare patroon van loopen over indices en elk element vergelijken met een lopend maximum, wat scripts korter en minder foutgevoelig houdt.

De functie werkt op de array zoals die op het moment van de aanroep bestaat. Arrays in ProBuilder blijven van bar tot bar bestaan, dus een array die per bar één nieuw element krijgt, bouwt historie op, en ArrayMax weerspiegelt alles wat tot dan toe is opgeslagen, niet alleen de huidige bar. Om het resultaat tot een voortschrijdend venster te beperken, overschrijf je een vaste set indices of leeg je de array met Unset voordat het opnieuw gevuld wordt.

Als de array helemaal geen elementen bevat, geeft ArrayMax een ongedefinieerde waarde. De aanroep afschermen met IsSet of controleren LastSet voorkomt dat een ongedefinieerd resultaat in latere berekeningen terechtkomt.

ArrayMax verschilt van Highest, dat werkt op prijsreeksen over een vast aantal bars, en van MAX, die precies twee scalaire waarden vergelijkt. ArrayMax is de enige van de drie die werkt op een willekeurige, door de gebruiker gevulde collectie.

Voorbeelden

Voorbeeld 1, Hoogste van vijf opgeslagen koersen (Indicator)

probuilder
// Store five closing prices in an array
$prices[1] = 130
$prices[2] = 135
$prices[3] = 128
$prices[4] = 140
$prices[5] = 138

// Extract the largest stored value
highestPrice = ArrayMax($prices)
RETURN highestPrice

De array bevat vijf waarden en ArrayMax geeft 140, de grootste daarvan. Dit is het canonieke gebruik: vullen, dan opvragen.

Voorbeeld 2, Breakout-niveau uit vastgelegde swing highs (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

// Record the high of each bar where RSI was above 60
IF RSI[14](close) > 60 THEN
  $swingHighs[LastSet($swingHighs) + 1] = high
ENDIF

// Enter long on a break above the strongest recorded high
IF IsSet($swingHighs[1]) THEN
  breakoutLevel = ArrayMax($swingHighs)
  IF close CROSSES OVER breakoutLevel THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ENDIF

SET STOP %LOSS 2

De strategie voegt een high toe aan de array wanneer het momentum sterk is, en gebruikt dan ArrayMax om een breakout-drempel af te leiden uit alle vastgelegde highs.

Voorbeeld 3, Filter op volumespike (ProScreener)

probuilder
// Collect the volume of the last 20 bars into an array
FOR i = 1 TO 20 DO
  $vols[i] = volume[i]
NEXT

// Flag instruments whose current volume exceeds every stored value
maxVol = ArrayMax($vols)
SCREENER[volume > maxVol] (volume AS "Volume")

De screener slaat de vorige 20 volumewaarden op en houdt dan alleen instrumenten over waar het volume van de huidige bar boven de ArrayMax van dat venster uitkomt.

Veelvoorkomende fouten en valkuilen

  • Het argument moet een array zijn. Het doorgeven van een gewone variabele, een prijsreeks of een indicatorresultaat levert een compilatiefout op. Alleen variabelen met het voorvoegsel $ en geïndexeerd met blokhaken komen in aanmerking.
  • Een lege array geeft undefined terug. ArrayMax aanroepen voordat er een element is toegekend levert een ongedefinieerde waarde op die stil door de rekenkunde heen doorwerkt. Controleer IsSet($array[index]) of LastSet eerst.
  • Arrays accumuleren over bars heen. Een array waaraan elke bar wordt toegevoegd groeit zolang de grafiek bestaat, dus ArrayMax dekt de volledige opgebouwde historie. Hergebruik voor een meelopend maximum een vast indexbereik of wis de array met Unset.
  • Geen vervanging voor Highest. Voor het maximum van een ingebouwde reeks over de laatste n bars, Highest[n](series) is eenvoudiger en sneller dan waarden naar een array kopiëren.
  • ArrayMin, geeft de kleinste in een array opgeslagen waarde terug.
  • ArraySort, sorteert array-elementen in op- of aflopende volgorde.
  • IsSet, test of een bepaald array-element is toegekend.
  • LastSet, geeft de hoogste toegekende index in een array terug.
  • Unset, wist een array of een enkel element.
  • Highest, hoogste waarde van een reeks over een vast aantal bars.
  • MAX, de grootste van twee scalaire waarden.
  • BarIndex, positie van de huidige bar in de geladen data.