Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Board Texture Studies

This tutorial shows how to measure the distribution of board textures a hand encounters.

Suit Profile on the River

Starting from a two-tone flop, how many suits appear on the river on average?

select avg(boardSuitCount(river))
from   game='holdem', hero='As9s', villain='*', board='2s3sJh'

With two spades on the flop, the river often stays three-suited and sometimes narrows to two.

Frequency of Monotone Rivers

How often does the river complete a single-suit board?

select count(monotoneBoard(river)) as pct_monotone_river
from   game='holdem', hero='*', villain='*', board=''

Pair Frequency by Street

select count(pairedBoard(flop))  as flop_paired,
       count(pairedBoard(turn))  as turn_paired,
       count(pairedBoard(river)) as river_paired
from   game='holdem', hero='*', villain='*', board=''

Each selector produces an independent probability, and together they show how pairing accumulates across streets.

Straight-Possible Boards

select count(straightBoard(river)) as pct_straight_possible
from   game='holdem', hero='*', villain='*', board=''

Composing Board Texture with Equity

Hero’s equity on flushing rivers, holding suited AK:

select avg(equity(hero))
from   game='holdem', hero='AwKw', villain='**'
where  flushingBoard(river)

A Texture-Range Filter

Use boardInRange(...) to limit the simulation to a specific class of boards:

select avg(equity(hero))
from   game='holdem', hero='AwKw', villain='**', board='*'
where  boardInRange('AwKxQy****')   -- AKQ-high boards, any rest