League and market quality filters
These filters decide where your strategy hunts (which leagues, groups and teams) and how good the betting market is there. A tour of the scoping and market-quality family, from explicit league lists to the Elite-only league_line_move.
These filters choose your battlefield
Your entry rule is sharp. The odds range is tight, the streak condition is well chosen, the backtest looks healthy. Then you widen the strategy to every league in the sport and the curve flattens. Nothing was wrong with the rule; it was answering the right question in the wrong place. Most filters in the strategy builder judge a single matchup: is this team on a streak, is the price in range, how did the last head-to-head go. The family in this article works one level up. It decides where your strategy is allowed to look at all (which leagues, which groupings, which teams) and how good the betting market is in those places. These filters choose your battlefield; every other filter chooses your battles.
The family splits cleanly in two. Three scoping filters, league, group and team_name, draw the map. Five market-quality filters, vig_range, spread_cover_rate, league_liquidity, league_result_rate and league_line_move, grade the terrain you drew.
Drawing the map: league, group and team_name
All three scoping filters are available on every plan.
league is the explicit list: you name the leagues, and the strategy only considers matches from them. Precise, but static. If a new competition launches next season, your strategy is blind to it until you open the editor and add it by hand.
group is the maintenance-free alternative. A group is a named league grouping. For esports it is the game title (every CS2 league sits under CS2, every Dota 2 league under Dota 2); elsewhere it is a competition or region grouping. What sets it apart from a hand-picked list is that groups are dynamic: when a new league joins the group, your strategy inherits it automatically. If your real idea is "this works in CS2" rather than "this works in the four CS2 leagues I happened to know about", group states that idea honestly in one condition, and it never goes stale.
team_name matches one of the teams in a matchup against a normalized name. It exists for genuinely team-specific angles: a rule you only trust for one club, or a hypothesis about how the market prices a particular side. Know what it costs you. A single team plays a limited number of matches, so both your backtest sample and your live pick volume will be small.
Grading the terrain: vig and spread cover
The market-quality half asks a different question: inside the territory you scoped, how well does the market work? The filters below are Pro-tier.
vig_range keeps a matchup only when a team's average closing vig on a market's main line (moneyline, spread or total) over its last 10, 20 or 50 matches falls inside your range. The vig is the bookmaker's margin baked into every price; Understanding odds and vig unpacks it fully. What matters here: low vig means a cheap market. Every bet pays the margin before your edge earns anything, so a vig ceiling is the shortest way to write "I only bet where the toll is low" into a strategy.
spread_cover_rate measures the share of a team's last 10, 20 or 50 matches in which it covered the closing spread, with pushes counted as non-covers. Read it for what it is, not for what it sounds like: it is not a winning percentage. A team can win ten straight and cover nothing, because the market keeps raising the bar it has to clear. Covering the spread means beating expectations, not opponents, which makes this a market-relative form measure. A team that keeps covering its spreads is a team the market is still underrating.
League profiles: liquidity and result structure
The next two are league-level readings, also Pro-tier.
league_liquidity filters on a league's average closing max-bet limit: the cap Pinnacle publishes on how much it will accept, and one of the most honest signals of how seriously the market takes a league. High limits mark liquid, battle-tested markets; low limits mark thin ones where the closing price itself is shakier. Two practical caveats: limits are archived only from roughly 2026 onward, and leagues with no recorded limit data are excluded by the filter rather than treated as zero. The deeper story of what limits reveal is in Liquidity, limits, and what they tell you.
league_result_rate profiles how a league tends to resolve: its home, draw or away rate over its last 50 settled matches, held inside a range you set (draw rates are football-only). This is the filter for structural league angles. Some football leagues are persistently draw-heavy; some competitions carry a strong home advantage. If your strategy leans on such a trait, say an unders-flavored football angle that lives best in high-draw leagues, this filter targets leagues by that trait instead of by name.
The Elite one: league_line_move
league_line_move is the only filter reserved for the Elite tier, and it earns that slot. It measures a league's mean absolute move, from open to close, of the home moneyline's implied probability, averaged over the league's last 50 matches. Read it as a truthfulness test for the league's opening prices. In an efficient league, the open is already close to right and barely moves. In a soft league, the open carries guesswork and the market spends the whole pre-match window correcting it: large average moves.
A high reading flags leagues where opening prices are routinely wrong. That is exactly the hunting ground for a bettor chasing closing-line value: bet early, and if you are on the right side of the error, watch the close drift toward you. Think of league_line_move as the league-picker for CLV hunters. Why the close is the benchmark worth beating is the subject of The closing line and market efficiency.
A worked example
Here is how the family fits together in practice. Suppose your idea is a totals angle in CS2.
Start with scope: one group condition set to CS2. Every CS2 league, current and future, is now in play, with no list to maintain as tournaments come and go.
Then grade the terrain. Esports leagues vary enormously in how seriously the market takes them, so add a league_liquidity floor: leagues where the average closing limit is too low get skipped, which keeps your strategy out of markets where the closing price, and therefore your backtest, is mostly noise. Finally, add a vig_range ceiling on the totals market, so the bets you do take only pay a low margin.
Notice that none of this says anything about which matches to bet. That is the point. These three conditions define a battlefield (the whole CS2 scene, minus its thin and expensive corners) and leave your form, scoring and odds filters to pick the battles inside it.
Where to go next
- The closing line and market efficiency: the benchmark behind league_line_move, and why CLV matters.
- Liquidity, limits, and what they tell you: what a max-bet limit reveals about a market.
- Filters overview: the full catalogue of filters, family by family.
继续学习
浏览全部文章
The filter palette: an overview
A map of all 24 filters: what each one tests, how they combine, which plan tier unlocks them, and how to pick the few that actually belong in your strategy.

Odds and market filters
A deep dive into Odds range and Favorite side: what each one tests, how Odds range adapts to all four markets, and why the price window you choose shapes everything else about your strategy.

Form and scoring filters: the team-history family
Five Pro-tier filters that read a team's recent results and goals. How streaks, rates and averages work, and why raw form only pays when you combine it.