Guides

Download Binance funding rate history (CSV) for any perpetual

Monthly fundingRate files on data.binance.vision cover every USD-M perp since listing.

Why it happens

Files are monthly, for example futures/um/monthly/fundingRate/BTCUSDT/BTCUSDT-fundingRate-2026-09.zip, with columns calc_time, funding_interval_hours, last_funding_rate. A positive rate means longs pay shorts. The interval is in the file, so read funding_interval_hours rather than assuming three payments a day.

Fix it with plain pandas

import pandas as pd

f = pd.read_csv("BTCUSDT-fundingRate-2026-09.zip")
f.index = pd.to_datetime(f["calc_time"], unit="ms", utc=True)
annualised = f["last_funding_rate"] * (24 / f["funding_interval_hours"]) * 365
print(f"mean annualised funding: {annualised.mean():.1%}")

Or with Deptho

Once you have the series, Deptho charges each funding event against the position you actually held at that moment.

from deptho import datasets as bn
import deptho as dp

funding = bn.read_funding("BTCUSDT-fundingRate-2026-09.zip")
cost = dp.funding_cost(positions, funding)    # per-bar cost, + = you paid

Related