If you run a trading community — a Discord of grid-bot operators, a signal group, a small prop pod — every member sits at a different exchange fee tier. A few clear enough monthly volume to hit VIP 2 or 3; most sit at Regular. When you try to reason about "what does our group actually pay," a single headline number is useless. What you want is the blended rate: the volume-weighted average fee across everyone.
Here's how I model it.
The inputs
OKX USDT-perp taker fees by tier (published schedule, current after the April 2026 update):
| Tier | 30-day volume gate | Maker | Taker |
|---|---|---|---|
| Regular | < $5M | 0.0200% | 0.0500% |
| VIP 1 | ≥ $5M | 0.0160% | 0.0450% |
| VIP 2 | ≥ $10M | 0.0150% | 0.0360% |
| VIP 3 | ≥ $50M | 0.0100% | 0.0280% |
Most retail communities are a long tail: a handful of high-volume members and a large base at Regular. The blended rate is dominated by where the volume sits, not by headcount.
The model
# members: (monthly_notional_usd, taker_rate)
members = [
(2_000_000, 0.0500 / 100), # Regular
(2_500_000, 0.0500 / 100), # Regular
(6_000_000, 0.0450 / 100), # VIP 1
(12_000_000, 0.0360 / 100), # VIP 2
(55_000_000, 0.0280 / 100), # VIP 3
]
total_vol = sum(v for v, _ in members)
# volume-weighted blended rate
blended = sum(v * r for v, r in members) / total_vol
# naive headcount average (the wrong way)
naive = sum(r for _, r in members) / len(members)
print(f"total monthly volume: ${total_vol:,.0f}")
print(f"blended (volume-weighted): {blended * 100:.4f}%")
print(f"naive (headcount avg): {naive * 100:.4f}%")
Output:
total monthly volume: $77,500,000
blended (volume-weighted): 0.0329%
naive (headcount avg): 0.0418%
The naive average says 0.0418%. The real blended rate is 0.0329% — about 21% lower — because the single VIP 3 member carries most of the volume at the cheapest rate. If you price a group fee split or a community payout off the headcount average, you misjudge the pool by a fifth.
Two levers that move the blend
- Migration up the tiers. Moving your Regular base to VIP 1 barely dents the blend — they're small volume. Moving a mid-tier member from VIP 2 to VIP 3 moves it a lot. Effort should follow volume, not headcount.
- A flat fee share on paid fees. A partner-tier split applies the same fraction to everyone's paid fee regardless of tier, so it lowers the blended net rate uniformly — often a bigger, more predictable lever for the low-volume majority than chasing a tier they'll never reach.
I keep the underlying tier tables and a few community fee models in a public repo: https://github.com/jack0752168/crypto-exchange-fee-data — pull requests with other venues' schedules are welcome. The full OKX VIP tier breakdown (spot + futures, and the asset-vs-volume qualification rule) is here: https://www.jacktrader.xyz/en/blog/okx-vip-fee-tiers-2026.html
Model your community off the volume-weighted number, not the member count. The distribution is almost always more lopsided than it feels.
Not financial advice — educational modeling only. Fee schedules reflect published rates at time of writing and can change.
Top comments (0)