Skip to content
Developer docs
Guide

Closing line value on Polymarket

Buy at 52¢, read 61¢ at the close, and you have +17.3% of closing line value before the game starts. Polymarket publishes no closing instant, so you pick the reference yourself, and fees come off the gross number.

What closing line value measures

Closing line value compares the price you paid with the price at a reference instant near the end of trading. If the market moved toward your side after you bought, you got the better number.

Settlement grades the result. Closing line value grades the price. The result needs the event to finish, and one event is one coin flip. The price is readable the moment trading ends, and it tells you what everybody else concluded after you had already committed.

Sportsbooks run this exact test on their customers. A bettor who keeps beating the closing line costs the book money, so the book limits that account. Prediction markets do not limit anyone, so you have to run the test on yourself.

The chart above is one trade: 500 YES shares at 52¢ 6 hours before the reference instant, which commits $260, against a closing price of 61¢. That is 9¢ a share, and the next section turns it into a percentage.

The formula and the sign convention

Closing line value in percent is (close / entry - 1) * 100, where entry and close are both prices between 0 and 1. One formula covers every case.

A share bought at 52¢ pays $1, so the odds you obtained are 1 / 0.52 and the closing odds are 1 / 0.61. Divide the first by the second, subtract 1, and the fraction reduces exactly to close / entry - 1. The price ratio and the odds ratio give the same number, so you never need to convert to decimal odds first.

Positive closing line value means the market moved toward the side you backed. Buy at 52¢ and close at 61¢, and you get (0.61 / 0.52 - 1) * 100 = +17.3%. Buy at 34¢ and close at 41¢, +20.6%. Buy at 52¢ and close at 44¢, -15.4%, and nothing has been decided yet: the price you paid was already worse than the market's final pre-game answer.

State the sign convention once and hold it. A number without a stated convention is unreadable, because the reader cannot tell whether a positive value means agreement or disagreement.

Entry and close need an explicit price basis

The spread lands on the entry side. Best bid 51¢, best ask 53¢, midpoint 52¢: take the offer and you pay 53¢. That 1¢ half-spread sits inside every closing line value figure as a fixed negative.

There are 2 honest fixes. Carry the half-spread as a separate execution cost, or compare your fill to the close and call the result a net number. Pick one and use it for every trade you measure.

Pick of the Day measures its closing line value from the price the pick displayed. The entry is the last Polymarket price-history point at or before the moment the pick's price was frozen, which is at or after publication, and it counts only when it matches the price the pick displayed. The close is a later price-history point, after the entry and before kickoff, read on the same price basis.

A pick with no frozen price, or whose provider entry does not match the displayed price, is not measured. The metric never swaps in a price the reader did not see.

Where the close sits on Polymarket

Polymarket publishes 5 close-side timestamps, and not one of them is a forward-looking instant when trading stops: endDate, endDateIso, umaEndDate, closedTime, and acceptingOrdersTimestamp. Reading any of them as the close gives you the wrong number.

Here is one live sports market, read on August 7, 2026 at 6:20pm UTC. Its gameStartTime was 3pm UTC the same day. Its endDate was 9pm UTC, 6 hours after the scheduled start. Its endDateIso was 2026-08-07, a date with no time in it. Its acceptingOrdersTimestamp was August 5, which is when the book opened rather than when it closes. Its closedTime was null, and 3 hours after the scheduled start the market still reported closed as false and acceptingOrders as true.

The book stays open through the game, so you choose the reference instant yourself. For a sports market, gameStartTime is the defensible choice, because it is the last moment before the event starts moving the price. closedTime works after the fact, and it lands at or after resolution, so it already contains the outcome and grades nothing. For a market with no gameStartTime, pick the moment before the scheduled announcement and write that rule down.

2 details will break a script. acceptingOrders can be null, and a null means unknown rather than closed. And an average built from mixed reference instants measures nothing at all, so apply the same rule to every trade in the set.

Cents and percent disagree

The two forms rank trades differently, and the gap is widest at the ends of the price range.

Take the same 2¢ move at 3 entry prices. From 5¢ to 7¢ is +40%. From 50¢ to 52¢ is +4%. From 90¢ to 92¢ is +2.2%. Identical 2¢, 3 different percentages.

The percentage form is unstable near zero. A move from 1¢ to 2¢ prints +100% on a position that gained 1¢ per share. The cent form is stable there, and it does not scale with the price.

Use cents when you compare trades across price levels, and percent when you want a return-like number that is comparable to a yield. Say which one you used, every time.

A winning trade can have negative closing line value

The price and the result can disagree on any single trade, and they often do.

Trade A: you buy at 60¢, the price at your reference instant is 55¢, and the market settles YES. Closing line value is -8.3%, and you collected $1 per share.

Trade B: you buy at 30¢, the price at your reference instant is 38¢, and the market settles NO. Closing line value is +26.7%, and you lost the whole stake.

Trade A made money at a price the market later called too high. Trade B lost money at a price the market later called cheap. One trade cannot separate the price from the result, which is the reason to record the price on its own. Keep both records and read them separately.

Fees can turn a small edge negative

Closing line value measured on quoted prices is a gross number. Your round-trip cost comes off it before you have made anything.

Start with a 4¢ gross edge on a 50¢ entry, which is +8%. A 0.5¢ round-trip cost leaves 3.5¢, or +7%. A 1¢ cost leaves 3¢, or +6%. A 2¢ cost leaves 2¢, or +4%. All 3 survive.

Now start with a 1¢ gross edge on the same 50¢ entry, which is +2%. A 0.5¢ cost leaves 0.5¢. A 1¢ cost leaves nothing at all. A 2¢ cost leaves -1¢, or -2%. The same fee schedule that barely dents a 4¢ edge erases a 1¢ edge and then reverses it.

How to pull the closing price

On Polymarket, call GET https://data-api.polymarket.com/v2/prices-history. Set token_id to the token id of the leg you bought and as_of to your reference instant in Unix seconds. The response looks like {"data":[{"timestamp":1788118500,"price":0.9995,"resolution_seconds":300}],"pagination":{"has_more":false}}.

The single row is the latest observation at or before your instant, so you do not bracket a window or scan for the last point. timestamp is the observation time, price is the provider price, and resolution_seconds is the width of the window it was observed in: 0 for an exact tick, 300 for a 5-minute bucket.

Polymarket keeps 1-minute data for at least the last 7 days and coarser grains further back, so a kickoff inside the last week resolves to the tick. The rate limit is 200 requests per 10 seconds. Polymarket named this route the replacement for the CLOB /prices-history endpoint on 2026-09-04; the CLOB route still serves the same series with startTs, endTs, and fidelity if your tooling already uses it. 0xinsider.com/learn/polymarket-api maps the rest of Polymarket's APIs and which one to call for what.

The Pick of the Day worker still reads the CLOB route. It brackets the window with startTs and endTs, and when a settled market returns an empty absolute window even though retained history exists, it retries once with interval=max, then applies the local post-entry, pre-kickoff window. If the retained series is still empty, it records the measurement as unavailable rather than as zero.

Our own candle endpoint will not do this job. GET /api/v1/market/{condition_id}/candles serves daily and weekly buckets built from stored daily snapshots, so it cannot resolve a price at a kickoff minute, and it needs an API key and an active Pro subscription.

GET /api/v1/sports-edge-signals is on the same terms. It carries the two fields this job needs: the kickoff for each row, and the token id of the side the money is on. That token id is null when the market has no matching leg, so treat a null as an unavailable measurement rather than a zero.

What closing line value cannot tell you

A close set by one small order is not a consensus price. On a thin book the last trade can be a single 20-share fill from somebody who wanted out before the event. Check the size and the depth behind that price before you treat it as the market's answer.

You can move the line yourself. If your order is a large share of a thin book, part of the move you measure is your own trade coming back. That is your footprint, not your edge.

A price that repriced on news says the news arrived. Say a starting player was ruled out an hour after you bought: the market moved for a reason that had nothing to do with your read, and your closing line value on that trade is luck, not skill.

It grades the price and not the money. Position size, fees, slippage, and how many of your ideas you fund decide whether you finish the year up. A trader with good closing line value and no size discipline still loses.

It grades a price after you have it. The checks to run before you buy, from the spread and the depth to who holds each side, are at 0xinsider.com/learn/how-to-tell-if-a-polymarket-price-is-fair. For the measure on a public record, 0xinsider.com/pick-of-the-day/stats shows the average closing line value of Pick of the Day and how many settled picks it covers.

Frequently asked questions

What counts as a good closing line value?

We cannot publish a threshold, because we have not measured one. Compare your own average against zero and against your own earlier periods, using one reference rule and one price quantity throughout.

Does positive closing line value mean I will make money?

No. It says the market moved toward your side after you committed. Fees, position size, and slippage decide profit, and a small edge can be smaller than your round-trip cost.

Which instant should I use on a Polymarket sports market?

Use gameStartTime. Polymarket keeps the book open through the game and marks no closing instant, so gameStartTime is the last moment before the event itself starts moving the price.

Why not use the price at resolution?

A price recorded after the event has started already contains the outcome. Grading your entry against it measures how the game went, not how good your price was.

Does 0xinsider publish a closing line value number today?

Yes. Pick of the Day shows a closing line value for each pick whose frozen displayed price matches Polymarket's price history and whose later pre-kickoff close passed a quality check. Its summary shows how many eligible picks were measured, and their average.

What does an empty history response mean?

It means the endpoint found no price points inside the window you requested. Widen the window, and if it stays empty, record the measurement as unavailable instead of zero.

Live feed

Read another guide, or look up a term

The guides and the glossary use the same definitions and the same Polymarket data.

Picks and market activity

Read the published picks or follow large trades. The free feed runs 24 hours behind; Pro has no delay.