Win Rate Is Not an Edge
Published 2026-07-23 · By Drew Shell
The first article in the validation series. If you have not run a bot before, start with article 0 — it covers the basics without formulas and takes five minutes. Exchange parameters verified against Polymarket primary sources on 22 July 2026. Every calculation is reproducible — script linked at the end.
If you read nothing else: the thing worth measuring is not how often you win. It is how far your forecast beats the price, in percentage points of probability, after the exchange takes its cut. Those two numbers can point in opposite directions, and this article is about why.
A strategy with a 90% win rate on Polymarket can be a losing strategy. A strategy with a 12% win rate can be a winning one. Neither statement is a paradox, and neither depends on anything exotic — both follow directly from the price you pay to enter.
Two terms, if they are new. Your edge is the gap between the probability you believe and the probability the price implies. A contract at 50¢ is the market saying “50% likely”; if you think it is 52% likely, your edge is two percentage points. A taker removes an existing offer from the order book and pays the fee. A maker posts an offer and waits for someone else to take it, and pays nothing. Which one you are is decided by how your order meets the book, not by what you intended.
Here is the number that should reframe how you read your own backtest. Take a forecasting edge of exactly two percentage points: you think the true probability is 52% where the market says 50%, or 92% against 90%. Same edge, same skill, two different entry prices. Crypto market, entering as a taker:
- At 50¢, the fee eats 1.75 of your 2 points. Net edge: 0.25 points.
- At 90¢, the fee eats 0.63. Net edge: 1.37 points.
Same forecasting ability. Five and a half times the surviving edge. And the number of resolved trades needed to distinguish that edge from zero moves from roughly 1,600 to roughly 160,000.
A hundredfold difference in how long it takes to find out whether you have anything at all. And it depends only on where on the price scale you trade.
The claim, stated so it can be broken
I claim: on Polymarket, win rate carries no information about whether a strategy makes money. The only quantity that does is edge measured in the same units as the cost — percentage points of probability, after fees. For a taker buying at price p, breakeven is not 50%, it is:
q* = p + feeRate × p × (1 − p)
The formula derives in two lines, and deriving it once is worth more than memorising it. Buy one share at price p. If the outcome happens you receive $1, so you gain 1 − p. If it does not, you lose p. If your forecast is right a fraction q of the time, your average result per share is q(1 − p) − (1 − q)p, which collapses to exactly q − p — your edge. Now subtract what the exchange charges per share, feeRate × p × (1 − p), set the whole thing to zero, and solve for q. That is the formula. The fee is expressed in the same units as the edge, and that is the entire point of this article.
I am wrong if: the fee formula is not fee = C × feeRate × p × (1 − p), or the fee is charged on a base other than shares, or makers pay it. All three are checkable in one API call — it is below.
What the exchange actually charges
The fee is deducted at the moment your order fills. From the official documentation:
fee = C × feeRate × p × (1 − p)
where C is the number of shares and p is the share price. Makers never pay. Only takers do.
The rate depends on the market’s category. This article is about crypto up/down markets, where the taker rate as of 22 July 2026 is 0.07, and makers receive 20% of collected fees. Other categories trade at other rates; I am not listing them here, because I have not verified them against live market objects, and publishing an unverified number in a table people will cite is precisely the error this series argues against.
And here is a catch worth knowing before you type a rate into your bot’s settings.
The rate is a property of the specific market, not of the label it appears under on the site. I checked live markets: among those displayed in the Crypto section, some carry a rate of 0.04 instead of 0.07. The section on the site is a storefront; the fee is set by the market itself.
The difference is not cosmetic. A rate of 0.04 instead of 0.07 changes nearly every number in the tables below by roughly half: breakeven at 50¢ becomes 51.00% instead of 51.75%, and net edge on the same forecast is four times larger. Getting this wrong means a backtest that looks correct and lies in your favour.
Practical consequence: do not take the rate from memory and do not trust a default. Look it up on the market you actually intend to trade, and re-check it periodically — Polymarket changed its fee regime twice in the first half of 2026. What can change is not only the rate but the shape of the curve: the market parameters include an exponent, currently equal to one, which is exactly why the formula is this simple. Nothing promises it stays one.
If you work with the API directly: the field is feeSchedule, and the rate is in rate. Alongside it sit makerBaseFee and takerBaseFee with the value 1000 — these are legacy, they have nothing to do with the current fee, and read as basis points they will give you a model with a 10% fee.
The arithmetic in three units
Here is what makes cost intuition on prediction markets unreliable: the same fee is large or small depending on what you divide it by, and the two natural denominators move in opposite directions.
One worked case first, because the table below is three views of a single number. You buy 100 shares of a crypto contract at 50¢. You pay $50. The exchange takes 100 × 0.07 × 0.50 × 0.50 = $1.75. That one fee can be named three ways: it is $1.75, it is 3.5% of the $50 you put down, and it is 1.75 percentage points of probability — because 100 shares pay out $100 if you are right, and $1.75 is 1.75% of that. Every row below is the same three views at a different price.
Crypto market, rate 0.07:
| Entry price p | Fee, probability points | Breakeven accuracy | Fee as % of capital deployed |
|---|---|---|---|
| 0.05 | 0.33 | 5.33% | 6.65% |
| 0.10 | 0.63 | 10.63% | 6.30% |
| 0.25 | 1.31 | 26.31% | 5.25% |
| 0.50 | 1.75 | 51.75% | 3.50% |
| 0.75 | 1.31 | 76.31% | 1.75% |
| 0.90 | 0.63 | 90.63% | 0.70% |
| 0.95 | 0.33 | 95.33% | 0.35% |
In probability points the fee is worst at 50¢ and falls symmetrically toward both extremes. As a percentage of the money you put down it is worst at 5¢ and falls monotonically as price rises — nearly twentyfold across the range.
A trader who thinks in percentages and a trader who thinks in points will draw opposite conclusions about where it is expensive to trade. Only one of them is measuring the right thing.
The correct unit is the one your edge is denominated in. An edge is a claim about probability: “this outcome is more likely than the price implies.” So the cost must be expressed in probability too. That is the middle column. A 75% win rate at an average entry of 85¢ is not a 75% win rate — it is a negative result, because breakeven there is 85.9%.
The same reasoning disposes of a simplification that looks harmless: charging the fee as a flat percentage of the trade’s value. Such a model makes the cost grow with the price of the contract — a straight line rising left to right. The real cost behaves differently: it peaks in the middle of the scale and falls toward both edges. The two models agree at exactly one price and diverge multiplicatively away from it, with the sign of the error flipping in the middle. A flat model calibrated at 50¢ understates cost below that point and overstates it fivefold at 90¢, turning a net edge of +1.37 points into a reported −1.15. No flat rate is conservative across the whole range, because “conservative” points in opposite directions on either side of the midpoint.
Why the same edge is not the same strategy
Now hold the edge at two percentage points and look at what happens to the distribution of the result. A trade on this kind of market has only two outcomes — the contract either paid a dollar or it paid nothing. So the shape of the distribution can be computed exactly rather than estimated from a sample.
Three of the column headings below are worth a sentence each. Skewness says which side the rare outcomes sit on: negative means many small wins and occasional large losses, positive is the reverse. Excess kurtosis says how fat the tails are relative to a normal distribution — the higher it is, the more your result is decided by a handful of trades. Sharpe per trade is average profit divided by its standard deviation, so it measures return relative to the noise around it; the last column converts that into how many trades you need before a result that size stops being explainable by luck.
One clarification that will save you confusion: Sharpe per trade is not the annualised Sharpe ratio that reports print, ours included. That one is computed from daily returns and multiplied by the square root of the number of periods in a year. The two differ by orders of magnitude, and they are related like this:
Annualised Sharpe = Sharpe per trade × √(trades per year)
Look at what that means in practice. A Sharpe per trade of 0.05 is a modest quantity — we will see below that it corresponds to an edge of a couple of points. But if the bot makes 20 trades a day, that is 7,300 a year, the square root of which is 85, and the annualised Sharpe comes out at 4.3. A number you would not be embarrassed to bring to a fund — out of a two-point advantage.
The annualised Sharpe is not lying. It simply hides the sample size inside the multiplier: on a three-day backtest it computes exactly the same way and looks exactly as impressive. So it works for comparing strategies against each other, and does not work for answering “is this just luck.” Everything further in this article refers to Sharpe per trade, because that is the one tied directly to sample size.
| Entry price | Net edge, pp | Skewness | Excess kurtosis | Sharpe per trade | Trades to separate from luck |
|---|---|---|---|---|---|
| 0.10 | 1.37 | +2.34 | +3.47 | 0.042 | ~2,250 |
| 0.25 | 0.69 | +1.04 | −0.93 | 0.016 | ~16,700 |
| 0.50 | 0.25 | −0.08 | −1.99 | 0.005 | ~159,700 |
| 0.75 | 0.69 | −1.28 | −0.35 | 0.016 | ~15,000 |
| 0.90 | 1.37 | −3.10 | +7.59 | 0.051 | ~1,570 |
Three consequences worth sitting with.
Sharpe ratios are not comparable across entry prices, and the fee is to blame. The tenfold spread is not produced by the shape of the distribution, as you might assume — I decomposed it:
| Entry price | Sharpe without fee | Sharpe with fee | Eaten by the fee |
|---|---|---|---|
| 0.10 | 0.062 | 0.042 | 31% |
| 0.25 | 0.045 | 0.016 | 66% |
| 0.50 | 0.040 | 0.005 | 88% |
| 0.75 | 0.048 | 0.016 | 66% |
| 0.90 | 0.074 | 0.051 | 31% |
Without the fee, the spread between 50¢ and 90¢ is 1.8×. With it, 10×. The shape of the distribution accounts for less than a factor of two; the exchange does the rest.
Hence an uncomfortable conclusion about the metric everyone uses: Sharpe on a prediction market measures first how much was taken from you, and only second how good the strategy is. Ranking two strategies by it when one lives at 50¢ and the other at 90¢ means ranking them by the size of the fee they paid.
A high win rate means strong negative skew and fat tails. At 90¢ entry, skewness is −3.1 and excess kurtosis is +7.6. The distribution is nine small wins and one large loss. The Sharpe ratio discards exactly the shape you are holding, and it does so most aggressively in the region where “high win rate” strategies live. This is why the significance tests that correct for skewness and kurtosis — the Probabilistic and Deflated Sharpe Ratios — are structurally necessary on prediction markets rather than a refinement. That is the subject of article 3.
Sample size is not a detail. Near 50¢, a genuine two-point edge requires on the order of 160,000 resolved trades before it can be separated from luck. The number looks invented, so here is where it comes from in full — five lines you can check on a calculator.
Buying at 50¢, right 52% of the time, crypto market:
fee per share = 0.07 × 0.50 × 0.50 = 0.0175
if right = (1 − 0.50) − 0.0175 = +0.4825
if wrong = −0.50 − 0.0175 = −0.5175
on average = 0.52×0.4825 + 0.48×(−0.5175) = +0.0025
spread around the mean (standard deviation) = 0.4996
Sharpe per trade = 0.0025 / 0.4996 = 0.0050
You earn a quarter of a cent per share against a spread of half a dollar. The signal is two hundred times smaller than the noise, and the only question is how many observations it takes for such a signal to become visible.
Standard statistics gives the answer: confidence grows as Sharpe × √(number of trades), and the conventional significance threshold is a value of 2. Hence:
number of trades = (2 / 0.0050)² = 159,744
And here is the one rule worth carrying away from this entire article:
The number of trades you need is inversely proportional to the square of the Sharpe. Halve the net edge and you quadruple the required sample.
That is exactly why the sample explodes at 50¢ and does not at 90¢. Two multipliers meet there: the fee eats 1.75 of 2 points, leaving 0.25 — 5.5 times smaller — and the spread of outcomes at 50¢ is at its maximum, 1.84 times larger than at the edges. Five and a half times 1.84 is ten, squared is a hundred. Hence 1,569 trades against 159,744.
One caveat: the threshold of 2 assumes one test. If you tried many strategy variants and kept the best, the threshold rises and the sample grows further still. That is the subject of article 3 in this series.
The practical conclusion is simple. Two weeks of results is not evidence. It is not even weak evidence. It is a sample from which nothing follows.
(Caveat, stated plainly: holding the edge at 2pp across all prices is a modelling assumption made to isolate the price effect. Real strategies have price-dependent edges. The point is the mechanism, not a forecast of your trade count.)
“So shouldn’t Sortino be the metric here, not Sharpe?”
The instinct is right, the conclusion is not, and a short answer will do.
Sortino divides not by the whole spread of the result but only by its losing part: upside does not frighten you, downside does. On a skewed distribution that sounds reasonable. But on a binary market, if a strategy enters at roughly one price, all its losses are identical in size — you always lose exactly the price you paid. There is no downside dispersion, and the Sortino denominator stops measuring anything: it degenerates into a function of win rate and entry price. It cannot tell you anything new, by construction. On top of that it is computed from losing trades alone, and at 90¢ entry that is eight observations out of a hundred — the noisiest estimate arrives exactly where the skewness argument sounded most convincing.
It does not solve the comparability problem either: the spread between 50¢ and 90¢ was tenfold on Sharpe and remains nearly eightfold on Sortino, except the winner swaps — Sharpe favours 90¢, Sortino favours 10¢.
At the daily level Sortino is meaningful: a varying number of trades close each day, daily losses differ in size, dispersion appears. That is how reports compute it, ours included. But it is a different quantity from Sortino per trade.
The main point, though, is that neither answers the question all of this was for: is the result distinguishable from luck. Corrections for skewness and tail thickness exist only for Sharpe — they are called the Probabilistic and Deflated Sharpe Ratios and they account for the distribution not being normal. Sortino has no equivalent: its estimator has no known distribution, so there is simply nothing to fix.
And these corrections are not cosmetic on our markets. The required sample changes exactly where skewness is large:
| Entry price | Skewness | Correction to required sample |
|---|---|---|
| 0.10 | +2.34 | 10% fewer trades needed |
| 0.50 | −0.08 | unchanged |
| 0.90 | −3.10 | 16% more trades needed |
Rare large wins work for you, rare large losses against you. The ordinary significance calculation does not see this difference at all.
So the right move is not to change the metric to fit the shape of the distribution, but to fix the significance test. How that is done is article 3 in this series.
A broader question remains, which this discussion raises and does not close. If Sharpe on a prediction market mostly measures the fee, and Sortino is degenerate, then what is the right way to measure a strategy somewhere the true outcome of every trade is known and a ready-made market forecast exists for comparison? Binary markets have an advantage here that equities do not, and it is worth using. That is the next article.
What would refute this
The whole argument rests on one formula and one fact: only the taker pays. Neither is my opinion — these are parameters Polymarket publishes for every market. Check them rather than believe me.
The simplest way, requiring no code: take any past trade of your own and check the fee charged against the formula. A hundred shares at 50¢ on a crypto market should cost $1.75. If it matches, the tables above hold for you. If not, your market has a different rate, and every number needs recomputing for it — which the script at the end of this article does.
What exactly would refute the article. If the fee is charged to makers too, the maker-side conclusion collapses. If the exponent in the formula turns out not to equal one, the curve has a different shape and every number in the tables shifts. And if Polymarket moves to a flat percentage of trade value, the dependence of breakeven on entry price disappears entirely and the article is obsolete.
For those working with the API: getClobMarketInfo(conditionID), field fd — containing r (rate), e (exponent) and to (whether only the taker pays).
What this article does not cover
- The spread and the tick. I have priced only the exchange fee. Live markets also carry a spread — the gap between the buying and selling price — and it is frequently a larger cost than the fee. There is also the tick: the minimum increment by which the price can move at all. It is set per market; on active markets I observed both 0.001 and 0.01. At a 0.01 tick, one price increment is a full percentage point — roughly three quarters of the entire net edge in the 90¢ row. A strategy whose edge is smaller than the tick is not implementable, whatever the arithmetic says.
- Minimum order size — 5 shares on live markets, which constrains position sizing at the edges of the scale.
- Maker rebates. Makers pay zero and receive a share of collected taker fees — 20% on crypto. Every number here is the taker case, which is the pessimistic one. The maker case is a separate article.
- Round trips. The calculations assume one taker entry held to resolution. Exiting as a taker before resolution pays the fee twice.
- Whether any of this is profitable. Nothing here claims an edge exists. It says what an edge would have to be worth to survive.
What to do with this tomorrow
- Recompute your strategy’s result as edge per trade in percentage points after costs, not as win rate. If you cannot state that number, you do not yet know what your strategy did.
- Record your average entry price. Two strategies with the same win rate and different entry prices are not comparable and should never appear in the same ranking.
- Before treating a live result as evidence, compute the sample size implied by your Sharpe per trade. If it exceeds your trade count by an order of magnitude, your result is noise with a sign attached.
- Check which cost model your backtester actually applies — the formula, not the label on the input field.
<!-- ══ Cut this section for syndicated versions (§4 of the series plan) ══ -->
How this works in GoGoBots
Point 4 above is an uncomfortable question to ask of your own product, so here is our answer, including the part that does not flatter us. We would rather you learn how we behave when we turn out to be wrong than read a list of features: the first tells you something the second cannot.
Until recently our backtester got this wrong. It modelled the fee as a flat percentage of turnover — exactly the simplification dissected two sections above. Calibrated around 50¢, it understated the cost on cheap entries and overstated it fivefold at 90¢, which means it was systematically rejecting the very class of strategy this article identifies as best protected against fees. We found it while writing this piece. It is fixed now, and runs made before the fix are flagged in the interface as computed under the old model rather than silently recomputed after the fact.
What the engine does now. The fee is charged as shares × feeRate × p × (1 − p) on every fill, using the published rate for the category, supplied as a preset and overridable by hand. The regression anchor is a symmetry test: fee(p) must equal fee(1 − p). That is the one property a flat model fails to satisfy under any calibration. Both legs of a position closed before resolution are charged; one held to resolution is charged once.
What it deliberately does not do. It does not read feeSchedule from the market object automatically. That looks like an obvious improvement and we decided against it: Polymarket changes its rates, and an automatic read that has silently gone stale is worse than a dated number you entered yourself and are accountable for. The rate is your input, published values are offered as defaults, and the fixing date is shown. Every fill is treated as a taker fill, including limit orders, because a limit order resting in the book can cross as a taker at precisely the moment it matters. That is the pessimistic assumption, and it is deliberate: an optimistic execution model is the single largest source of divergence between a backtest and a live bot, which is article 6.
What it now reports. Edge per trade in percentage points after costs, with a confidence interval, so you can see whether the result separates from zero. Share-weighted average entry price with percentiles, because a single average hides a strategy that is really two. And the number of trades implied by your Sharpe per trade for a t-statistic of 2, next to the number of trades you actually have. The second is usually much smaller than the first, and it is better to learn that from a report than from a live account.
What it still does not model. Maker rebates. Order book depth. Queue position. If your strategy’s edge depends on any of these, our backtester cannot evaluate it, and we would rather say so than have you find out in production.
What this means for runs you already have. We are not going to show one hand-picked before-and-after run — a single selected example is exactly the type of evidence article 3 argues against. Instead you can work out the answer for your own saved runs, because the two models agree at exactly one price:
p* = 1 − flat / feeRate
Below p* the old model charged too little and therefore overstated your edge. Above p* it charged too much and understated it — that is the region where it was killing viable strategies. Runs made before the fix display the flat rate they were computed with, so the crossover is yours to calculate:
| Old flat rate | Crossover p* |
|---|---|
| 0.5% | 0.93 |
| 1% | 0.86 |
| 1.5% | 0.79 |
| 2% | 0.71 |
| 2.5% | 0.64 |
| 3% | 0.57 |
| 3.5% | 0.50 |
| 4% | 0.43 |
| 5% | 0.29 |
| 6% | 0.14 |
| 7% and above | no crossover — overstated everywhere |
Compare your strategy’s average entry price to its crossover and you know the direction of the error in every saved result. If the flat rate you used was 0.07 or higher, there is no crossover at all: the old model overstated cost at every price, and anything it rejected deserves a second look.
<!-- ══ END ══ -->
FAQ
Is a high win rate ever a good sign? Only alongside the average entry price. At 30¢, a 60% win rate is a large edge. At 85¢, a 75% win rate is a loss. On its own the number is uninterpretable.
Where on the scale should I trade, then? The arithmetic gives no answer on its own. The extremes preserve more of a given edge and need far fewer trades to prove it; they also concentrate the payoff into rare large losses and suffer more from tick granularity. That is a trade-off to be measured on your strategy, not a recommendation.
How many trades before I believe a live result? Enough that the confidence interval on edge-after-costs excludes zero. Compute it from your own Sharpe per trade. For markets near 50¢ the honest answer is usually “far more than you have.”
Do makers escape all of this? Makers escape the fee and receive part of the collected taker fees. They do not escape the spread, adverse selection, or queue position. A different cost structure, not the absence of one.
Not financial advice. Past results do not predict future results. Trading prediction markets carries risk up to and including total loss of capital. Verify that trading on these venues is legal in your jurisdiction.
Fee parameters verified against Polymarket documentation and live market objects on 22 July 2026. They change; re-verify before relying on them.