ArraySort
ArraySort sorterer elementene i et ProBuilder-array i stigende eller synkende rekkefølge, nyttig for å rangere lagrede verdier inne i indikatorer og strategier.
Syntaks
ArraySort($MyArray, ascend)
ArraySort($MyArray, descend)Parametere
| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
$MyArray | array | påkrevd | Arrayvariabelen hvis elementer omorganiseres. |
mode | nøkkelord | påkrevd | Sorteringsretning, enten ascend (minste først) eller descend (største først). |
Slik fungerer det
ArraySort sorterer arrayet på stedet: etter kallet inneholder samme arrayvariabel de samme verdiene i den forespurte rekkefølgen. Ingenting returneres, og den opprinnelige rekkefølgen går tapt, så en kopi må lages først når innsettingsrekkefølgen fortsatt har betydning.
Sortering gjør posisjonstilgang om til rangtilgang. Etter en stigende sortering holder indeks 1 minimumet, midtindeksen holder medianen, og LastSet($array) peker til maksimum. Dette gjør ArraySort til den standard byggesteinen for medianer, persentiler og topp-N-utvalg som de innebygde seriefunksjonene ikke dekker.
Antall utfylte elementer hentes best med LastSet, som returnerer den høyeste tildelte indeksen. Å iterere opp til en hardkodet grense som er større enn det utfylte området, risikerer å berøre utildelte elementer.
Sortering har en reell beregningskostnad. Skript som sorterer et stort array på hver bar gjennom en lang historikk kan bli langsomme. Når det sorterte resultatet bare trengs for visning eller en sluttverdi, pakk arbeidet inn i en IsLastBarUpdate blokk slik at den bare kjører på den siste baren.
Eksempler
Eksempel 1, Sorter og tegn tilfeldige verdier (Indikator)
DEFPARAM DrawOnLastBarOnly = true
IF IsLastBarUpdate THEN
// Fill an array with 100 random values
FOR i = 1 TO 100 DO
$a[i] = Random(0, 1000)
NEXT
// Order the values from largest to smallest
ArraySort($a, descend)
// Print each sorted value on the chart
FOR i = 1 TO LastSet($a) DO
DRAWTEXT($a[i], barindex, i, sansserif, standard, 14)
NEXT
ENDIF
RETURN 0Arrayet fylles med tilfeldige tall, sorteres i synkende rekkefølge, og hver verdi tegnes i diagrammet. Å begrense arbeidet til siste bar holder indikatoren responsiv.
Eksempel 2, Median sluttkurs som handelsfilter (ProOrder)
DEFPARAM CumulateOrders = false
// Copy the last 21 closes into an array
FOR i = 0 TO 20 DO
$window[i + 1] = close[i]
NEXT
// Sort ascending, then read the middle element as the median
ArraySort($window, ascend)
medianClose = $window[11]
// Only take long entries while price holds above its median
IF close > medianClose AND Average[10](close) CROSSES OVER Average[40](close) THEN
BUY 1 CONTRACT AT MARKET
ENDIF
SET STOP %LOSS 2Strategien sorterer et vindu på 21 barer med sluttkurser og leser element 11, medianen, som et regimefilter som er mindre følsomt for uteliggere enn et glidende gjennomsnitt.
Eksempel 3, Persentilrangering av gjeldende range (ProScreener)
// Store the bar ranges of the previous 50 bars
FOR i = 1 TO 50 DO
$ranges[i] = high[i] - low[i]
NEXT
// Sort ascending so high indices hold the widest ranges
ArraySort($ranges, ascend)
// Keep instruments whose current range beats the 90th percentile
threshold = $ranges[45]
SCREENER[(high - low) > threshold] ((high - low) AS "Bar range")Screeneren rangerer de 50 forrige bar-rangene og markerer instrumenter der gjeldende range overstiger den 45. av 50 sorterte verdier, omtrent den 90. persentilen.
Vanlige feil og fallgruver
- Sortering er destruktiv. ArraySort omorganiserer arrayet selv. Når den opprinnelige innsettingsrekkefølgen fortsatt trengs, kopier elementene til et annet array før sortering.
ascendogdescender nøkkelord. De skrives uten anførselstegn, ikke som strenger.ArraySort($a, "descend")kompilerer ikke.- Ikke-tilordnede elementer. Fyll arrayet sammenhengende og bruk
LastSetfor å finne den faktiske størrelsen. Å løkke forbi det utfylte området leser verdier som ikke er tilordnet, og kan gi kjøretidsfeil. - Kostnad på hver bar. Å sortere et stort array på hver bar gjennom en lang historikk bremser kjøringen merkbart. Beskytt sorteringer som kun er for visning med
IsLastBarUpdateslik at de kjører én gang på den aktive baren.
Relaterte instruksjoner
ArrayMax, største verdi i et array uten sortering.ArrayMin, minste verdi i et array uten sortering.IsSet, tester om et arrayelement er tilordnet.LastSet, høyeste tilordnede indeks, i praksis arrayets størrelse.Unset, tømmer en array eller et enkelt element.Random, genererer pseudotilfeldige verdier, nyttig for å teste arraykode.IsLastBarUpdate, true bare under den siste baroppdateringen, brukt for å begrense tungt arbeid.DrawOnLastBarOnly, begrenser tegneutdata til den nyeste baren.