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

Unset

Unset fjerner alle lagrede verdier fra en ProBuilder-array i ett kall, og setter arrayen tilbake til en tom tilstand slik at den kan fylles med ferske data senere.

Syntaks

probuilder
Unset($array)

Parametere

NavnTypeStandardBeskrivelse
$arrayarraypåkrevdArray-variabelen hvis innhold tømmes. Array-navn starter alltid med $.

Slik fungerer det

Unset nullstiller hvert element i det angitte arrayet på én gang. Etter kallet regnes ingen indeks lenger som tilordnet: IsSet returnerer 0 for hver posisjon og LastSet returnerer -1, akkurat som om tabellen aldri hadde blitt skrevet til. Selve variabelen slettes ikke, påfølgende tilordninger fyller den igjen som normalt.

Instruksjonen finnes fordi arrayer består fra bar til bar. Verdier som er skrevet på tidligere barer er fortsatt tilgjengelige på senere barer, og det er dette som gjør arrayer nyttige som akkumuleringsbuffere, men det betyr også at gamle data lever videre med mindre de tømmes eksplisitt. Unset er nullstillingsbryteren for denne varigheten.

Typiske mønstre knytter nullstillingen til en markedshendelse eller en kalendergrense: tømme en sesjonsbuffer når en ny handelsdag starter, forkaste innsamlet statistikk når prisen bryter et viktig nivå, eller tømme en arbeidsarray øverst i en beregning per bar før den fylles på nytt. Bare den navngitte arrayen påvirkes, andre arrayer og vanlige variabler beholder verdiene sine.

Å lese et element etter Unset uten å tilordne det på nytt først gir den utilordnede tilstanden i stedet for den gamle verdien, så kode som bruker arrayet, må enten fylle det på nytt eller sjekke IsSet før lesing.

Eksempler

Eksempel 1, Tømme en buffer ved et brudd nedover (Indikator)

probuilder
// Fill the array with moving average values
FOR i = 0 TO 19 DO
  $Array1[i] = average[i](close)
NEXT

// Reset the buffer when price breaks the 20-bar low
IF close crosses under low[20] THEN
  Unset($Array1)
ENDIF
RETURN lastset($Array1) AS "filled up to index"

Arrayen holder gjennomsnittsverdier til bruddbetingelsen utløses, og da tømmer Unset den slik at den kan bygges opp på nytt fra ferske data.

Eksempel 2, Nullstille sesjonsstatistikk hver dag (ProOrder)

probuilder
// Collect the range of every bar during the session
IF intradaybarindex = 0 THEN
  // new trading day, discard yesterday's data
  Unset($barRanges)
ENDIF
$barRanges[max(0, lastset($barRanges) + 1)] = high - low

// Trade only when today already shows expanding ranges
IF lastset($barRanges) >= 5 THEN
  IF high - low > arraymax($barRanges) * 0.9 AND NOT onmarket THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ENDIF

SET STOP %LOSS 1

Unset kjører på den første baren hver dag, så statistikk-arrayen beskriver alltid bare gjeldende sesjon.

Eksempel 3, Arbeidsarray som bygges opp på nytt for hver bar (ProScreener)

probuilder
// Start from an empty scratch buffer on each evaluation
Unset($gains)
FOR k = 0 TO 9 DO
  IF close[k] > close[k + 1] THEN
    $gains[k] = close[k] - close[k + 1]
  ENDIF
NEXT

// Sum only the indices that were actually set
total = 0
FOR k = 0 TO 9 DO
  IF isset($gains[k]) THEN
    total = total + $gains[k]
  ENDIF
NEXT

SCREENER[total > 0] (total AS "10-bar gain sum")

Fordi arrayer består mellom barer, garanterer en innledende Unset at bufferen bare inneholder verdier beregnet for gjeldende bar.

Vanlige feil og fallgruver

  • Lesing etter tømming. Elementer som leses etter Unset er utilordnede, ikke rester som garantert er null. Fyll arrayen på nytt eller sikre lesinger med IsSet før verdiene brukes.
  • Å glemme at arrayer består. Å hoppe over Unset gir ingen feilmelding, det blander stille data fra gamle barer inn i nye beregninger. Buffere som bygges opp på nytt per bar eller per sesjon trenger en eksplisitt nullstilling.
  • Å tømme mer enn tilsiktet. Unset tømmer alltid hele arrayen. Det finnes ingen form per indeks, å fjerne et enkelt element krever at arrayen bygges opp på nytt uten det.
  • LastSet returnerer -1 etterpå. Kode som legger til med $array[lastset($array) + 1] fungerer fortsatt etter Unset fordi -1 + 1 = 0, men kode som leser $array[lastset($array)] uten en sikring indekserer -1.
  • IsSet, tester om en bestemt array-indeks inneholder en verdi.
  • LastSet, returnerer den høyeste tildelte indeksen, -1 etter Unset.
  • ArrayMax, den største verdien som for tiden er lagret i en array.
  • ArrayMin, den minste verdien som for tiden er lagret i en array.
  • ArraySort, sorterer innholdet i en array på plass.
  • ONCE, engangsinitialisering for vanlige variabler.
  • BarIndex, gjeldende barposisjon, ofte brukt sammen med arrayer som indeks.