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

ONCE

ONCE i ProBuilder utfører en tilordning bare på den første baren skriptet behandler, slik at startverdier ikke overskrives på hver senere bar.

Syntaks

probuilder
ONCE variable = expression

Slik fungerer det

Et ProBuilder-skript kjøres fra topp til bunn på hver bar i diagrammet, og variabler beholder verdiene sine fra én bar til den neste. En enkel tilordning som counter = 0 nullstiller derfor variabelen på hver bar. Å sette ONCE foran linjen begrenser tilordningen til bare den første evalueringen, slik at senere barer lar variabelen være urørt og den kan samle tilstand gjennom hele diagrammet.

Uttrykket på høyre side beregnes med dataene som er tilgjengelige på den første baren. Historikken er kort på det tidspunktet, så funksjoner som trenger en tilbakeblikksperiode, som lowest[10](low), arbeid med de barene som finnes når skriptet starter.

Verdien som settes av ONCE består til skriptet beregnes på nytt fra grunnen av, for eksempel etter at koden er redigert, tidsrammen endret eller plattformen startet på nytt. I handelssystemer er ONCE den vanlige måten å definere tellere, flagg og faste innstillinger som inngangs- og utgangslogikken leser på hver bar.

Eksempler

Eksempel 1, Sporing av nye bunner mot en opprinnelig referanse (Indikator)

probuilder
// capture the 10-bar low a single time when the script starts
ONCE myFirstLowest = lowest[10](low)
IF low < myFirstLowest OR low < recentLow THEN
  recentLow = low
ELSE
  recentLow = recentLow
ENDIF
RETURN recentLow

myFirstLowest beregnes bare på den første baren og oppdateres aldri. Indikatoren følger deretter hver ny lav-kurs som settes etter den første referansen.

Eksempel 2, Faste strategikonstanter (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
// define risk settings a single time
ONCE stopPoints = 40
ONCE targetPoints = 80
IF NOT onmarket AND close CROSSES OVER Average[50](close) THEN
  BUY 1 CONTRACT AT MARKET
  SET STOP pLOSS stopPoints
  SET TARGET pPROFIT targetPoints
ENDIF

De to risikokonstantene tilordnes ved den første evalueringen og gjenbrukes på hver bar deretter, slik at konfigurasjonen holdes på ett opplagt sted øverst i strategien.

Eksempel 3, Gevinst siden den første skannede baren (ProScreener)

probuilder
// record the close of the first bar in the scanned history
ONCE startLevel = close
gainPct = (close - startLevel) / startLevel * 100
SCREENER[gainPct > 10] (gainPct AS "Gain %")

startLevel fryser closen på den tidligste behandlede baren. Hver senere bar sammenligner gjeldende close med den, og screeneren beholder instrumenter som er opp mer enn 10 prosent over det skannede vinduet.

Vanlige feil og fallgruver

  • Å forvente en nullstilling ved hver sesjon eller dag. ONCE utløses ved den første evalueringen av skriptet og aldri igjen før en full omberegning. Verdier som må nullstilles daglig krever eksplisitt logikk, for eksempel å sammenligne gjeldende dato med en lagret dato.
  • Data på første bar er tynne. Uttrykket evalueres når historikken er på sitt korteste. En tilbakeblikksfunksjon inne i ONCE kan se færre barer enn forespurt, noe som kan gjøre startverdien lite representativ. I strategier styrer PRELOADBARS hvor mye historikk som er tilgjengelig før starten.
  • ONCE på en linje som skal kjøres per bar. Bare reelle initialiseringer hører bak ONCE. Å merke en beregning som avhenger av gjeldende kurser gjør den permanent utdatert etter første bar.
  • Overflødig selvtilordning i stedet for ONCE. Skriving x = x på hver bar for å bevare en verdi fungerer, men skjuler hensikten. ONCE x = startValue angir initialiseringen eksplisitt og unngår utilsiktede overskrivinger.
  • IF, betinget logikk som vanligvis bruker tilstand initialisert med ONCE.
  • ELSE, reservegren inne i den betingede logikken.
  • ENDIF, avslutter en IF-blokk.
  • BarIndex, barteller, nyttig for logikk knyttet til de første barene.
  • DEFPARAM, utførelsesinnstillinger på skriptnivå, også definert øverst.
  • RETURN, gir ut den endelige verdien av en indikator.