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
ONCE variable = expressionSlik 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)
// 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 recentLowmyFirstLowest 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)
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
ENDIFDe 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)
// 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 = xpå hver bar for å bevare en verdi fungerer, men skjuler hensikten.ONCE x = startValueangir initialiseringen eksplisitt og unngår utilsiktede overskrivinger.
Relaterte instruksjoner
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.