> ## Content Index
> Fetch the complete content index at: https://aligrithm.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 9.49 Optimal Market Making in Prediction Markets: Binary Settlement Changes the Problem
- URL: https://aligrithm.com/optimal-market-making-in-prediction-markets-binary-settlement-changes-the-problem/
- Published: 2026-10-27T20:00:00.000Z
- Updated: 2026-10-27T19:59:59.000Z
- Description: Prediction market making quotes a binary contract against two inventory charges: path variance while it trades, and settlement variance on size left open at resolution.
- Author: ali askar
- Tags: 9. Prediction Market Arbitrage

Dominik Feil and Max Nendel work out the bid and the ask for a contract that pays 1 if an event happens and 0 if it does not, and they read the traded price as that probability. You post both quotes, and a bid for the Yes contract is an ask for the No, so the inventory you manage is one number. Fills pay the spread, and any size still open at resolution settles on a draw whose probability is the last price. Hold 50 contracts into a coin flip and the settlement standard deviation is 25\. Those two quotes are chosen so expected terminal wealth stays high after you subtract a charge for that leftover book and a charge for the price variance the book wears on the way there.

## The log-odds drift is what keeps the price a martingale

At a price of 0.70 the log-odds are 0.8473, and the logistic map is concave there. Run a driftless diffusion on the log-odds and Ito's formula pulls the expected price down. Feil and Nendel put a drift on the latent belief so that pull is cancelled and the price stays a martingale. Under that rule the traded price is the conditional probability of the payoff, updated as information arrives.

$$ L = \\ln\\frac{p}{1-p}, \\qquad p = \\frac{1}{1+e^{-L}} $$

L is the log-odds, the real-valued belief. You divide the price by one minus the price and take the log. The second expression is the logistic map back into (0, 1). At p = 0.70, the ratio 0.70/0.30 is 2.3333 and the log is 0.8473\. The same map at a price of one half gives L = 0\. The old article ["A Black-Scholes for Beliefs: Logit Jump-Diffusion and Tradable Belief-Vol"](https://aligrithm.com/a-black-scholes-for-beliefs-logit-jump-diffusion-and-tradable-belief-vol/) runs a jump-diffusion on this state and pins the drift so the price is a martingale. Feil and Nendel drop the jumps. The diffusion and that drift pin stay, and the rest of their paper is the quote that warehouses the diffusion.

The latent volatility they use for the pictures has three pieces: a floor of 0.6, a term 0.3 times (t/T) cubed that rises into the resolution, and a hump 0.1 over (1 + L squared) that is largest when the price is one half. Time is scaled so T = 1, the whole life of the contract. At t = 0 and p = 0.70 the time term is zero, L squared is 0.7179, and the hump is 0.0582, so the latent volatility is 0.6582.

$$ \\mu = -\\frac12 \\sigma^2 g, \\quad g = 1 - 2p, \\qquad f'\\mu + \\frac12 f''\\sigma^2 = 0 $$

Mu is the drift you feed the log-odds. Sigma is the latent volatility, 0.6582 in the example. The factor g equals one minus twice the price, which is the curvature of the logistic relative to its slope, and at p = 0.70 it equals -0.4\. Half of sigma squared is 0.2166, and mu equals 0.2166 times 0.4, so 0.0866\. The price then has two drift contributions that are forced to cancel. The slope of the logistic is p times (1 - p) = 0.21, so the drift contribution is 0.21 times 0.0866, which is +0.0182\. The convexity contribution is one half times the second derivative times sigma squared. The second derivative equals 0.21 times -0.4, so -0.084, and one half of that times sigma squared is -0.0182\. Add them and the price drift is zero. What survives is a volatility of price equal to 0.21 times 0.6582, so 0.1382.

$$ dp\_t = p\_t(1-p\_t)\\,\\tilde\\sigma(t, p\_t)\\, dW\_t $$

The price has no drift. Its volatility is the distance to both boundaries, p times (1 - p), times the latent volatility evaluated at the current log-odds. Near 0 and near 1 that product dies, which is what keeps the price inside the interval. At one half, p times (1 - p) is 0.25; at 0.70 it is 0.21; at 0.10 it is 0.09\. A one-unit move in the latent belief is a smaller price move once the contract is nearly decided.

Feil and Nendel quote a limit order book on one contract. The old article ["The Market Maker's Impossibility: Speed Versus Accuracy, and Why Arbitrage Is Tolerated"](https://aligrithm.com/the-market-makers-impossibility-speed-versus-accuracy-and-why-arbitrage-is-tolerated/) is a different maker: a cost function on combinatorial markets, where a fast update and a coherent price vector are incompatible, so the exchange picks speed and lives with the arbitrage. On this book you can pull the bid when the probability moves, without waiting for a trade to drag a pricing rule there. The bill in this paper is the inventory still open when the contract resolves.

## A frozen 50-lot coin flip bills 0.625 at the print and 0.380 along the path

Terminal wealth is cash plus inventory times the realized payoff. Because the payoff is a coin with probability equal to the last price, and the inventory is known before the coin is flipped, expected wealth equals expected cash plus expected inventory times the last price. Feil and Nendel then subtract two charges from that expectation. Wealth enters linearly, as cash plus inventory times the payoff. An extra dollar of cash raises terminal wealth by a dollar and leaves the quote where it was. The charges hit inventory twice, once along the path and once at the print.

$$ \\operatorname{Var}(q Y \\mid \\mathcal{F}\_T) = q^2 p(1-p), \\qquad \\Phi(p, q) = -\\gamma\_T q^2 p(1-p) $$

The variance is the conditional variance of the settlement value of the inventory. Y is the 0-or-1 payoff, q is the number of contracts, p is the last price. Gamma\_T is the terminal weight, set to 0.001 in their pictures. Phi is the charge subtracted at resolution. For q = 50 and p = 0.50 the variance is 2500 times 0.25, so 625, and the standard deviation is 25\. The charge is 0.001 times 625, so 0.625\. At p = 0.10 the variance is 2500 times 0.09, so 225, the standard deviation is 15, and the charge is 0.225\. The coin flip in the middle of the range is the expensive book. A nearly decided contract still hurts, by less.

$$ \\gamma q^2 \\varsigma(t, p)^2, \\qquad \\varsigma(t, p) = p(1-p)\\,\\tilde\\sigma(t, p) $$

The running charge is gamma times inventory squared times the square of price volatility. Gamma is the path weight, set to 0.004\. At t = 0 and p = 0.50 the latent volatility is 0.7, price volatility is 0.25 times 0.7, so 0.175, and the variance rate is 0.030625\. Gamma times 2500 equals 10, so the charge runs at 0.306 per unit time. At p = 0.10 and t = 0 the latent volatility is 0.6172 and price volatility is 0.05554\. Square that volatility and multiply by 10 and the charge runs at 0.0308 per unit time. The undecided price costs about ten times the running charge of the 0.10 price, on the same 50-lot book, because the variance rate scales with the square of p times (1 - p).

Hold the 50 contracts from t = 0 to resolution with the price frozen at one half and you can integrate the charge in closed form. Price volatility is 0.175 plus 0.075 t cubed, because the latent volatility climbs from 0.7 to 1.0 and you multiply by 0.25\. Square that, integrate term by term, and the integral of the variance rate is 0.030625 plus 0.02625/4 plus 0.005625/7, which is 0.037991\. Times 10, the running bill is 0.380\. Add the terminal charge of 0.625 and a book you refuse to work off, sitting on a coin flip the whole life, costs 1.005 in the objective. On a live path the price moves, so the integral is the tariff on that frozen path, the two bills side by side before any quote is chosen.

![](https://storage.ghost.io/c/27/cb/27cb0fc8-2c77-4434-af9e-d5d32a916994/content/images/2026/10/article_595-visual-0.png)

## The quote matches a reservation, and the zero-reservation case is a hand calculation

A fill moves the book by a clip Δ of 10 contracts, and inventory is capped at 100 in either direction. At the long cap you pull the bid. At the short cap you pull the ask. Between the caps, the quote solves a one-line tradeoff.

$$ z\_b = \\frac{V(t,p,q) - V(t,p,q+\\Delta)}{\\Delta}, \\qquad z\_a = \\frac{V(t,p,q) - V(t,p,q-\\Delta)}{\\Delta} $$

V is the value of future edge net of the two charges, after cash and the mark-to-market of the current inventory have been stripped out. The bid reservation z\_b is how much value you lose, per contract, by getting one clip longer. The ask reservation is the same object one clip shorter. If a longer book is worse, V at q + 10 is below V at q, the bid reservation is positive, and you demand more edge before you buy. Say V falls by 0.20 when inventory rises by 10\. The bid reservation is 0.20/10, so 0.02 per contract. Treat 0.20 as the arithmetic of the definition. Their plotted quotes are this ratio evaluated on the solved V.

$$ \\Lambda^b(t,p,\\pi) = A(t,p)\\left(\\frac{2\\pi}{\\pi+p}\\right)^{\\nu}\\exp\\big(-k(t)(p-\\pi)\\big) $$

Lambda-b is the bid-fill intensity. A is an activity factor: 100 times the square root of p times (1 - p), plus a term that grows toward resolution. At t = 0 and p = 0.50, A equals 50\. The power ν is 1\. It knocks the bid intensity to zero as the bid approaches 0, and the ask intensity to zero as the ask approaches 1, which is the right boundary for a contract that pays at most a dollar. The exponential is the usual spread sensitivity. k(t) runs from 35 at the start to 50 at resolution. At k = 35, one extra cent of distance multiplies that exponential by e to the minus 0.35, which is 0.705\. As it happens, A scales how often you fill and cancels out of the price you post. The quote depends on k, on ν, on p, and on the reservation.

$$ (p - \\pi^b) - \\frac{1}{k + \\dfrac{\\nu p}{\\pi^b(\\pi^b + p)}} = z\_b, \\qquad (\\pi^a - p) - \\frac{1}{k + \\dfrac{\\nu (1-p)}{(1-\\pi^a)(2 - \\pi^a - p)}} = z\_a $$

On the bid, the distance from the price down to the quote, minus one over an effective liquidity, equals the bid reservation. On the ask, the distance is measured up from the price, and the boundary term uses one minus the price and one minus the ask. Effective liquidity is k plus a positive boundary term, so the distance you charge is a bit tighter than 1/k. Set both reservations to zero and you have the myopic quote: it maximizes the instantaneous expected mark-to-market edge and leaves both charges out. At p = 0.50, t = 0, k = 35, the bid is 0.4723 and the ask is 0.5277\. The distance is 0.0277\. Check the bid denominator: 0.4723 times (0.4723 + 0.50) equals 0.4592, and 0.50 divided by 0.4592 equals 1.089\. Add k and the effective liquidity is 36.089\. The reciprocal is 0.0277\. The first-order condition holds on the quote itself. The spread is 0.0554\. A buy of 10 at 0.4723 takes 4.723 out of cash, and the 10 contracts marked at 5.00 earn 0.277 on the clip. Plug the bid back into the intensity and the fill rate is about 18.4 per unit time on each side, so one side grosses about 5.10 of expected edge per unit time while the price and the inventory sit still. The clock runs from 0 to 1 over the life of the contract, so leave the 5.10 on that clock.

At resolution, k = 50 and the same zero-reservation coin-flip quote tightens to a bid of 0.4804 and an ask of 0.5196, a spread of 0.0392\. Nothing in that hand calculation turns the spread back up. The upturn in their picture is the reservation, which the myopic quote sets to zero.

The optimal reservation is the solved value function, read one clip away. Cash drops out, and what is left depends on time, price, and inventory. Neighboring inventories are coupled, because the bid at q depends on V at q and at q + 10\. Feil and Nendel freeze the neighbors, solve the linear equation, and feed the result back. They weight the iteration so each pass shrinks the error, and a map that shrinks its error has one fixed point. They prove it in the log-odds coordinate. In price coordinates the diffusion coefficient dies at 0 and at 1, so the second-order term vanishes at the boundary. In the latent coordinate the volatility of L stays bounded away from zero under their conditions, and the fixed point is a classical solution: differentiable once in time and twice in the belief, continuous up to resolution, and safe to plug back into the equation. The pictures come from a finite-difference version of the same loop. Go backward from the terminal charge with implicit Euler, and inside each time step re-maximize the quotes on a fine grid of candidate prices until V stops moving. Once that V is in hand, their verification theorem says the reservation quote maximizes the wealth objective.

## A flat book already leans, and the coin flip reopens the spread

At a price of 0.10, still with a zero reservation, k = 35, and t = 0, the bid is 0.0764 and the ask is 0.1281\. The bid sits 0.0236 under the price. The ask sits 0.0281 over it. The bid distance matches the same reciprocal: 0.0764 times (0.0764 + 0.10) is 0.01348, and 0.10 divided by 0.01348 is 7.42\. Effective liquidity is 35 plus 7.42, so 42.42, and 1/42.42 is 0.0236\. You pulled the bid in because, at equal distance, the bid fills less readily than the ask when the price is below one half. The factor of twice the bid over the bid plus the price is the smaller one on the bid side down there.

$$ \\mathrm{Spread} = \\pi^a - \\pi^b, \\qquad \\mathrm{Skew} = \\frac{\\pi^a + \\pi^b}{2} - p $$

Spread is the ask minus the bid, the width you are paid. Skew is the quote midpoint minus the price, the lean. On the 0.10 quote the spread is 0.0517 and the skew is 0.0023, positive, midpoint above the price. At one half the skew of a zero-reservation quote is zero by symmetry. The lean gets louder as the price approaches the boundary: at p = 0.02 the same rule has skew 0.0091\. This is still the zero-reservation quote, before inventory shifts the midpoint. The shape of the fill rate is enough to lean a flat book.

The solved quotes, with the reservation switched on, keep that lean and then move it with the book. Look at the yellow line in the figure, the flat book at p = 0.50\. It starts as the widest spread and is the line that hooks up at the right edge. The purple line, p = 0.10, falls the whole way.

![Bid-ask spread at flat inventory versus time, for prices from 0.10 up to 0.50. The coin-flip line starts widest and turns up near resolution. The 0.10 line falls throughout.](https://storage.ghost.io/c/27/cb/27cb0fc8-2c77-4434-af9e-d5d32a916994/content/images/2026/10/article_595-spread_vs_time.png)

k is rising from 35 to 50 the whole time, which is why every line falls for most of the life: fills get more sensitive to distance, so you have to stand closer to do the same business. Near resolution the reservation wins that race at prices close to one half, where settlement variance is largest and a new clip has almost no time to be worked off. At 0.10 the settlement charge is the smaller one, and that line keeps falling through the print. For any fixed time, the spread is wider at the prices closer to one half. That is the same p times (1 - p) that set the 0.625 against the 0.225.

Look at the black line next, flat inventory again. Skew is positive below one half, negative above it, and steep at both ends. A long book of 50, the lowest line through the middle, pushes the midpoint about half a cent below the flat-book line. A short book of 50 pushes it about half a cent above. You are long, so you cheapen the ask to get hit and you drop the bid so you stop adding. Near 0 and near 1 the five lines meet. The inventory penalty is proportional to p times (1 - p), and that factor is going to zero, so a 50-lot book and a flat book post almost the same lean. The boundary shape of the intensity is what is left.

![Skew of the optimal quotes at the start of the contract versus price, for inventories -50, -25, 0, 25, and 50. Flat inventory leans positive below one half and negative above. The inventory lines separate in the middle and meet near 0 and near 1.](https://storage.ghost.io/c/27/cb/27cb0fc8-2c77-4434-af9e-d5d32a916994/content/images/2026/10/article_595-skew_vs_price.png)

Two clocks pull the skew as time runs. Less time remaining means less path charge left to suffer, and that pulls the lean back toward zero. Less time remaining also means less time to unload before the terminal charge, and that pushes the lean out. The path weight gamma moves the early skew. The terminal weight gamma\_T moves the late skew. Their base settings are 0.004 and 0.001\. Raise the path weight and the early book skews harder. Raise the terminal weight and the skew near the print is the one that moves.

## The left tail thins and the mean holds

Look at the blue bars. On the left they are the optimal profit, piled on the same center as the red baseline and cut off well inside the red tails. On the right they are terminal inventory, piled on zero, against a red baseline that is smeared from roughly -100 to 100.

![Final profit and loss, and terminal inventory, for the myopic baseline and the optimal quotes, on 10,000 simulated paths. The optimal profit is the tight blue histogram. The optimal inventory sits on zero.](https://storage.ghost.io/c/27/cb/27cb0fc8-2c77-4434-af9e-d5d32a916994/content/images/2026/10/article_595-pnl_and_inventory.png)

Mean profit is 12.47 for the baseline and 12.39 for the optimal. The standard deviation of profit falls from 28.11 to 10.34\. The 5% value at risk, reported as a positive loss, falls from 32.41 to 4.20\. Average absolute terminal inventory is 49.37 against 15.23, and the 5% expected shortfall, again a positive loss, is 40.50 against 9.68.

The baseline is the zero-reservation quote, reposted as the price moves, with both charges ignored. Both strategies see the same 10,000 paths, started at a price of one half, stepped by Euler-Maruyama, and clamped into \[0.001, 0.999\]. The payoff is drawn as a coin with probability equal to the last price. Profit in the table is cash plus inventory times that coin, the wealth term before either charge is subtracted. The optimizer was willing to give up expected cash wealth in exchange for smaller charges, and on these paths it gave up 0.08 of mean wealth. If the contract is still a coin flip at the print, a book of 49.37 contracts has settlement standard deviation 24.69, next to a profit standard deviation of 28.11\. The inventory the myopic quote fails to work off is most of the risk in that red histogram. The frozen coin-flip edge of about 5.10 a side per unit time is the same dollar unit as these means, over a horizon of length 1, before the price wanders and the book fills up.

## Fit k and A on the book you quote

I am against posting these quotes on a live book until k and A are estimated from that book's fills. Feil and Nendel chose the parameters to draw the pictures. The fills in the simulation are drawn from the same intensity the quote maximizes. If that intensity is the one you optimized, you will look good against a quote that leaves inventory out, inside a world that obeys your fill rate. That is a control result.

The baseline is also allowed to exceed the inventory cap of 100\. It rarely does. Forcing it to pull the quote at the cap would cut its profit, so the comparison is a little kind to the myopic rule. The objective has no fee, and these books usually tick in cents. A spread that runs from about four cents to about six is a handful of ticks, so a one-cent fee or a one-cent rounding is a large slice of the 0.0554 you computed by hand. The intensity is a function of distance, time, and the price level, whoever hit you. You are paid the spread against that flow.

The old article ["Market Making With Competitors You Can't See"](https://aligrithm.com/market-making-with-competitors-you-cant-see/) covers the case this model leaves out. There, an order you pass lands in someone else's inventory, their quote moves, and your fill rate moves with it. Here the arrival rate is a function of your quote alone. A competitor inside your spread replaces A and k, and the reservation you computed is then a reservation for the wrong flow. The objective pays no interest on locked collateral. The paper notes Polymarket was paying 3.25% annualized on some long-dated markets as of 19 July 2026, and it leaves the calendar length of T = 1 unspecified. Scale that rate by the real horizon before you put it in the objective. A week and a year are different bills.

What you can take to the desk without their parameter file is the split inside the reservation. The path weight gamma is the early-time knob, because a lot of variance is still ahead of you. The terminal weight gamma\_T is the knob once the print is close, because the coin's variance q squared p times (1 - p) is about to be realized and the path integral has little time left. At a price near 0 or 1, shrink both leans: the same 50-lot book that costs 0.625 at a coin flip costs 0.225 at a price of 0.10, and the running charge falls by about ten times. The zero-reservation quote, bid 0.4723 and ask 0.5277 at the start of a coin flip, is the quote you post when you are willing to hold whatever the fills leave you at the coin.

## KEY POINTS

- Put a drift on the log-odds so the price is a martingale. At a price of 0.70 the two Ito pieces are +0.0182 and -0.0182, and the price volatility that remains is 0.1382.
- Charge the book twice. Fifty contracts at one half have settlement variance 625, a terminal charge of 0.625, and a running charge of 0.306 per unit time at the start.
- Quote where distance minus one over effective liquidity equals the reservation. With a zero reservation and k equal to 35, the coin-flip bid is 0.4723 and the ask is 0.5277.
- Let a flat book lean with the price. At 0.10 the zero-reservation skew is already 0.0023, the solved coin-flip spread turns up into the print, and the 0.10 spread keeps falling.
- Read the simulator as a control result inside their intensity: mean profit 12.47 versus 12.39\. Estimate k and A on the book you quote before you treat the thinner tail as yours.

## References

- [A Black-Scholes for Beliefs: Logit Jump-Diffusion and Tradable Belief-Vol](https://aligrithm.com/a-black-scholes-for-beliefs-logit-jump-diffusion-and-tradable-belief-vol/)
- [Market Making With Competitors You Can't See](https://aligrithm.com/market-making-with-competitors-you-cant-see/)
- [The Market Maker's Impossibility: Speed Versus Accuracy, and Why Arbitrage Is Tolerated](https://aligrithm.com/the-market-makers-impossibility-speed-versus-accuracy-and-why-arbitrage-is-tolerated/)
- [Optimal Market Making in Prediction Markets, Dominik Feil and Max Nendel](https://arxiv.org/abs/2607.17991?ref=aligrithm.com)

---

**A note on AI.* The ideas, research, analysis, and conclusions in this article are my own. I use AI tools to help with editing and wordsmithing, because English is not my first language, and I am not shy about that. AI-generated ideas and AI-assisted writing are not the same thing: the first is empty slop from a generic prompt, the second is a tool for communicating years of real research more clearly. Judge the work by its substance, not by whether software helped polish the prose.*