Practice Patterns Is Live — Drill the Setups You Actually Want to Learn

By Vincent Luder
Published May 15, 2026

Pick the chart patterns you want to practise, and we'll find historical charts that contain them. Optionally restrict it to charts where the pattern resolves at the decision moment, so you're drilling 'if I see this, do X' instead of trading some random aftermath. Eight patterns ship today, more on the way.

Practice Patterns kept showing up in the patch notes under "On the Horizon" because the honest answer was: we hadn't built it yet. The card was a placeholder. Nothing in the system actually knew what a bull flag was, or where one ended, or which historical charts contained one.

This branch is where all of that got built. Pattern recognition, the patterns themselves, the practice mode, the whole pipeline. Everything below is new.

What it does, in plain English

You tell us which patterns you want to drill — say, falling wedges and bull flags. We dig through our pool of historical charts, find the ones that contain those patterns, and serve them to you as practice rounds. Same play screen as a regular tournament, same chart, same decision flow. The only difference is the charts in front of you are guaranteed to contain the patterns you asked for.

The reason this didn't exist until now is that "find the charts that contain a bull flag" is harder than it sounds. A computer doesn't know what a bull flag looks like. A trader does, because we've seen thousands of them. So the first job was teaching the computer to see what we see.

Teaching the computer to spot patterns

We did this in two passes.

The first pass is shape matching. You take a textbook drawing of, say, a falling wedge — two lines converging downward — and turn it into a list of points. Then you slide a window across a historical chart and ask, at every position, "does the candle action here trace roughly the same shape as the template?" That gives you a similarity score from 0 to 1. High score, possible match. Low score, nothing to see.

That works fine for some patterns, but not for the classic chart-pattern family. A trader doesn't really think of a channel as a "shape" — they think of it as two parallel rails through the swing highs and swing lows. So the second pass is a trend-line matcher. It finds the swing highs and swing lows on its own, fits a line through each, and then checks the slopes. Two parallel lines going up? Rising channel. Two converging lines going down? Falling wedge. A flat top with a rising bottom? Ascending triangle. And so on.

We tried doing this the lazy way first — fitting lines through every candle's high and low instead of just the swings. The result was rails that drifted through real swings to chase tiny clean sub-sections. A real 30-bar channel would get reported as a perfect 5-bar channel sitting inside it. Switching to swing-points-only is what made the rails land where a human would draw them.

Then there's the snapping. When you draw a trend line by hand, you don't cut through wicks — you kiss the extreme one and let everything else sit underneath. The matcher does the same thing. The fit gives it a starting point, and then it slides the line up (or down) until it just touches the most extreme swing wick. The result feels right because it's drawn the way a trader draws.

The eight patterns shipping today

Each one took its own round of tuning against real historical charts. The bull flag alone went through three iterations before it stopped lighting up on every brief consolidation it found.

PatternDirection
Rising Channelbullish
Falling Channelbearish
Ascending Trianglebullish
Falling Wedgebullish
Bull Flagbullish
Bull Pennantbullish
Bear Flagbearish
Bear Pennantbearish

Bear variants landed in the last few days — they were the final patterns we wanted in for launch. Head & shoulders, double bottom, cup & handle, and friends are next on the list.

How the matching actually runs

The recognition happens offline, not when you click "Start." A background job walks every historical chart we've got, runs each one through the matcher, and saves the results next to the chart — pattern type, where it starts, where it ends, the rails that were drawn. Doing it ahead of time means starting a practice tournament is fast: the database just looks up "which charts have a bull flag tagged?" and pulls them. No waiting for the matcher to chew through hundreds of charts at request time.

The trade-off: when we tune a template or add a new pattern type, we have to re-run the job for those changes to show up on existing charts. That's a known cost and we'll re-run it whenever the matcher gets meaningfully better.

Three design calls on top of the engine

"Chart must end with the pattern" — optional toggle

The most useful drilling mental model is "if I see this pattern complete, what do I do next?" That only works when the chart actually ends with the pattern. If you ask for falling channels and get a chart where the falling channel resolved 40 candles ago and price has been doing something else since, you can't really drill the decision — you're looking at the aftermath, not the moment.

So there's a checkbox. When it's on, we only serve charts where the pattern resolves right at the decision candle — give or take a handful of bars. The pattern is the most recent thing on the chart, you see it complete, and then you make your call. When it's off, you get the broader pool — charts where the pattern shows up anywhere in the visible window. Useful for "I want to see how this pattern behaves in different contexts."

Supply drops when the toggle is on, sometimes a lot — a pattern with 47 candidates in the broad pool might have 8 in the strict pool. The per-pattern count badges update live when you flip the toggle so you can see the math before hitting start. If 8 isn't enough for the rounds you wanted, add another pattern type or drop the rounds count. The UI tells you what's possible.

Skipping is free

A skip penalty makes sense in a regular tournament — you're competing for points, dodging hard rounds shouldn't be free. It makes zero sense in practice. The whole point of drilling a pattern is to engage with the ones you recognise and pass on the ones you don't yet. Penalising the pass turns practice into "trade rounds you aren't ready for just to avoid the hit," which is the opposite of skill-building.

So in Practice mode, skipping costs you nothing. The mode is exploratory by design. Any future practice-style mode we add will keep it that way too — it's locked in.

Rounds are properly shuffled

Worth flagging this one because we caught it late. The way the system picks rounds, it goes pattern by pattern — all the bull flags first, then all the rising channels, then all the falling wedges. Within each group the rounds are random, but the type order was always the same. A player drilling three patterns would clock the grouping after one session and start anticipating what's coming next, which defeats the whole point.

Fixed. The full set of rounds gets shuffled once after they're picked, so the type order is genuinely random round to round.

The UI cleanup that came with it

A few smaller things landed in the same patch because they were in the way:

Action buttons live on the bottom bar now. LONG / SHORT / SKIP in the trading view, ADD / CLOSE in replay, LONG / SHORT in realtime. All three used to float in different places on the chart. Now they share a fixed bottom strip, centered above the playback speed row in replay mode. As a bonus, the chart's x-axis labels no longer clip beneath them — the chart height now properly reserves space for the bar.

Tournament Select got two rows. Ranked and Practice Patterns sit up top — the two modes that need a bit more visual presence are paired together as a centered hero row. Singleplayer, Real-time, and Private Seasons live underneath. The old single 4-column row never scaled well to bigger screens and felt like a card index instead of a menu.

Pattern tiles match the timeframe tiles. In the Practice setup, the pattern selector used to be big paper-style cards with descriptions and badges. The timeframe selector was compact button tiles. Two different selector styles on the same screen. They share one tile design now — pattern name on top, snapshot count below, greyed out when supply is zero. The "Chart must end with the pattern" toggle moved inside the patterns section because it's a refinement of pattern selection, not its own concept.

What's next

A few obvious paths from here:

  • More patterns: head & shoulders, double bottom, cup & handle. The template system was designed so adding one is a single data entry, no engine changes. Whatever the community shouts loudest for, we'll pick up first.
  • Drawn targets: each detected pattern already carries the textbook projection (pole height for flags, channel width for channels, etc.). The chart doesn't draw these yet but the data is there — turn it into "here's where the pattern says price is going" and you've got a built-in target line per round.
  • Re-running the recognition more often as we tune individual patterns, so improvements roll through to charts that were tagged before the tuning.

Go drill some patterns. Try the toggle. If you find a pattern type where the strict pool runs dry too fast, or the matcher is firing on something that doesn't look like the pattern to you — message us. Those are exactly the signals that decide where the next round of tuning goes.