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.
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.
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.
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.

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.
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.
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.
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.
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.
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.

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.
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.
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.
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.
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.
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.
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.
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.
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.

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 ...

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

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...