Step-by-step guide to building a probability convergence chart for Kalshi weather markets using historical trades, VWPA, and time bucketing in Lychee.

Kalshi weather markets often look noisy in real time.
But when you reconstruct them using historical trade data, a pattern emerges:
Prices don’t move randomly — they converge toward outcomes.
This guide shows you how to build that exact chart.
You will learn how to:
No code required.
No infrastructure.
Just structured market data.
You will recreate a chart that shows:
YES probability over time NO probability over time smoothed using VWPA aggregated in 15-minute intervals
This reveals:
how market consensus evolves before settlement
Raw trade data is too noisy to interpret directly.
A single market can have thousands of trades per hour.
So instead of raw ticks, we:
This turns chaotic trading into:
a clean probability convergence curve
Go to Lychee and open:

Then:

category: Kalshi meta categories (Sports, Crypto, Weather, Finance, Politics, Science/Tech, Entertainment, Media, World Events, Esports, Other)ticker: Kalshi's unique identifier for each market. Required to pull trade data for that market.title: Human-readable market name (e.g. “Will NYC high temperature be X on date Y?”). Useful for finding markets of interest.volume: Total contracts traded over the market's lifespan.
Head to Refine Query section.
Select "Where" to apply filter:
WHERE → Category
value → Weather (you would change the value selection to Sports, Crypto, etc depending on the category you are interested in)
This isolates weather-related prediction markets.

Now:
SORT → volume
order → Descending
This arranges your Weather markets from highest volume to lowest volume.
This ensures you are working with liquid markets (important for signal quality).

Select "Limit" from Refine query section
Set the limit value to 30:
LIMIT → 30
Now you have:
Top 30 most actively traded Kalshi weather markets
Setting a limit to your dataset is good practice to limit query size, memory usage and load times.
Name your Sheet and hit "Run Pull" to execute your query.

Your data is now loaded into Data Sheet. Browse the different markets that match your query criteria.
Pick a market like:
“Will NYC high temperature be X on date Y?”
Copy its ticker by double clicking on the cell in the Ticker column and ctrl + c

Now that we know which market we want to analyze. Lets pull all trades placed for this market. In this guides case:
Now switch to Trades in Kalshi Historical Data:
Integrations tab in data sheets. This will open the side panel.
Kalshi Historical to start another request to Kalshi Historical Data
In Kalshi Historical:
TRADESSelect All: to select all columns in the TRADES data base:
trade_id: each trade has a unique trade_id to identify the tradeticker: this is the market ticker, in our case KXHIGHNY-24NOV13-B48.5count: the number of contracts that exchanged hands in each tradeyes_price: the yes_price set for this trade in cents (0-99)no_price: the no_price set for this trade in cents (0-99)
yes_price + no_price = 100 for a given trade i.e. $1taker_side: which side of the trade (yes or no) was playing the role of the takercreated-time: the time that the trade was executed_fetched_at: this is a meta metric when the data was pulled by Lychee. You can mostly ignore it.
Apply query filter:
WHERE → ticker = your selected market
In this guide's case:
WHERE ticker = KXHIGHNY-24NOV13-B48.5
Then:
You now have full trade history for your market.

Time bucketing is a practical data aggregation method that takes high-frequency, tick-by-tick trading data and organizes it into fixed time intervals — like 1-minute, 5-minute, or 1-hour blocks.
Rather than analyzing every single second, it lets traders step back to see the bigger picture, smooth out random short-term noise, and more effectively run technical analysis or quantitative trading strategies.
FUNCTIONS (Σ)
Stats → BUCKET
New Sheet to bucket trades into a new sheet (i.e. not overwrite the original trades and market pulls)Column to Bucket → created_timeBucket Style → Time IntervalsTime Bucket → 15 mins
This converts tick data into time series structure.

Now since we are bucketing multiple rows in 15 minute windows into a single row, we need to aggreagate the columns we are interested in analyzing:
Type: SumValue Column: countGenerated Column: volume (you can name this anything you want)Here for added accuracy we will use a quantitative financial technique called `Volume Weighted Average Price".
Unlike a regular simple average (which treats every price equally regardless of how many shares were traded), VWAP is superior because it weights each price by the actual trading volume at that price. This gives much more importance to prices where heavy volume occurred, making it a far more accurate reflection of the true average price buyers and sellers paid during that time bucket.
Traders rely on VWAP as a key benchmark because it shows where the real money was exchanged, rather than being skewed by low-volume outlier prices.
Type: Value weighted avgValue Column: yes_priceWeight Column: countGenerated Column: vwpa_yes_price (you can name this anything you want)Type: Value weighted avgValue Column: no_priceWeight Column: countGenerated Column: vwpa_no_price (you can name this anything you want)
This represents traded activity per interval.
Create bucket sheetcharts from the tabs above Data Sheet or above the right Side Panel
Set:
Chart → Line ChartX-axis → time_bucket (whatever you named this column. Dropdown is organized by sheet name + column name)Y-axis → yes_priceThen:
no_price
This is:
real-time probability discovery in action
Kalshi weather markets are not static probabilities.
They are:
evolving belief systems shaped by continuous trading
VWPA reveals the true signal behind noisy ticks.
You now know how to:
Once you understand convergence curves, you can extend this into:
If you strip away noise, liquidity, and individual trades:
prediction markets become structured probability time series systems
And VWPA is how you extract that structure.
Learn how Kalshi weather prediction markets work, how pricing is formed, how accurate they are, and what historical data reveals about forecasting behavior.
guidesLearn how to build Kalshi volume charts using historical data in Lychee. Step-by-step guide to creating quarterly, daily, and yearly volume visualizations without coding.
guidesExplore Kalshi trading volume over time with quarterly charts, growth trends, and data-driven insights. Learn what Kalshi volume means and what drives market activity.
guidesLearn how to access, query, and download Kalshi historical data instantly — no coding skills required. Perfect for backtesting prediction markets, visualizing trades, and exporting CSV, Excel, or JSON files.
guidesLearn how to find Polymarket Market IDs, CLOB IDS, token IDs, condition IDs, and slugs. Step-by-step guide to extracting Polymarket metadata for API queries and historical analysis.
guidesLearn how to track Polymarket odds over time, visualize probability changes, and measure probability momentum using interactive charts. Build a live Polymarket odds tracker without coding.
guidesExplore our docs or reach out to our team.