BarsSince
BarsSince teller antall barer som har gått siden en betingelse sist var sann i ProBuilder. Følg hvor lenge siden en krysning eller et signal inntraff i diagrammet.
Syntaks
BarsSince(Condition)
BarsSince(Condition, Occurrence)Parametere
| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
Condition | boolsk | påkrevd | Uttrykket hvis siste sanne evaluering måles. |
Occurrence | heltall | 0 | Hvilken forekomst som skal måles. 0 treffer den siste, 1 den foregående, og så videre. |
Slik fungerer det
BarsSince går bakover fra gjeldende bar og teller hvor mange barer som skiller den fra baren der betingelsen sist ble evaluert til sann. Et resultat på 0 betyr at betingelsen er sann på gjeldende bar, 1 betyr at den var sann på forrige bar, og større verdier indikerer eldre hendelser.
Det valgfrie andre argumentet velger tidligere forekomster. BarsSince(cond) og BarsSince(cond, 0) er likeverdige og peker på den siste forekomsten; BarsSince(cond, 1) måler avstanden til forekomsten før den. Å sammenligne de to avdekker avstanden mellom påfølgende hendelser, for eksempel antall barer mellom de to siste oscillatorkryssingene.
Når betingelsen aldri har vært sann noe sted i den evaluerte historikken, returnerer funksjonen -1. Denne sentinelverdien må håndteres eksplisitt, fordi -1 passerer numeriske sammenligninger som < 10 og kan i det stille oppfylle ferskhetsfiltre som var ment å kreve en reell hendelse.
Typiske anvendelser omfatter ferskhetsfiltre (handle bare når et signal har utløst innenfor de siste n barene), nedkjølingstimere (blokker ny inngang til nok barer har gått) og varighetsmålinger mellom hendelser i diagrammet.
Eksempler
Eksempel 1, Avstand til de to siste RSI-krysningene (Indikator)
// Condition: 14-period RSI crosses above 50
a = RSI[14] CROSSES OVER 50
// Bars since the previous occurrence and the most recent one
testA = BarsSince(a, 1)
testB = BarsSince(a)
RETURN testA AS "previous occurrence", testB AS "last occurrence"Indikatoren tegner alderen i barer for den siste RSI-krysningen over 50 og for den foregående. Avstanden mellom de to linjene er mellomrommet mellom påfølgende krysninger.
Eksempel 2, Nedkjøling av inngang (ProOrder)
DEFPARAM CumulateOrders = false
signal = Average[10](close) CROSSES OVER Average[40](close)
sinceSignal = BarsSince(signal)
// Trade the crossover, but not if another one fired within the last 10 bars
IF signal AND (BarsSince(signal, 1) > 10 OR BarsSince(signal, 1) = -1) THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Time-based exit once the signal is 20 bars old
IF LONGONMARKET AND sinceSignal >= 20 THEN
SELL AT MARKET
ENDIFBarsSince har to roller her: forekomst 1 håndhever en nedkjølingsperiode mellom innganger, og forekomst 0 driver en tidsbasert utgang.
Eksempel 3, Skanning etter ferske breakouts (ProScreener)
// Condition: close breaks above the highest close of the prior 50 bars
breakout = close CROSSES OVER Highest[50](close[1])
age = BarsSince(breakout)
// Keep instruments where the breakout happened within the last 3 bars
SCREENER[age >= 0 AND age <= 3] (age AS "Bars since breakout")Screeneren returnerer instrumenter med en nylig 50-bars breakout. Den age >= 0 klausulen utelukker sentinelverdien -1 for instrumenter som aldri utløste.
Vanlige feil og fallgruver
- -1 betyr aldri. En betingelse som aldri har vært sann returnerer -1, som sniker seg gjennom filtre som
BarsSince(cond) < 5. Ekskluder alltid sentinelverdien eksplisitt, for eksempel medage >= 0. - Nummereringen av forekomster starter på 0. Den siste forekomsten er 0, ikke 1. Å sende inn 1 måler den nest siste hendelsen, en vanlig kilde til feil på én.
- Betingelsen må være boolsk. Å mate inn et numerisk uttrykk er ugyldig. Sammenligninger og krysningsuttrykk kvalifiserer; rå priser gjør det ikke.
- Historikken begrenser svaret. Bare innlastede barer undersøkes. En hendelse som er eldre enn den innlastede historikken rapporteres som aldri å ha skjedd, så resultatene kan endre seg når mer data lastes inn.
Relaterte instruksjoner
BarIndex, nullbasert posisjon for gjeldende bar i de innlastede dataene.IntradayBarIndex, bar-teller som nullstilles hver handelsdag.HighestBars, forskyvning i barer for den høyeste verdien over en periode.LowestBars, forskyvning i barer for den laveste verdien over en periode.CROSSES OVER, sann på baren der én serie beveger seg over en annen.CROSSES UNDER, sann på baren der én serie beveger seg under en annen.RSI, momentum-oscillator som ofte kombineres med BarsSince-betingelser.Average, glidende gjennomsnitt brukt i krysningsbetingelser.