How to Build a Probability Convergence Chart Using Kalshi Historical Weather Data (VWPA Guide)

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

May 20, 20266 min readBy misterrpink
How to Build a Probability Convergence Chart Using Kalshi Historical Weather Data (VWPA Guide)

How to Build a Probability Convergence Chart Using Kalshi Weather Data

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:

  • connect to the largest Kalshi historical datasets avaiable anywhere
  • pull Kalshi historical market data
  • pull Kalshi historical trade data
  • filter weather markets
  • rank markets by volume
  • reconstruct historical trade activity
  • aggregate trades into 15-minute time buckets
  • compute VWPA - style probability curves using volume weighted average prices.
  • bucket trades into time intervals
  • visualize probability convergence over time
  • build an interactive probability convergence chart

No code required.

No infrastructure.

Just structured market data.


What you are building

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


Why this matters

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:

  • smooth price using VWPA
  • aggregate into time buckets
  • reconstruct probability over time

This turns chaotic trading into:

a clean probability convergence curve



Step 1 — Connect to Kalshi Historical Data

Go to Lychee and open:

  • Kalshi Historical Integration

Create API connection screen

Then:

  • Select Markets

Select Markets

  • Choose columns:
    • 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.

Choose Markets Columns

Step 2 — Filter Weather Markets

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.

Filter Weather Markets

Step 3 — Sort by Volume (find meaningful 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).

Sort Your Data

Step 4 — Limit dataset

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.

Top 30 Most Active Markets

Step 5 — Select a market

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

Select your market to analyze

Step 6 — Pull historical trades

Now that we know which market we want to analyze. Lets pull all trades placed for this market. In this guides case:

  • Title: "Will the high temp in NYC be 48-49° on Nov 13, 2024?
  • Ticker: KXHIGHNY-24NOV13-B48.5

Now switch to Trades in Kalshi Historical Data:

  • Select Integrations tab in data sheets. This will open the side panel.
    • This side panel allows you to make a new data pull request within your current Project workspace
  • Select Kalshi Historical to start another request to Kalshi Historical Data

Pull Historical Trades

In Kalshi Historical:

  • Select TRADES
  • Select Select All: to select all columns in the TRADES data base:
    • trade_id: each trade has a unique trade_id to identify the trade
    • ticker: this is the market ticker, in our case KXHIGHNY-24NOV13-B48.5
    • count: the number of contracts that exchanged hands in each trade
    • yes_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)
      • note yes_price + no_price = 100 for a given trade i.e. $1
    • taker_side: which side of the trade (yes or no) was playing the role of the taker
    • created-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.

Select Trades columns

Apply query filter:

WHERE → ticker = your selected market

In this guide's case:

  • WHERE ticker = KXHIGHNY-24NOV13-B48.5

Apply query filters

Then:

  • create New Sheet, Name your sheet
  • run query

You now have full trade history for your market.

View fill trade history

Step 7 — Bucket trades into time intervals

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.

  • Open: FUNCTIONS (Σ)

Selecting Functions

  • Select StatsBUCKET

Navigate to Bucketing Operations

  • In the Bucket view, set:
    • New Sheet to bucket trades into a new sheet (i.e. not overwrite the original trades and market pulls)
    • Column to Bucket → created_time
    • Name the new bucket column anything you want, we are going with "date"
    • Bucket StyleTime Intervals
    • Time Bucket15 mins
      • This aggregates our trades into 15 minute windows

This converts tick data into time series structure.

  • You may also name your new sheet for clarity

Execute on bucketing operations

Step 8 — Aggregate volume

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:

  • Select Aggreatagions and set the following:
    • Aggreagation 1: get the total volume traded during each 15 minute time interval
      • Type: Sum
      • Value Column: count
      • Generated Column: volume (you can name this anything you want)

Step 9 — Compute VWPA (key step)

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.

  • Aggregation 2: Calculate Volume Weighted Average Yes_Price for each 15 minute window
    • Type: Value weighted avg
    • Value Column: yes_price
    • Weight Column: count
    • Generated Column: vwpa_yes_price (you can name this anything you want)
  • Aggregation 3: Calculate Volume Weighted Average No_Price for each 15 minute window
    • Type: Value weighted avg
    • Value Column: no_price
    • Weight Column: count
    • Generated Column: vwpa_no_price (you can name this anything you want)

Compute VWPA

This represents traded activity per interval.

  • Click Create bucket sheet

Step 10 — Interpret convergence (Building Chart)

  • Select charts from the tabs above Data Sheet or above the right Side Panel

Charting Convergence

Set:

  • ChartLine Chart
  • X-axistime_bucket (whatever you named this column. Dropdown is organized by sheet name + column name)
  • Y-axisyes_price

Then:

  • add second line → no_price

Visualizing yes_price and no_price charts

  • Use the design panel to design the chart as you desire

What you now see:

  • early: noisy disagreement
  • mid: information incorporation
  • late: sharp convergence
  • final: settlement-level consensus

This is:

real-time probability discovery in action

Key Insight

Kalshi weather markets are not static probabilities.

They are:

evolving belief systems shaped by continuous trading

VWPA reveals the true signal behind noisy ticks.

What to build next

You now know how to:

  • pull historical Kalshi markets
  • reconstruct trade history
  • aggregate market probabilities
  • calculate VWAP-style pricing
  • visualize convergence over time

Once you understand convergence curves, you can extend this into:

  • volatility clustering analysis
  • forecast vs market divergence
  • regime detection (trend vs mean reversion)
  • cross-city weather comparison
  • liquidity analysis
  • probability forecasting systems
  • prediction market research

Final takeaway

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.

Related content

Kalshi Weather Prediction Markets Explained: How They Work, How Prices Are Set, and What Historical Data Reveals

Learn how Kalshi weather prediction markets work, how pricing is formed, how accurate they are, and what historical data reveals about forecasting behavior.

guides

How to Build Kalshi Volume Charts Using Historical Data (Step-by-Step Guide)

Learn 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.

guides

Kalshi Volume Explained: Quarterly Trends, Historical Growth, and Market Activity Data

Explore Kalshi trading volume over time with quarterly charts, growth trends, and data-driven insights. Learn what Kalshi volume means and what drives market activity.

guides

How to Get Kalshi Historical Data (CSV, EXCEL, No-Code Guide)

Learn 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.

guides

How to Find Polymarket Market ID (CLOB, Token, Condition & Slug Explained)

Learn 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.

guides

How to Track Polymarket Odds Over Time (Visualize Probability Changes)

Learn 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.

guides

Need help?

Explore our docs or reach out to our team.