Flag-Patterns in der Tiefe: Bull-Flag vs. Bear-Flag systematisch.
Flags sind die nahen Verwandten der Pennants — und in vielen Trading-Büchern wird der Unterschied unscharf gehalten. Das ist ein Fehler. Wer Flags algorithmisch sauber von Pennants und beliebigen Konsolidierungen trennt, bekommt eines der am besten backtestbaren Continuation-Patterns der klassischen Lehre.
Definition: paralleler Kanal nach Flagpole.
Ein Flag-Pattern besteht aus zwei Elementen. Erstens der Flagpole: eine steile, fast vertikale Kursbewegung von typischerweise 15 bis 50 Prozent in wenigen Bars. Zweitens die Flagge selbst: ein paralleler Kanal, der entgegen der Pole-Richtung verläuft. Bei einer Bull-Flag fällt der Kanal leicht nach unten ab; bei einer Bear-Flag steigt er leicht an. Genau diese Parallelität unterscheidet eine Flag von einem Pennant — beim Pennant konvergieren die Trendlinien zu einem Dreieck.
Die zweite definierende Eigenschaft: Flags sind kurz. Bulkowski berichtet eine mediane Dauer von 11 Bars, mit einer typischen Spanne von 5 bis 20. Alles, was länger ist, wird zu einer Rectangle oder einem Channel — Patterns mit statistisch deutlich anderem Verhalten. Wer eine Flag nach 30 Bars immer noch als Flag handelt, handelt etwas anderes.
Bull-Flag und Bear-Flag.
Bull-Flags entstehen nach einem starken Aufwärts-Impuls. Der Kanal fällt leicht, das Volume sinkt, der Breakout erfolgt nach oben. Bear-Flags sind das Spiegelbild: nach einem starken Abwärts-Impuls steigt der Kanal leicht an, Volume sinkt, Breakout erfolgt nach unten.
In der statistischen Performance unterscheiden sich beide Varianten ähnlich wie Pennants. Bulkowski-typische Zahlen: Bull-Flags etwa 64 bis 67 Prozent Continuation-Rate in Bull-Märkten, Bear-Flags 45 bis 55 Prozent. Mein eigener Backtest auf US-Aktien zwischen 2008 und 2024 zeigt ein ähnliches Bild: Bull-Flags liefern in Up-Regimes konsistent positiven Erwartungswert, Bear-Flags sind deutlich regimeabhängiger und in seitwärts laufenden Märkten nahe an einem Coinflip.
Volume: bei Flags noch wichtiger als bei anderen Patterns.
Das klassische Volume-Profil einer Flag ist sehr ausgeprägt — und es ist der wichtigste Filter, den die meisten Trader unterschätzen:
- Flagpole: stark erhöhtes Volume, idealerweise zwei- bis dreifaches Durchschnittsvolumen. Ein Pole ohne Volume ist kein Pole — er ist eine kurzfristige Übertreibung.
- Im Kanal: kontinuierlich sinkendes Volume. Das ist das wichtigste Signal. Eine Flag mit gleichbleibendem oder steigendem Volume ist kein Konsolidierungs-, sondern ein Distributions-Pattern — und bricht statistisch häufig in die falsche Richtung aus.
- Beim Breakout: Volume springt zurück auf oder über das Pole-Niveau. Ohne diese Bestätigung sinkt die Erfolgsrate in meinen Daten um 10 bis 15 Prozentpunkte.
Algorithmische Flag-Detection per linearer Regression.
Die Detection einer Flag ist mathematisch klarer als die eines Pennants, weil die Parallelität präzise quantifizierbar ist. Ich fitte zwei lineare Regressionen — eine auf die Highs, eine auf die Lows — und vergleiche die beiden Steigungen. Sind sie nahezu identisch und in die richtige Richtung geneigt, habe ich einen Kanal:
import numpy as np
import pandas as pd
def detect_bull_flag(df, pole_min_pct=0.15, pole_max_bars=15,
flag_min_bars=5, flag_max_bars=20,
slope_tol=0.4, vol_mult=1.5):
"""
Bull-Flag: steiler Up-Move, danach leicht fallender paralleler Kanal,
Breakout nach oben mit Volume-Bestaetigung.
"""
triggers = []
for end in range(pole_max_bars + flag_max_bars + 5, len(df)):
for pole_bars in range(5, pole_max_bars):
pole_start = end - flag_max_bars - pole_bars
pole_end = end - flag_max_bars
pole_low = df['low'].iloc[pole_start]
pole_high = df['high'].iloc[pole_end - 1]
pole_pct = (pole_high - pole_low) / pole_low
if pole_pct < pole_min_pct:
continue
flag = df.iloc[pole_end:end]
if len(flag) < flag_min_bars:
continue
x = np.arange(len(flag))
slope_h, _ = np.polyfit(x, flag['high'].values, 1)
slope_l, _ = np.polyfit(x, flag['low'].values, 1)
# Bull-Flag: beide Steigungen leicht negativ
if not (slope_h < 0 and slope_l < 0):
continue
# Parallelitaet: Steigungen aehnlich
if abs(slope_h - slope_l) / max(abs(slope_h), 1e-9) > slope_tol:
continue
# Volume faellt im Kanal
vol_slope, _ = np.polyfit(x, flag['volume'].values, 1)
if vol_slope >= 0:
continue
upper_line = flag['high'].iloc[0] + slope_h * len(flag)
vol_med = df['volume'].iloc[end-50:end].median()
if df['close'].iloc[end] > upper_line \
and df['volume'].iloc[end] > vol_mult * vol_med:
triggers.append({
'idx': end,
'pole_pct': pole_pct,
'target': df['close'].iloc[end] + (pole_high - pole_low),
'stop': flag['low'].min(),
})
break
return triggers
Der Parameter slope_tol ist der wichtigste Hyperparameter. Zu
grosszügig — und der Algorithmus akzeptiert Pennants als Flags. Zu eng — und
jeder kleine Rauschen-Anteil wirft echte Flags raus. Mein Wert von 0.4 ist ein
Kompromiss, der sich in mehreren Walk-Forward-Tests bewährt hat.
Stop- und Target-Logik.
- Entry: Close oberhalb der oberen Kanal-Linie (bei Bull-Flag) bzw. unterhalb der unteren Kanal-Linie (bei Bear-Flag), mit Volume-Bestätigung.
- Stop: ein bis zwei ATR unterhalb des Kanal-Tiefs. Wer das Setup eng halten möchte, kann direkt unter die untere Kanal-Linie setzen — das ist aber im Backtest häufiger durch normale Volatilität ausgestoppt.
- Target: Flagpole-Höhe über dem Breakout-Niveau projiziert. Bei einem 20-Prozent-Pole ist das Target also 20 Prozent über dem Breakout-Close.
- Partielle Gewinnmitnahme: in meiner Praxis nehme ich 50 Prozent bei 50 Prozent des Target-Wegs und lasse den Rest mit Trailing-Stop laufen. Das verbessert das R/R-Profil empirisch um 15 bis 20 Prozent gegenüber dem Single-Target-Exit.
Ehrliche Bewertung und meine Praxis.
Flags sind eines der wenigen Patterns, die ich aktiv handle — allerdings ausschliesslich in klaren Trend-Phasen. Mein Filter: der zugrundeliegende Index oder Sektor muss über seinem 200-Tage-Gleitenden Durchschnitt liegen, und die Steigung dieser Linie muss positiv sein. In dieser Konstellation ist die Bull-Flag eine der konsistentesten Setup-Strukturen, die ich im Backtest gesehen habe.
Was ich nicht mache: Flags als Stand-Alone-Strategie. Selbst die besten Flags haben eine Win-Rate von 60 bis 70 Prozent. Wer sich auf ein einziges Setup verlässt, hat Draw-Down-Phasen von 5 bis 8 Verlusten in Serie — selten, aber möglich. Diese Serien sind psychologisch schwer zu durchhalten, wenn man kein Portfolio aus mehreren unkorrelierten Setups handelt.
Bear-Flags handle ich nur in expliziten Bear-Märkten — also wenn der Index unter seiner 200-Tage-Linie ist und die Marktbreite negativ. In allen anderen Regimes ist die Bear-Flag in meinen Daten kein signifikant profitables Setup. Das ist eine unbequeme Wahrheit, die in Trading-Büchern selten so klar ausgesprochen wird: Bearish-Continuation-Patterns funktionieren langfristig schlechter, weil Märkte langfristig steigen.
Wer Flags als das nimmt, was sie sind — ein konditionales Setup mit moderater Edge, das in einem geeigneten Regime und mit sauberem Volume-Filter einen positiven Erwartungswert hat — bekommt eines der robustesten klassischen Patterns der technischen Analyse. Wer sie als Allzweck-Werkzeug verkauft bekommt, sollte den Verkäufer wechseln.
Sie wollen Flag-Patterns als systematisches Setup mit sauberem Filter-Stack implementieren? Erstgespräch buchen — wir bauen Detection, Volume-Logik und Regime-Filter, die zu Ihrem Universum passen.