Rejoignez-nous
Instructions/probuilder · probacktest · proorder · proscreener

BarsSince

BarsSince compte le nombre de bars écoulés depuis la dernière fois qu'une condition a été vraie en ProBuilder. Suivez depuis combien de temps un croisement ou un signal s'est produit sur le graphique.

Syntaxe

probuilder
BarsSince(Condition)
BarsSince(Condition, Occurrence)

Paramètres

NomTypePar défautDescription
ConditionbooléenrequisL'expression dont la plus récente évaluation à vrai est mesurée.
Occurrenceentier0Quelle occurrence mesurer. 0 vise la plus récente, 1 celle d'avant, et ainsi de suite.

Comment ça marche

BarsSince remonte depuis le bar actuel et compte combien de bars le séparent du bar sur lequel la condition a été évaluée à vrai pour la dernière fois. Un résultat de 0 signifie que la condition est vraie sur le bar actuel, 1 qu'elle était vraie sur le bar précédent, et des valeurs plus grandes indiquent des événements plus anciens.

Le deuxième argument optionnel sélectionne les occurrences antérieures. BarsSince(cond) et BarsSince(cond, 0) sont équivalents et ciblent la dernière occurrence ; BarsSince(cond, 1) mesure la distance jusqu'à l'occurrence précédant celle-là. Comparer les deux révèle l'espacement entre événements consécutifs, par exemple le nombre de bars entre les deux derniers croisements de l'oscillateur.

Lorsque la condition n'a jamais été vraie nulle part dans l'historique évalué, la fonction renvoie -1. Cette valeur sentinelle doit être traitée explicitement, car -1 passe les comparaisons numériques telles que < 10 et peut silencieusement satisfaire des filtres de fraîcheur censés exiger un véritable événement.

Les applications typiques incluent les filtres de fraîcheur (n'agir que si un signal s'est déclenché dans les n derniers bars), les minuteurs d'attente (bloquer une nouvelle entrée tant qu'assez de bars ne se sont pas écoulés) et les mesures de durée entre événements du graphique.

Exemples

Exemple 1, Distance aux deux derniers croisements du RSI (Indicateur)

probuilder
// 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"

L'indicateur trace l'ancienneté en bars du dernier croisement du RSI au-dessus de 50 et de celui qui le précède. L'écart entre les deux lignes correspond à l'espacement entre croisements consécutifs.

Exemple 2, Délai d'attente entre entrées (ProOrder)

probuilder
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
ENDIF

BarsSince remplit deux rôles ici : l'occurrence 1 impose un délai d'attente entre les entrées, et l'occurrence 0 pilote une sortie basée sur le temps.

Exemple 3, Scan de breakouts récents (ProScreener)

probuilder
// 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")

Le screener renvoie les instruments présentant un breakout récent sur 50 bars. Le age >= 0 exclut la sentinelle -1 pour les instruments qui ne se sont jamais déclenchés.

Erreurs et pièges courants

  • -1 signifie jamais. Une condition qui n'a jamais été vraie renvoie -1, ce qui passe à travers des filtres comme BarsSince(cond) < 5. Excluez toujours la valeur sentinelle explicitement, par exemple avec age >= 0.
  • La numérotation des occurrences commence à 0. L'occurrence la plus récente est 0, pas 1. Passer 1 mesure l'avant-dernier événement, une source fréquente de décalage d'une unité.
  • La condition doit être booléenne. Fournir une expression numérique est invalide. Les comparaisons et les expressions de croisement conviennent ; les prix bruts, non.
  • L'historique limite la réponse. Seuls les bars chargés sont examinés. Un événement plus ancien que l'historique chargé est signalé comme ne s'étant jamais produit, les résultats peuvent donc changer quand davantage de données sont chargées.
  • BarIndex, position du bar courant dans les données chargées, à partir de zéro.
  • IntradayBarIndex, compteur de bars qui se remet à zéro chaque journée de trading.
  • HighestBars, décalage en bars de la valeur la plus élevée sur une période.
  • LowestBars, décalage en bars de la valeur la plus basse sur une période.
  • CROSSES OVER, vrai sur le bar où une série passe au-dessus d'une autre.
  • CROSSES UNDER, vrai sur le bar où une série passe en dessous d'une autre.
  • RSI, oscillateur de momentum fréquemment associé aux conditions BarsSince.
  • Average, moyenne mobile utilisée dans les conditions de croisement.