Logo

Polymarket PnL Calculation: Reconcile Profits and Trading Costs

Illustrative football home-win position showing 200 purchased shares, an 80-share partial sale and 120 shares still open.
polymarketpnlbet-trackingtrading-feesprediction-markets
Cadell Griffith · OddsFantasy Research Team
Oct 02 2026

Polymarket PnL Calculation: Reconcile Profits and Trading Costs

To calculate Polymarket PnL, subtract the allocated purchase cost from sale proceeds for closed shares, then value remaining shares against their remaining cost basis. Reconcile execution fees, valuation prices and reporting scope before comparing totals: realized profit alone is not the same as total position PnL.

What belongs in a Polymarket PnL calculation?

Realized PnL measures gains or losses on closed shares. Unrealized PnL measures gains or losses on shares still held. The Interactive Brokers definition of unrealized P&L describes it as profit or loss on open positions, with associated fees and commissions relevant when positions close.

  • Realized PnL = sale proceeds − cost basis allocated to sold shares − selling fees, if those fees are not already deducted from proceeds.
  • Unrealized PnL = remaining shares × valuation price − remaining cost basis.
  • Total position PnL = realized PnL + unrealized PnL, with each incurred cost included exactly once.

The football position below is entirely illustrative, not live market data. Prices are expressed in USDC per share. We use weighted-average purchase cost for reconciliation; this is an accounting convention for the example, not a claim about the method used by any particular Polymarket display.

How do you calculate average cost after multiple purchases?

Suppose you buy 100 shares of a football home-win outcome at 0.40, then another 100 at 0.50. Before fees, the purchases cost 40 and 50 USDC respectively. You hold 200 shares with a combined purchase cost of 90 USDC.

Weighted-average purchase price = total purchase cost ÷ total shares. Here, 90 ÷ 200 = 0.45 USDC per share. When purchase sizes differ, weight each price by its share quantity rather than taking a simple average of the displayed prices.

Formula showing total purchase cost divided by total shares, giving an average price of 0.45 USDC.
Weight purchase prices by filled share quantities before allocating cost to a partial exit.

Keep individual fills available even if your summary shows one average price. A single order can produce multiple fills, and an order request is not evidence that every requested share traded. For now, the calculation excludes fees so the effect of a partial exit is easy to see.

How does a partial exit split realized and unrealized profit?

You sell 80 shares at 0.60. Gross proceeds are 80 × 0.60 = 48 USDC. The purchase cost allocated to those shares is 80 × 0.45 = 36 USDC, so gross realized profit is 12 USDC.

You still hold 120 shares with a remaining purchase cost of 54 USDC. If the valuation price is 0.58, their market value is 120 × 0.58 = 69.60 USDC. Gross unrealized profit is therefore 69.60 − 54 = 15.60 USDC.

Total gross position PnL is 12 + 15.60 = 27.60 USDC. A useful cross-check is sale proceeds plus remaining position value minus original purchase cost: 48 + 69.60 − 90 = 27.60.

A report showing 12 and another showing 27.60 need not disagree. The first might cover only closed shares; the second might include the open position. Do not subtract the entire 90 USDC purchase cost from the partial sale, or treat all 200 shares as though they sold at 0.60.

Why can different valuation prices produce different PnL?

Keep the same trades but change the valuation price from 0.58 to 0.56. The remaining shares are now valued at 67.20 USDC, giving gross unrealized profit of 13.20 and total gross PnL of 25.20. The 2.40 USDC difference comes entirely from marking 120 shares two cents lower.

A displayed price is not necessarily executable for your full position. If selling all remaining shares would produce an average fill price of 0.55, gross proceeds would be 66 USDC rather than the 69.60 valuation at 0.58. That is a 3.60 USDC valuation-to-execution gap before selling fees.

Ask whether a report uses a last trade, midpoint, bid or another mark; do not assume its convention. Also distinguish slippage from a separate charge. If the earlier 80-share sale was expected at 0.61 but filled at 0.60, the 0.80 USDC shortfall is already reflected in actual proceeds. Subtracting it again would double-count it.

How do Polymarket taker fees affect net PnL?

According to Polymarket’s trading-fee documentation, certain markets charge taker fees at match time, while makers are not charged fees. The documented formula is fee = C × feeRate × p × (1 − p), where C is shares traded and p is the share price. Fees are calculated in USDC.

  • Assume a hypothetical feeRate of 0.02 and taker execution for every fill in this example. This is not a statement of a live market’s rate.
  • First purchase fee: 100 × 0.02 × 0.40 × 0.60 = 0.48 USDC.
  • Second purchase fee: 100 × 0.02 × 0.50 × 0.50 = 0.50 USDC.
  • Partial-sale fee: 80 × 0.02 × 0.60 × 0.40 = 0.384 USDC.

Use matched-fill quantities, prices and applicable fee information, not merely the submitted order size. Polymarket states that fees are rounded to five decimal places, with amounts below its smallest charged fee of 0.00001 USDC rounded to zero. Preserve sufficient precision rather than rounding every ledger entry to cents.

Should purchase fees be included in cost basis?

For this reconciliation, we add purchase fees to cost basis. Total entry cost becomes 90 + 0.48 + 0.50 = 90.98 USDC, and average cost becomes 90.98 ÷ 200 = 0.4549. Another report may show fees separately; compare its complete total rather than mixing the two conventions.

The 80 sold shares receive 36.392 USDC of entry cost. Net sale proceeds are 48 − 0.384 = 47.616, so realized profit is 11.224 USDC. Remaining cost basis is 54.588; at the 0.58 mark, unrealized profit is 69.60 − 54.588 = 15.012 USDC.

Total PnL after incurred fees is 11.224 + 15.012 = 26.236 USDC. The independent check is 48 + 69.60 − 90 − 1.364 = 26.236. This total does not deduct a hypothetical future exit fee: the remaining position is still open.

Bar chart comparing gross realized profit of 12 and unrealized profit of 15.6 with fee-adjusted figures of 11.224 and 15.012 USDC.
Adding entry fees to cost basis and deducting the sale fee reduces both components; the remaining shares are marked at 0.58.

What changes when the remaining shares are sold?

Now assume the remaining 120 shares sell at 0.55 with the same hypothetical fee rate. Gross proceeds are 66 USDC, and the sale fee is 120 × 0.02 × 0.55 × 0.45 = 0.594. Net proceeds are 65.406, producing additional realized profit of 65.406 − 54.588 = 10.818 USDC.

The fully closed position has realized profit of 11.224 + 10.818 = 22.042 USDC and no remaining unrealized PnL. Check it directly: total gross proceeds of 114 minus purchase cost of 90 minus all fees of 1.958 equals 22.042. The earlier marked profit was higher because the remaining shares were valued at 0.58, not sold at 0.55.

What reporting differences should you check first?

  1. Match scope: compare the same account, outcome, date range and completed fills.
  2. Match status: distinguish closed-position profit from a total that includes open positions.
  3. Match valuation: record the mark and timestamp used for remaining shares.
  4. Match costs: determine whether purchase fees sit inside cost basis or appear separately, and whether proceeds are gross or net.
  5. Separate funding from performance: deposits and withdrawals change cash balances but are not trading profit.

For on-chain reconciliation, do not equate transaction volume with profit or new capital. The Anatomy of a Blockchain Prediction Market uses a complete settlement ledger and explains that minting and burning outcome shares inside ordinary trades can overstate naively aggregated turnover. Its transaction-level analysis separates turnover from net inflow and market activity.

How can OddsFantasy trade history help reconciliation?

The OddsFantasy trading terminal shows sports prediction-market events, with market views containing charts, an order book, available liquidity and the current spread. These help you inspect the distinction between a displayed valuation and available execution prices; they do not guarantee a particular fill.

Trades placed through OddsFantasy are recorded in its tracker, which includes a stats dashboard, bet history and leaderboard. Use the OddsFantasy tracker as a reconciliation aid for that activity, rather than assuming it covers trades placed elsewhere or uses your preferred accounting convention.

  1. Identify the relevant trades in bet history and compare them with your execution records.
  2. Build a worksheet of filled quantities, purchase costs, sale proceeds and confirmed fees.
  3. Recalculate the remaining shares and their allocated cost basis.
  4. Choose one valuation timestamp and price, then compare realized, unrealized and total PnL separately.

If a figure still differs, isolate the missing fill, valuation difference, cost treatment or reporting boundary before judging performance. A reproducible ledger is more useful than a headline profit number without a defined scope.

Frequently asked questions

What is the basic Polymarket PnL formula?

Realized PnL equals sale proceeds minus the cost basis allocated to sold shares and any selling fees not already deducted. Unrealized PnL equals the value of remaining shares minus their remaining cost basis. Add both for total position PnL, counting each incurred cost once.

Why does my unrealized profit differ from what I could get by selling?

Unrealized profit uses a valuation price. Actual sale proceeds depend on executed prices and quantities, while applicable selling fees reduce net proceeds. A displayed mark may not be available for your entire position.

Does a partial sale realize the whole position’s profit?

No. Only the sold shares contribute to realized PnL. The remaining shares retain their allocated cost basis and continue to have unrealized gains or losses until closed.

Does every Polymarket trade incur a fee?

No. Polymarket’s supplied documentation says taker fees apply on certain markets at match time, and makers are not charged fees. Check the applicable market and actual execution rather than applying one assumed rate to every trade.

Can I subtract slippage as an extra cost?

Not if your PnL already uses actual fill prices. The difference between an expected price and the executed price is already reflected in proceeds or purchase cost. You can report that difference separately as execution analysis without subtracting it again.

Sources

  1. Trading Fees | Polymarket Help Center — Polymarket Help Center
  2. Unrealized P&L definition — Interactive Brokers
  3. The Anatomy of a Blockchain Prediction Market: Polymarket in the 2024 U.S. Presidential Election — arXiv

Share This Post:

Related Articles

Lay the draw on autopilot: OddsFantasy match card with a goal in the 70th minute
lay the drawfootball tradingpolymarket botdraw marketautomation

Lay the Draw Strategy: Automate It on Polyma...

Buy No on the draw before kickoff and sell when a goal makes the price jump. How the lay the draw trade works on Polymarket, what ...

Cadell Griffith
Oct 02 2026
Illustrative Under 2.5 goals order at 52 cents, showing 40 units filled and 60 units remaining.
claude-codeprediction-marketstrading-automationtrading-botsorder-executionrisk-controls

Building a Prediction-Market Trading Bot wit...

Claude Code can help write a prediction-market bot, but reliable trading requires separate controls for credentials, market rules,...

Cadell Griffith
Oct 02 2026
Under 2.5 goals strategy on autopilot: OddsFantasy match card with a 10-minute stopwatch
under 2.5 goalsfootball tradingpolymarket bottime decayautomation

Under 2.5 Goals Trading Strategy: Automate I...

Buy Under 2.5 before kickoff, sell 10 minutes in, and let a stop-loss handle early goals. How the time-decay trade works and how t...

Cadell Griffith
Oct 01 2026