BANGER
Product status: Banger’s public beta is paper-only. References to live execution are future-looking. Venue rules and legal claims can change; verify current primary sources for your jurisdiction.
2026-10-13 · 5 min read · reviewed 2026-10-14

Check Fee Assumptions in Prediction Market Backtest Results

A fee audit asks whether the result includes costs, which model it uses and which rules were applicable to the tested market and period. An experiment may deliberately omit costs to isolate a signal, but it must label that output as gross. There is no universal location where every strategy trades or every venue charges its maximum fee.

First question: were fees modeled at all?

Inspect the result model and per-fill accounting. If fees are not modeled, label that component gross rather than treating it as an exact net result. Check entry and any exit separately. A missing fee alone does not make the entire simulated result a guaranteed upper bound: other fill and valuation assumptions can err in either direction.

Execution role and market rules matter on both venues. A limit request can execute immediately, and a partial execution should retain its assumed or observed role. Do not infer fee-free maker treatment merely from the word limit. For an early exit, apply the relevant rule to that sale; for settlement, inspect the payout and any actual adjustment rather than pretending a second trade occurred.

Second question: which fee schedule, and from when?

A coefficient-times-quantity-times-price-times-one-minus-price component appears in the current published schedules, but multipliers, execution roles, exceptions and rounding still matter. A stale constant can be a declared historical or sensitivity assumption; it is wrong to present it as an exact current rule without checking the market.

Kalshi’s official PDF checked October 13, 2026 identifies a general taker coefficient of 0.07, market multipliers and a separate maker schedule. It states no general settlement fee. Its FIX settlement documentation separately describes a balance-rounding adjustment in a scalar example; that is not evidence for a list of unspecified fee-bearing series. Preserve the specific rule and actual report instead of inventing exceptions.

Polymarket international’s current fee page calculates a raw component using shares, price and a market/category rate, with separate maker treatment. Use the current market parameters for a current-rule experiment. Do not assert a universal effective date for every historical market or transfer these rules to the separate US venue.

Current category tables are useful references, but a reproducible backtest needs a market-specific, dated fee assumption:

A current fee table can support a declared sensitivity test. It cannot reconstruct which parameters applied to an old fill without historical evidence. Changing only fees also leaves queue position, timing and available liquidity unresolved.

Third question: how is rounding handled?

Kalshi’s current PDF describes rounding fee plus position cost to centicent precision. Its displayed cents are not the full operation. The public Banger 0.1.7 standard Kalshi helper instead rounds the fee component up to a whole cent. Record this model mismatch explicitly; do not claim the current venue rule is reproduced exactly. The sign of a broader simulation error depends on more than rounding alone.

Do not take a blog's rounded example as the rule. Pull the venue's own schedule, which is where the rounding behavior is actually specified, and reproduce it in the simulator.

Fourth question: what does the fee do to a small edge?

For a fixed quantity and coefficient, the raw price-times-one-minus-price component peaks at 0.50. That is a dollar-component observation, not a universal effective percentage of capital. Compare expected gross outcomes with fees, spread, slippage and fill uncertainty under declared units; avoid deducting spread twice if executable prices already include it.

A maker scenario and a taker scenario can be useful comparisons, but neither is automatically the correct forecast. Eligibility for rebates is separate from fee treatment. Preserve unavailable passive fills and partial quantities, and show what a changed execution assumption does to the same strategy and dataset.

A quick audit checklist

Where Banger fits

Banger’s public beta is paper-only. Its packaged 0.1.7 forward-paper fee policy selects a named standard Kalshi model; it does not implement every current venue/category schedule. Hosted historical backtesting is a separate path. Inspect the actual result model and source rather than assuming a visible setting exists to enable exact current fees in every mode.

from decimal import Decimal


def raw_fee_feature(contracts, price, rate):
    # A raw arithmetic component, NOT an exact venue invoice or rounding rule.
    c, p, r = map(lambda x: Decimal(str(x)), [contracts, price, rate])
    if not all(x.is_finite() for x in [c, p, r]):
        raise ValueError("inputs must be finite")
    if c < 0 or r < 0 or not 0 <= p <= 1:
        raise ValueError("invalid quantity, price or rate")
    return c * r * p * (1 - p)


print(raw_fee_feature("100", "0.50", "0.07"))  # 1.7500
# Assumed rate and quantity. Rounding, role and market rules are separate.

The snippet calculates a raw arithmetic feature only. Its illustrative fixtures were validated offline; it is not an exact invoice or an instruction to place a real trade. Preserve the current official rule, the simulator’s actual implementation and the declared experiment assumptions together. Banger’s non-crossing forward-paper fill assumption also needs review before interpreting net P&L.

Sources

Keep reading

Run your first strategy free

Paper-trade on Polymarket and Kalshi market data without venue keys.

Start free