Funding-Rate-Aware PnL: Why Crypto Journals Get This Wrong
Perpetual swap funding payments can flip a winning trade into a loser. Most journals ignore them entirely. Here's how to account for funding correctly.
You open a long BTC perpetual swap. Price goes up. You close for a profit. Your journal records a $300 winner.
Your exchange statement shows $220.
The difference is funding. And most trade journals never touch it.
How perpetual swap funding works
Perpetual swaps don't have an expiry date. To keep the perp price tethered to the underlying spot price, exchanges run a funding mechanism: every several hours, traders on the heavier side of the market pay traders on the lighter side.
When longs outnumber shorts (perp price trading above spot), longs pay shorts. When shorts dominate (perp below spot), shorts pay longs. The payment is calculated as:
Funding payment = funding rate × notional position value
Funding periods vary by exchange. Binance and Bybit run 8-hour funding, settling three times daily at 00:00, 08:00, and 16:00 UTC. Deribit quotes an 8-hour rate but accrues it continuously rather than at three discrete settlement points. Hyperliquid runs hourly funding, which means a 24-hour hold crosses 24 funding intervals instead of 3.
Rates fluctuate. In low-volatility periods with balanced market sentiment, 8-hour rates might sit around +0.005% to +0.010% for BTC. In a strong bull run with heavy long bias, rates can spike to +0.05% or higher for multiple consecutive periods.
The rate applies to your notional position size, not your margin. If you're trading with 10× leverage, a 0.01% funding rate on your notional hits your margin 10 times harder in relative terms.
The accounting problem
Funding payments don't appear in your fill history. They settle directly to or from your margin balance at each interval. Your exchange records them as separate transactions.
This means any journal that only imports trade fills (entry execution, exit execution, fee) sees a different trade than actually happened. The fill-based view is:
PnL = (exit price − entry price) × size − fees
The economically correct view is:
PnL = (exit price − entry price) × size − fees ± funding
For a quick scalp held minutes, funding is irrelevant, because no intervals are crossed. For a swing trade held two or three days, funding can be substantial.
The problem compounds further for traders running systematic strategies across multiple instruments. If you're holding 4 positions simultaneously over a weekend, funding across all of them affects your equity curve. A journal that doesn't model this will systematically overstate winners held during positive funding and understate winners held during negative funding (when longs receive payments).
Worked example with real numbers
You go long 1 BTC perpetual swap on Binance at $100,000. Nine funding intervals later (3 days), you exit at $100,500. Funding rate was consistently +0.01% per 8-hour interval throughout.
Naive fill-based PnL:
Gross PnL = ($100,500 − $100,000) × 1 BTC = $500
Taker fee at entry: $100,000 × 0.0005 = $50.00
Taker fee at exit: $100,500 × 0.0005 = $50.25
Total fees: $100.25
Fill-based net PnL = $500 − $100.25 = $399.75
Funding-aware PnL:
Funding per interval = 0.0001 × $100,000 notional = $10
Intervals crossed = 9 (3 days × 3 intervals/day)
Total funding paid out = 9 × $10 = $90
Funding-aware net PnL = $399.75 − $90 = $309.75
The journal without funding records a $399.75 winner. The economically real outcome is $309.75. That's a 22% overstatement of the actual profit.
Now scale the funding rate. In a highly leveraged bull market, rates can run +0.05% or higher per 8h interval. Same trade, same price move, same 9 intervals:
Funding per interval = 0.0005 × $100,000 = $50
Total funding = 9 × $50 = $450
Net PnL = $399.75 − $450 = −$50.25
The trade went from a $399 winner to a $50 loser. Price moved in your favor by $500. Funding payments consumed that gain and then some. A journal that only looks at fills records this as a solid win. Your exchange account is down.
This is not a hypothetical extreme. During certain bull periods in 2021 and again in late 2024, 8-hour BTC funding rates above +0.05% persisted for multiple days.
Inverse contracts compound the confusion
USD-margined linear contracts (the default on Binance and most venues) are straightforward: your PnL is in USDT and the math is linear.
Coin-margined inverse contracts, where the contract is denominated in USD but settles in the base currency, add a second layer of complexity. On a BTCUSD inverse contract, your margin and PnL are in BTC. One contract is typically worth $100. The PnL formula is:
PnL (BTC) = contracts × $100 × (1/entry_price − 1/exit_price)
When price rises from $100,000 to $100,500, a long on 100 inverse contracts looks like this:
PnL = 100 × $100 × (1/100,000 − 1/100,500)
= $10,000 × (0.00001000 − 0.00000995)
= $10,000 × 0.00000005
= 0.0004975 BTC
≈ $50.00 valued at the $100,500 exit price, but only ≈ $49.75 valued at the $100,000 entry. The same BTC profit is worth different dollar amounts depending on when you mark it.
The equivalent linear long would have made $50 exactly. Close, but the BTC PnL value changes with price. Now add funding: Hyperliquid runs hourly funding on its perps. A 3-day hold crosses 72 funding intervals. At a modest +0.003% per hour, that's 72 × 0.003% = 0.216% of notional, over double what 9 intervals of 8-hour funding would cost at 0.01%.
Traders using Hyperliquid for carries need to account for funding even on relatively short holds. The hourly cadence makes it relevant much sooner.
How a journal should handle it
The correct approach is to merge funding rows into the round-trip they belong to. Funding that settled while a position was open is part of that trade's economics, not a separate portfolio expense.
Specifically:
- Pull funding history from the exchange alongside trade history (separate API endpoints on most venues)
- Match each funding payment to the open position that was active when the interval settled, by instrument and direction
- Sum the attributable funding payments and include them in the round-trip's net PnL
This is what Viktury does. When you sync via read-only API, funding payments are fetched from the exchange's separate funding endpoint, attributed to open positions by timestamp and instrument, and rolled into the round-trip PnL. The number in your journal matches your exchange statement.
For CSV imports (Bybit), funding history can be exported separately and imported alongside trade history. Viktury's importer handles both files and performs the attribution automatically.
The result is that your win rate, average R, and expectancy calculations are based on economically real outcomes. A trade that looked like a 2R winner because price moved wasn't actually 2R if funding consumed half the gain. Your playbook performance data reflects what actually happened, which is the only version of the data worth making decisions from.
Read more on the foundational mechanics of building a useful trade journal in How to Journal Crypto Trades.
Start your free trial at Viktury and connect your exchange accounts in about five minutes.