Wolfe Wave Scanner Pro
Searches a depth window of confirmed swings for every distinct, non-overlapping 5-point Wolfe Wave wedge — a contracting, alternating channel where point 5 tests the 1-3 trendline — not just the single highest-scoring one. Each pattern found projects its own EPA (Estimated Price at Arrival) target from line 1-4 at the time lines 1-3 and 2-4 converge, and is tracked live independently through its own lifecycle until it hits target, invalidates, or expires.
Wolfe Waves are strongly interpretation-dependent — small changes in swing strength or search window shift which geometry gets found. Treat this as a structural setup finder with a quality score, not a signal machine: “pattern found” means “a Wolfe-shaped geometry exists here, worth checking against context,” not “enter now.”
Features
- Alternating swing engine (
ta.pivothigh/ta.pivotlow) with bounded history - Best-of-window search: every valid point-5 anchor within
Suchbereich letzte Swingsis tried (a Wolfe wave is often already several swings old by the time it completes), and for each, points 1-4 are chosen combinatorially from all valid non-consecutive swings — a wave spanning e.g. swings 1,3,5,7,9 is evaluated too, not just the literal last 5 swings - Tracks up to
Max. gleichzeitige Patternsdistinct, non-overlapping valid patterns at once, each with its own drawings and invalidation state — a second genuinely separate Wolfe wave elsewhere on the chart is no longer discarded just because it scores lower than the first one found. An overlapping candidate only replaces an already-tracked pattern at that spot if it scores higher - Continuous 0-100 score across nine criteria: structure, contraction, channel/traversal, apex convergence, directional point-5 zone, risk/reward, timing, leg-time symmetry, and leg purity — structure, contraction, channel, boundary hold, leg purity, P5-zone, and apex convergence are also hard-gated into validity, not just scored
- EPA target is the price on line 1-4 at the apex time (where lines 1-3 and 2-4 converge, both drawn bold and stopping exactly there — no dangling infinite extension). The 1-4 line itself is drawn visibly through points 1 and 4 up to that same apex bar, and the vertical apex marker drops from that exact point to point 5 — one shared point everywhere, label/dashboard/drawing included
- Live pattern lifecycle: each tracked pattern runs
ACTIVE→PARTIAL_SUCCESS→TARGET_HIT/EXPIRED/INVALIDATED, with a live-updating EPA target line (recomputed from line 1-4 every bar), a one-time 50%-to-target partial marker, anAblaufpuffer nach ETA (Bars)expiry cutoff, and a dynamic invalidation level that tracks the live 1-3 line forDynamische 1-3-Invalidierung (Bars)bars before freezing —Invalidierung nur per Close(default on) chooses between a confirmed close beyond the level or an intrabar high/low breach - Near-miss candidate marker (
Watchsignal, visual only, requires a real bull/bear structure) plus a dashed candidate wedge (same 1-3/2-4 boundaries as a real pattern) and a score-breakdown debug table for tuning thresholds - Light-theme dashboard (status, active pattern count, best score, bias, live EPA, EPA @ ETA, invalidation level) — Bias/EPA/Invalidation reflect the best currently tracked pattern when one exists, the raw search candidate otherwise
Invalidierung anzeigen(default off) draws the invalidation level line itself; invalidation tracking (the pattern still gets removed/alerted when the level breaks) always runs regardless of this toggle- Optional
Reward als Pflichtfilter(default off) to hard-require a minimum reward instead of only scoring it
Scoring
| Criterion | Points | What it checks |
|---|---|---|
| Structure | 20 | Core, non-negotiable shape: sequence alternates high/low and point 3 undercuts/exceeds point 1, point 5 extends beyond point 3 (lows declining for a bull setup, highs rising for bear) |
| Contraction | 15 | Channel (line 2-4 vs. points 1/5) narrows by at least 30% end-to-start and narrows monotonically through the midpoint (no bulging outward around points 2-4); the 1-3 and 2-4 boundaries trend the same direction and their slope magnitudes are within a 3x ratio of each other (rules out a near-flat line paired with a near-vertical one). Quality maxes out once the contraction ratio reaches the 70% gate threshold and fades to 0 as the channel stops contracting at all |
| Channel | 10 | Point 4 sits at least 0.5 ATR off the 1-3 line, and the completed point-4-to-point-5 leg crosses at least 60% of the remaining channel width (traversal45) — a shape nicety, scored (and gated) separately so it can’t zero out Structure on its own |
| Convergence (apex) | 10 | Lines 1-3 and 2-4 converge ahead of point 5, within 2× the pattern’s own width; quality peaks when the apex lands roughly 75% of the pattern’s width past point 5 |
| P5-Zone | 15 | Point 5’s directional offset from the 1-3 trendline: an overshoot beyond the line, up to P5 max. Overshoot ATR (default 1.0), scores highest around a modest 0.5 ATR overshoot; staying inside the wedge, up to P5 max. innerhalb ATR (default 0.75), scores lower the deeper inside it sits |
| Risk/Reward | 15 | Reward (EPA target vs. point 5, capped to Max. Zielentfernung ATR-Multiple) divided by risk (point 5 vs. the invalidation level); quality scales linearly with the resulting R-multiple, capped at 2R |
| Timing | 5 | Legs are monotonically spaced, the final leg isn’t disproportionately long relative to the rest, and no single leg (including a middle one) consumes more than 40% of the pattern’s total duration; quality maxes out once the largest leg is at or under 25% of total duration and fades to 0 as it approaches 50% |
| Symmetry | 5 | Corresponding legs (1-2 vs. 3-4, 2-3 vs. 4-5) don’t diverge too far in duration; quality fades to 0 as the divergence ratio approaches the 45% gate threshold |
| Leg Purity | 5 | No swing skipped by the combinatorial point selection deviates from its enclosing leg’s straight path by more than Max. Zwischen-Swing / Leg (default 50%) of that leg’s own amplitude — rejects a “clean” 5-point chain that quietly ignores a near-equal countermove |
Every criterion above is continuous (0-100% of its own points), not a binary pass/fail split. A pattern only fires when, in addition to the weighted score clearing Mindestqualität, every one of the following hard gates also passes: Structure, Contraction, Channel, Boundary Hold (below), Bar Boundary (below), Leg Purity, P5-Zone, and Convergence — so the seq-agnostic criteria (Timing, Symmetry) can no longer carry a broken channel or a non-converging apex across the line on score alone. Reward als Pflichtfilter (off by default) additionally requires Risk/Reward to clear Mindest-Risk/Reward (default 1.5) instead of just contributing its 15 points.
Boundary Hold (veto, not scored). A real Wolfe wave only tests the 1-3 trendline once, at point 5 — but the channel has to hold on both sides, not just that one. The scanner checks every swing strictly between points 1 and 5 — including ones the combinatorial search skipped when picking a non-consecutive point selection — against both the 1-3 and the 2-4 boundary, using Swing-Boundary-Toleranz ATR (default 0.35). If price already broke through either boundary earlier (e.g. a sharp plunge-and-recovery between points 3 and 4 on the 1-3 side, or a breach of the 2-4 side that never gets its own dedicated “test” the way point 5 tests 1-3), the pattern is rejected outright: the five chosen points can score well on their own while the actual price path between them already violated the channel the wave depends on.
Bar Boundary (veto, not scored). A separate, finer check (Bar-Boundary-Toleranz ATR, default 0.25) scans every single bar — not just the registered swings — between points 1 and 5 against both boundaries, catching a poke through the channel that never formed its own swing. Point 5’s own bar is exempt from the 1-3 side of this check (it’s graded by P5-Zone instead, which allows a deliberate overshoot); the 2-4 wall still applies to it like any other bar.
P5-Zone is directional and gated, not just scored. Point 5 is no longer measured as a symmetric distance from the 1-3 line: overshooting beyond it and staying inside the wedge are graded — and tolerated — differently, via separate P5 max. Overshoot ATR and P5 max. innerhalb ATR inputs. A point 5 outside either tolerance isn’t testing the trendline, it’s blowing through it (or never reaching it) — the same class of violation as a mid-pattern boundary break, just at the last point instead of an earlier one.
Channel is gated, not just scored. Channel also hard-blocks valid now: point 4 must be a meaningful opposite-boundary excursion (≥0.5 ATR off the 1-3 line) and the point-4-to-point-5 leg must cross most (≥60%) of the remaining channel — a point 5 that ends up deep inside the channel instead of completing the traversal to the opposite wall isn’t a finished wedge.
Leg Purity is gated, not just scored. The combinatorial search can select a “clean” chain of 5 points while skipping an intermediate swing that moved almost as far as the leg it’s nested inside — effectively hiding a real countermove. Leg Purity rejects any selection where a skipped swing’s deviation from its enclosing leg’s straight path exceeds Max. Zwischen-Swing / Leg (default 50%) of that leg’s own amplitude.
Convergence (apex) is gated, not just scored. Convergence also hard-blocks valid now: if the 1-3/2-4 wedge has already converged at or before point 5 (etaOk false), the pattern isn’t a completed Wolfe wave — and drawing it anyway is actively misleading, since the fallback apex projection extrapolates the same already-converged slopes further out and can go wildly, even negatively, off in price.
Pattern Lifecycle
Once a pattern fires it enters state ACTIVE and is tracked, every bar, independently of every other tracked pattern. Each bar it’s checked against three mutually exclusive terminal states, in this order, plus one interim marker:
- INVALIDATED — the invalidation level breaks. For the first
Dynamische 1-3-Invalidierung (Bars)bars (default 10) after point 5, that level tracksmin/max(point 5, the live 1-3 line) ± Invalidierungs-Puffer ATR(default 0.5 ATR) bar by bar; afterwards it freezes at its last value. Depending onInvalidierung nur per Close(default on), either a confirmed close beyond the level or an intrabar high/low breach triggers this. FiresWWSP · INVALIDATED. - TARGET_HIT — price reaches the live EPA target, recomputed from line 1-4 every bar (not the frozen apex projection used for scoring/drawing). Fires
WWSP · EPA TARGET HIT. - EXPIRED — price hasn’t hit the target within
Ablaufpuffer nach ETA (Bars)(default 10) bars past the pattern’s computed apex bar. FiresWWSP · EXPIRED. - PARTIAL_SUCCESS — a one-time interim marker that does not remove the pattern from tracking: fires once price reaches the halfway point between point 5 and the live EPA target, on any bar that didn’t already exit into one of the three states above. Fires
WWSP · PARTIAL SUCCESS.
Any of the three terminal states draws a label, removes the pattern from tracking (freeing a slot for a new one), and fires its alert; Abgeschlossene/ersetzte Patterns behalten controls whether that pattern’s drawings are deleted at that point or kept on the chart as history.
Multiple patterns
Max. gleichzeitige Patterns (default 5, capped at 8) caps how many valid patterns are tracked and drawn at once — each owns up to ~9 lines and 6 labels, so the cap also bounds drawing-object growth (Suchbereich letzte Swings is similarly capped at 24 to bound the combinatorial search cost). Each search pass finds the best-scoring valid combination per point-5 anchor in the window, not just the single overall best — so two non-overlapping Wolfe waves elsewhere on the chart both surface instead of only the higher-scoring one. Overlap is checked on the [point 4, point 5] completion leg only, not the full [point 1, point 5] span — since point 1 can sit anywhere within Suchbereich letzte Swings, two well-separated completions often still share the same early swings for points 1-2, and comparing the full range would let one wide pattern block every other candidate in that stretch. A margin — a third of the larger pattern’s own total width — is added to both patterns’ ranges before comparing, so two same-direction patterns crammed a few bars apart still count as overlapping even if their exact completion legs don’t literally touch. Overlap only ever competes patterns of the same direction for a slot — a bull and a bear pattern occupying the same bars are two different scenarios, not rivals. If a new candidate’s completion leg overlaps an already-tracked, same-direction pattern’s, it only replaces it when it scores higher (and isn’t the exact same pattern already tracked); otherwise it’s skipped. After every search, a cleanup pass checks all tracked patterns pairwise and removes the lower-scoring one of any same-direction, overlapping pair still left over — this catches overlap chains (A overlaps B, B overlaps C, but A and C don’t directly overlap) that the one-at-a-time insertion check alone can miss.
Once all Max. gleichzeitige Patterns slots are full, a new non-overlapping candidate evicts the currently weakest (lowest-scoring) tracked pattern if it scores higher — otherwise the first patterns to fire that happen not to invalidate for a while would permanently occupy every slot and silently block every better candidate found afterward. Abgeschlossene/ersetzte Patterns behalten controls whether a pattern’s drawings are deleted once it’s invalidated, hits target, expires, is replaced, or is evicted, or kept on the chart as history.
Debug
Enabling Score-Breakdown Debug-Tabelle shows a table with the current best-in-depth candidate’s pass/fail state per criterion and its running score against Mindestqualität — useful for tuning thresholds without guessing why a candidate didn’t fire. Kandidat-Mindestscore (Watch) controls the near-miss marker’s lower bound.
Enabling Pine-Logs aktivieren (Fehlersuche) (off by default) emits WWSP SWING/WWSP SEARCH/WWSP PATTERN FIRED/WWSP PATTERN REPLACED/WWSP PATTERN EVICTED/WWSP INVALIDATED/WWSP TARGET HIT/WWSP EXPIRED/WWSP PARTIAL lines to the Pine Logs pane, including how many 5-point combinations were evaluated per search and the full per-criterion breakdown (including boundaryHold) of the single best-in-window candidate — useful when a symbol/timeframe combination seems to produce no signals at all, or to check why a specific candidate wasn’t tracked (score too low, boundary broken prematurely, replaced by/skipped in favor of an overlapping higher-scoring one, or skipped because the cap was full and it didn’t beat the weakest tracked pattern).