DEV Community

Ken-Mutisya
Ken-Mutisya

Posted on

"Two Markets Disagree About the Fed. Reading Both Without an API Key"

There are two independent ways to ask what the Federal Reserve will do at its next meeting, and today they give different answers. Neither of them needs an API key, which makes the disagreement easy to watch in code.

The first source: a prediction market

Polymarket runs real money markets on the September Fed decision. Pulled this morning, the market on a 25 basis point hike sits at 56.5%, the market on no change at 38.5%, and roughly $1.25M changed hands on that second market in 24 hours.

The useful part is that each market is a plain JSON object once you find it:

{
  "question": "Will the Fed increase interest rates by 25 bps after the September 2026 meeting?",
  "outcomes": [{ "name": "Yes", "price": 0.565 }, { "name": "No", "price": 0.435 }],
  "volume24hr": 422177.19,
  "liquidity": 118432.5,
  "bestBid": 0.562,
  "bestAsk": 0.568,
  "endDate": "2026-09-17T00:00:00Z"
}
Enter fullscreen mode Exit fullscreen mode

Prices are probabilities. A price of 0.565 is the market saying 56.5%. Bid and ask matter more than they look: a wide spread means the quoted probability is softer than it appears, and volume tells you whether anyone is actually backing it.

The second source: interest rate futures

The other answer comes from 30 Day Federal Funds futures, which the exchange publishes as a daily settlement file. A contract settles against the average effective rate over its month, so the price carries a rate: subtract it from 100.

That average is the trap. A month holding an FOMC meeting is a blend of the old rate for the days before the decision and the new one after, so you cannot read it as a single number. If the decision lands on the 28th of a 30 day month, only two days sit at the new rate, and solving for that rate divides by those two days. Any error in your inputs gets multiplied about fifteen times, and chaining meetings compounds it. My first version produced a policy rate of negative 1.47%, which is a good sign your arithmetic has left reality.

The fix is to stop dividing where you do not have to. A month with no meeting in it prices one constant rate for the whole month, so when the month after a decision is clean, its implied rate simply is the post meeting rate. No division, nothing to amplify. Only fall back to solving the blend when the calendar gives you no clean month, and refuse it when too few days remain.

Why the gap is the interesting part

Run both and you get two probabilities for the same event from two unrelated crowds: one betting cash on an outcome, one hedging rate exposure. Today they are several points apart on a September hike.

That gap is the signal. It is not a trade recommendation, it is a question worth asking: which crowd is better informed about this particular event, and does the gap close as the meeting approaches? You can only ask it if you are sampling both on a schedule, because both move constantly.

A note on expressing the answer

One habit worth copying from the futures side. An implied change of 7.5 basis points is not a "7.5 basis point hike", because no such decision exists. Rate moves come in 25 basis point steps. That number is roughly a 30% chance of one 25 point move and a 70% chance of nothing at all. Convert to the units the decision actually comes in, or your output quietly implies something that cannot happen.

Both sources are public HTTP endpoints returning JSON or CSV. No keys, no accounts, no browser. If you want the prediction market side already normalised into rows, I keep one running here: Polymarket Prediction Market Tracker.

When two markets disagree about the same event, which one do you trust more, and why?

Top comments (0)