ONCE
ONCE in ProBuilder voert een toewijzing alleen uit op de eerste bar die het script verwerkt, zodat beginwaarden niet op elke latere bar worden overschreven.
Syntaxis
ONCE variable = expressionHoe het werkt
Een ProBuilder-script wordt op elke bar van de grafiek van boven naar beneden uitgevoerd, en variabelen behouden hun waarden van de ene bar naar de volgende. Een eenvoudige toewijzing zoals counter = 0 zet de variabele daarom op elke bar terug op nul. Door de regel met ONCE te laten beginnen geldt de toewijzing alleen bij de eerste evaluatie, zodat latere bars de variabele onaangeroerd laten en hij over de hele grafiek een toestand kan opbouwen.
De expressie aan de rechterkant wordt geëvalueerd met de data die op die eerste bar beschikbaar is. De historie is op dat moment kort, dus functies die een lookback nodig hebben, zoals lowest[10](low), werken met de bars die beschikbaar zijn wanneer het script start.
De door ONCE ingestelde waarde blijft bestaan tot het script helemaal opnieuw wordt berekend, bijvoorbeeld na het bewerken van de code, het wijzigen van het tijdframe of het herstarten van het platform. In handelssystemen is ONCE de standaardmanier om tellers, vlaggen en vaste instellingen te definiëren die de instap- en uitstaplogica op elke bar uitleest.
Voorbeelden
Voorbeeld 1, Nieuwe lows bijhouden tegen een beginreferentie (Indicator)
// 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 wordt alleen op de eerste bar berekend en nooit vernieuwd. De indicator volgt daarna elke nieuwe low die na die initiële referentie wordt gezet.
Voorbeeld 2, Vaste strategieconstanten (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 twee risicoconstanten worden bij de eerste evaluatie toegewezen en daarna op elke bar hergebruikt, waardoor de configuratie op één duidelijke plek bovenaan de strategie staat.
Voorbeeld 3, Winst sinds de eerste gescande bar (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 bevriest de close van de eerst verwerkte bar. Elke latere bar vergelijkt de huidige close daarmee, en de screener houdt instrumenten over die meer dan 10 procent zijn gestegen over het gescande venster.
Veelvoorkomende fouten en valkuilen
- Een reset bij elke sessie of dag verwachten. ONCE gaat af bij de eerste evaluatie van het script en daarna nooit meer tot een volledige herberekening. Waarden die dagelijks moeten resetten vereisen expliciete logica, bijvoorbeeld de huidige datum vergelijken met een opgeslagen datum.
- Data van de eerste bar is dun. De expressie wordt geëvalueerd wanneer de historie op zijn kortst is. Een lookback-functie binnen ONCE kan minder bars zien dan gevraagd, waardoor de beginwaarde niet representatief kan zijn. In strategieën bepaalt PRELOADBARS hoeveel historie er vóór de start beschikbaar is.
- ONCE op een regel die per bar moet worden uitgevoerd. Alleen echte initialisaties horen achter ONCE. Een berekening markeren die van actuele prijzen afhangt, maakt hem na bar één permanent verouderd.
- Overbodige zelftoewijzing in plaats van ONCE. Schrijven
x = xop elke bar om een waarde te bewaren werkt, maar verbergt de bedoeling.ONCE x = startValuemaakt de initialisatie expliciet en voorkomt onbedoeld overschrijven.
Gerelateerde instructies
IF, conditionele logica die doorgaans met ONCE geïnitialiseerde toestand gebruikt.ELSE, terugvaltak binnen die conditionele logica.ENDIF, sluit een IF-blok af.BarIndex, barteller, nuttig voor logica die op de eerste bars is afgestemd.DEFPARAM, uitvoeringsinstellingen op scriptniveau, die ook bovenaan worden gedefinieerd.RETURN, geeft de uiteindelijke waarde van een indicator als uitvoer.