Fees & Costs
No backtest result is valid without transaction costs applied. Gordon models fees, slippage, and funding rates at every layer.
Binance Futures fee schedule
All cost assumptions use VIP 0 (baseline tier, no BNB discount):
| Component | Value | Notes |
|---|---|---|
| Maker fee | 0.02% (2 bps) | Limit orders that add liquidity |
| Taker fee | 0.04% (4 bps) | Market orders and limit orders that take liquidity |
| Average funding (8h) | 0.01% (1 bp) | Long-term average; spikes to 0.1%+ during extreme sentiment |
Slippage estimates
Conservative estimates for typical position sizes ($2k–$5k account):
| Asset | Estimated slippage | Reason |
|---|---|---|
| BTC | 0.01% (1 bp) | Deepest order book in crypto |
| ETH | 0.015% (1.5 bps) | Second deepest, slightly wider spreads |
| SOL | 0.03% (3 bps) | More volatile, wider spreads at times |
Two cost models
Gordon uses two separate cost models that operate at different layers. This is intentional.
FeeModel (gordon-exchange, Rust)
The execution-layer model. Applied at order execution time on a per-order basis.
- Used by gordon-executor during live trading and by gordon-manager during backtest replay.
- Separate maker/taker rates.
- Slippage applied as additional basis points on market orders.
- Funding charged per 8h period on open positions.
CostModel (gordon-lab, Python)
The research-layer model. A round-trip convenience model for parameter sweeps and signal quality testing.
- Combines entry cost + exit cost + estimated slippage + estimated funding into a single round-trip number.
- Appropriate for Level 1 / Level 2 lab validation where throughput matters.
- Never used in live trading or production backtest replay — that path uses FeeModel.
The two models serve different layers. Unifying them would either slow down research or reduce execution accuracy.
Funding rate impact
Funding rates on perpetual futures can significantly impact trend-following returns:
- Longs pay shorts when funding is positive (most of the time in bull markets).
- Shorts pay longs when funding is negative.
- Charged every 8 hours on the full position value.
A position held for 30 days at average funding:
30 days × 3 periods/day × 0.01% = 0.9% of position valueThis is why the funding z-score overlay exists — to avoid entering positions when funding is abnormally high.