Prediction Markets 101

Posted by on December 1, 2025

I have an opinion, how do I bet on it?

Prediction Markets operate similar to stock/option markets in the sense that you're buying a contract that will pay out $1 if you are correct and $0 if you are wrong. You will pay somewhere between 1c and 99c for this contract. The lower the price, the higher the return. For example:

"Will Santa Claus come to town in 2025?"

I buy 100 "yes" contracts at 25 cents each t. That means my bet costs $25 (not including fees, more later). If Santa Claus does indeed come to town, my account will have $100 credited to it, resulting in a net $75 gain. However, if Santa does not come to town, that $25 will be gone and I will have $25 less than when I started betting on Santa futures.

Simple right? Well it gets a little bit more complicated.

What if there aren't 100 "yes" contracts available at 25 cents? What if there's only 50. This is where you have to pay attention and not make the beginner mistake that PMs hope you will make (because their UI defaults to it....). If there's 50 contracts at 25c and 50 more at 45c, and you don't use a limit order, well your cost is now $35 instead of $25 and your return when Santa comes is $65 instead of $75.

Here's a practical example. I want to bet $500 on gas prices going up this week:

Pasted image 20251201184420

"The button said 64 cents". If you look at the box, you'll notice that the odds go from 64c to 66c. That doesn't even account for fees. Well let's see why:

Pasted image 20251201184558

If I wanted to buy $500 worth of contracts at 64c each, that would amount to around 781 contracts ($500 divided by 0.64). But there's only 500 contracts available. If I specify my order in dollars Kalshi will automatically buy you up to whatever consumes $500. In this case it would be 500 contracts at 64c, 50 contracts at 65c, and 231 contracts at 70c. That changes your odds and ROI significantly.

You can avoid this by using a limit order. If you're familiar with stock trading, this is second nature. If you're not, a limit order says "I want to buy X number of contracts at Y price or better". Lets see this same trade, but with a limit order:

Pasted image 20251201185039

Note that the estimated cost is not $500 because this market has fees. If I place this order, with the orderbook same as above, I will immediately buy 500 contracts at 64c (because that's what's being offered at that price currently). I will then have a resting order open for 281 contracts until someone fills the order, my order expires, or the event closes.

Understanding liquidity

How deep/liquid a market is should play a role in how you decide to attack a market. A market with low liquidity that has wide spreads on the Yes/No prices provides some opportunity to make low bids, but you risk not getting filled at all. Maybe that's a good thing, maybe not, that's up to you and the market you're playing. The other risk is that you only get filled if someone knows something you don't (better/insider information, faster processing of news, etc.) That's the "adverse selection" risk you run by posting orders.

The other side of that is the highly liquid markets, usually sports or major elections. In those markets, there's a lot of "information" baked into the price, so you have to be very confident that you know something your counterparty doesn't.

Just who am I betting against anyways?

Understanding your counterparty is a critical part of playing these markets. That allows you to ask the question "what am I doing better than the other guy?" so that you know whether or not you have an edge. There's basically 4 types of counterparties you'll encounter:

  1. Recreational players. Usually only fill orders instead of placing resting orders. Usually in small amounts.
  2. Sharp(er) manual players. Makes you say "oh shit" when your resting order for 2,000 contracts gets filled in one click in a low liquidity market. These folks tend to specialize in a few particular markets. They will make use of limit orders (can usually be spotted with round contract numbers, i.e. 500 contracts instead of 521 contracts).
  3. Amateur bots. Tend to be easily spotted. They'll penny jump (always move their order to the top of book by 1c) and lack guardrails. They don't tend to last long and it's hilarious when someone figures out how to exploit it.
  4. Institutional market makers (SIG, Kalshi Trading, etc.). They are usually providing liquidity with wide bid/asks and are hoping to buy a contract from you for 20c and sell it to someone else for 80c. There is probably a trader overseeing a bot seeding several related markets to make sure it doesn't get too out of line as information enters the market. You need these guys to try to get any price on some of the low liquidity markets. Like I play the TSA weeklies and will see prices like 80c Yes/40c No (20c spread/juice!), but sometimes I know that the actual probability is 90c Yes and I know I'm not going to get filled, so I have to take what I can get sometimes.

Fox, I just want to place a bet. Put the fries in the bag.

If you want to just place a bet quickly and aren't price shopping too hard (i.e. sports where there tends to be deep order books), you still need to use a limit order. If the market switches quickly (i.e. someone scored a touchdown in a live game), then you can get caught with a bad price. Just open up the limit order form, set the price to the current lowest ask if all you want to do is bet, specify the number of contracts so that the estimated cost is close to how much you want to bet and fire. If you don't immediately get filled, you should re-evaluate if you want to leave the rest of the order up or cancel.

Pasted image 20251201185933

3.7 million contracts at 76c represents about $2.8 million dollars of liquidity at that price.

If you're leaving an order up for a period of time because you're trying to get filled at a better price always use an expiration! Some markets have a helper button to set expiration to the "scheduled event start". You should always make sure this is the latest expiration you set. Imagine if you put in an order for the Giants to win at 20c without an expiration. The game goes live and the Pats put up 2 touchdowns in 5 minutes. Are you still happy you paid 20c for the Giants? Fair warning, those buttons have been wrong before, so just make sure that the date/time set is correct.

Are Patriots "Yes" and Giants "No" the same thing?

Close, but not exactly. Two key reasons:

A large portion of rec order flow on sports comes from Robinhood. Robinhood users cannot place limit orders or market make, they can only take. In addition, they can only make "Yes" bets.

Pasted image 20251201191806

So if you're posting a resting order, and you want to buy the Patriots to win, then you should post Giants "No".

The current market price for New England "Yes" is 76c, but lets say I only want to pay 71c. I put in a 71c "No" order on the Giants. You can see my bid highlighted below.

Pasted image 20251201190940

However what this also does is post a 29c ask order on Giants "Yes". Now, a drooling Giants fan who happens to use Robinhood can buy Giants "Yes" for 29c, thus filling my Giants "No" order for 71c.

Pasted image 20251201191103

Confusing? A little, I get it. Just remember if you're betting a market that is available on Robinhood (i.e. sports) and are going to use resting limit orders, place orders on the "No" sides.

The other way they're not the same comes down to the rules of the market. ALWAYS READ THE RULES!!!! Don't be fucking lazy! Do not get rulescucked!

Pasted image 20251201191351

Not like there's ever ties in the NFL right? For sports, the rules tend to be roughly what you'd expect, but you should read them anyways. For non-sports, it's even more important to understand the letter of the rules. For example, if you're betting "Yes, Trump will say the word Biden during his meeting with Putin today", you had better understand that if the meeting is closed to the press, everything will automatically resolve "No".