Strasmore Research
Learn Matt ConnorBy Matt Connor

How Futures Margin Works: SPAN and Calls

How futures margin works: initial versus maintenance levels, SPAN scenario risk, the nightly variation margin cash move, and why intraday rates vanish.

Futures margin works as a performance bond rather than a loan. You post a good faith deposit, the clearinghouse holds it against roughly one day of adverse movement in your position, and no cash is borrowed and no interest accrues. The equity market's 50% rule has no equivalent here, and the amount required is recalculated by the exchange rather than fixed by regulation.

The four numbers behind a futures margin account

  • Initial margin. The equity the account must hold before a contract is opened.
  • Maintenance margin. A lower floor. Once the position is live, equity has to stay above this line at every settlement.
  • Variation margin. Cash paid or received every night as the position is marked to the exchange settlement price.
  • Day trade margin. A reduced intraday requirement offered by the broker, available only while the position is closed before a cutoff near the session close.

The first two come from the clearinghouse, though a broker may require more. Variation margin is arithmetic on a published settlement price, and day trade margin is house policy that can be withdrawn without notice.

Initial margin versus maintenance margin

Initial margin is checked at the moment of entry. Maintenance margin is checked at every settlement afterwards, and it sits below the initial figure. The gap between them is deliberate. Routine daily swings should not generate paperwork.

While equity sits inside that band, the position is left alone. No one asks for money, and no new contract can be added at that equity level. Once equity settles below the maintenance floor, the broker issues a call, and the amount asked for restores equity to the initial requirement rather than to the floor it just broke. That is the detail that surprises people about the size of the wire.

The equity market handles both checks differently, and the full comparison lives in Reg T margin versus portfolio margin.

Is futures margin a loan?

No. Buying stock on margin under Reg T borrows money: you put up half the purchase price, the broker lends the rest, and the debit balance accrues interest for as long as it stays open. The aggregate size of that borrowing is published every month, which is the subject of the FINRA margin debt statistics. A futures deposit finances nothing. No money is advanced to you, and the deposit stays in your account as collateral against the position.

Broker call rates are quoted as a spread over a benchmark near the front of the yield curve. The cost of the stock version moves alongside that reference, and here is what it has done since 2019.

QueryShort term Treasury yields, the reference a stock margin loan is priced off
The exact SQL behind every number
SELECT
    toString(toStartOfMonth(date))                AS month,
    formatDateTime(toStartOfMonth(date), '%b %Y') AS month_label,
    round(avg(yield_3_month), 2)                  AS yield_3m_pct,
    round(avg(yield_2_year), 2)                   AS yield_2y_pct
FROM global_markets.treasury_yields
WHERE date >= '2019-01-01'
  AND date <  '2026-08-01'
GROUP BY month, month_label
ORDER BY month
Run this yourself

Between Jan 2019 and Jul 2026, the 3 month Treasury yield moved from 2.42% to 3.87%, including a long stretch near zero in between. A stock margin borrower paid a spread over something like that line on every day the loan stayed open. A futures trader posting a performance bond paid none of it. There is no meter to start.

What is SPAN margin?

SPAN is the Standard Portfolio Analysis of Risk, the scenario engine most futures clearinghouses use to set the initial and maintenance numbers. It does not multiply notional by a fixed percentage. It re prices your whole portfolio under a grid of scenarios and takes the worst outcome as the base requirement. The grid walks the underlying up and down across a defined scan range and shifts implied volatility at each step, and two extreme price shocks are added at reduced weight. Offsetting positions in the same product family earn credits, which is how a calendar spread ends up costing a fraction of two outright positions.

The scan range is the input worth understanding: an estimate of a large one day move. Futures are not equities, but a daily move distribution is the same object a scan range is built from, and a liquid stock ETF shows the shape plainly. The panel below sorts a decade of SPY sessions by how far the close moved from the prior close.

QueryA decade of SPY daily closing moves, sorted into size buckets
The exact SQL behind every number
WITH spy AS
(
    SELECT
        date,
        toFloat64(close) AS close_px,
        lagInFrame(toFloat64(close)) OVER
            (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2016-08-01'
      AND date <  '2026-08-01'
)
SELECT
    multiIf(move_pct < 0.5, 'under 0.5%',
            move_pct < 1.0, '0.5 to 1%',
            move_pct < 1.5, '1 to 1.5%',
            move_pct < 2.0, '1.5 to 2%',
            move_pct < 3.0, '2 to 3%',
                            '3% or more')                 AS move_bucket,
    count()                                               AS sessions,
    round(100 * count() / (SELECT count() FROM spy WHERE prev_close > 0), 1) AS share_pct
FROM
(
    SELECT abs(close_px / prev_close - 1) * 100 AS move_pct
    FROM spy
    WHERE prev_close > 0
)
GROUP BY move_bucket
ORDER BY min(move_pct)
Run this yourself

50% of those sessions finished within half a percent of the prior close, and 52 of them moved 3% or more. A flat percentage of notional charges the same amount for both kinds of day. A scenario model sets the requirement from the tail on the right.

That tail is specific to the underlying as well. The same measurement across six household names spreads out widely.

QueryOne day move size across six household names, five years to July 2026
The exact SQL behind every number
WITH moves AS
(
    SELECT
        ticker,
        date,
        toFloat64(close) AS close_px,
        lagInFrame(toFloat64(close)) OVER
            (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'KO', 'XOM', 'MSFT', 'AAPL', 'AMD')
      AND date >= '2021-08-01'
      AND date <  '2026-08-01'
)
SELECT
    ticker,
    round(quantileDeterministic(0.50)(abs(close_px / prev_close - 1) * 100,
                                      toUInt64(toUnixTimestamp(date))), 2) AS median_move_pct,
    round(quantileDeterministic(0.99)(abs(close_px / prev_close - 1) * 100,
                                      toUInt64(toUnixTimestamp(date))), 2) AS pct99_move_pct
FROM moves
WHERE prev_close > 0
GROUP BY ticker
ORDER BY pct99_move_pct DESC
Run this yourself

Over the five years to July 2026, the widest of the six is AMD, whose 99th percentile one day move measured 10.77% against a median session of 1.95%. The narrowest, SPY, reached 3.25% at the same percentile. Identical notional, very different worst case scenario loss.

Why the requirement changes from month to month

A margin table is a dated document. Here is that same daily move measure for SPY broken out month by month, with the typical session next to the largest one in each month.

QuerySPY typical and largest daily move, month by month since 2019
The exact SQL behind every number
WITH spy AS
(
    SELECT
        date,
        toFloat64(close) AS close_px,
        lagInFrame(toFloat64(close)) OVER
            (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2019-01-01'
      AND date <  '2026-08-01'
)
SELECT
    toString(toStartOfMonth(date))                AS month,
    formatDateTime(toStartOfMonth(date), '%b %Y') AS month_label,
    round(quantileDeterministic(0.50)(abs(close_px / prev_close - 1) * 100,
                                      toUInt64(toUnixTimestamp(date))), 2) AS median_move_pct,
    round(max(abs(close_px / prev_close - 1) * 100), 2)                    AS largest_move_pct
FROM spy
WHERE prev_close > 0
GROUP BY month, month_label
ORDER BY month
Run this yourself

In Jan 2019 the median session moved 0.77% while the largest single session moved 3.35%. In Jul 2026 the median was 0.45% against a largest session of 1.68%. Requirements written against the calm months would be undersized in the loud ones. Exchanges revise them as the inputs move, sometimes inside a single week.

Variation margin moves real cash every night

At the end of each session the exchange publishes a settlement price for every contract. Open positions are marked to it, and the difference from the previous settlement is paid overnight in cash. A long sitting on a gain receives money. A long sitting on a loss pays it that night, out of the account.

This is where futures separate hardest from stock. A stock position down 10% carries an unrealized loss on the statement until the day you sell. A futures position down 10% has already settled the cash. A futures account can sit comfortably above its requirement on Monday and be short of it on Tuesday morning without a single order being placed.

Watch a maintenance call fire over five days

The sequence is easiest to see by running it. The script below is plain Python 3 with no imports. It hardcodes a five day settlement path, a synthetic contract worth $50 per point, an initial requirement of $12,000, and a maintenance floor of $11,000. The numbers are round and invented on purpose: real requirements are set per product and revised often, so any printed figure goes stale.

# Synthetic contract. Round numbers, not a live product's requirements.
MULTIPLIER  = 50        # dollars of profit or loss per 1.00 point
INITIAL     = 12000.00  # posted before the contract is opened
MAINTENANCE = 11000.00  # the floor equity must stay above afterwards

equity = 15000.00
path = [5000.00, 4980.00, 4960.00, 4930.00, 4940.00, 4890.00]

print(f"day 0  fill at {path[0]:8.2f}                        equity {equity:9.2f}")

for day in range(1, len(path)):
    variation = (path[day] - path[day - 1]) * MULTIPLIER
    equity += variation
    line = (f"day {day}  settle at {path[day]:8.2f}"
            f"  variation {variation:9.2f}"
            f"  equity {equity:9.2f}")
    if equity < MAINTENANCE:
        line += f"  CALL for {INITIAL - equity:9.2f}"
    print(line)

Day 3 leaves equity at 11,500, below the initial requirement and above the maintenance floor. Nothing happens there: no call, and no room to add a contract. Day 5 settles equity at 9,500, under the floor, and the call is for 2,500, the amount that restores the initial requirement rather than the floor. Note also that cash left the account on four of the five days. None of it waited for a closing trade.

Day trade margin expires at the close

Day trade margin, also called intraday margin, is the reduced requirement a broker will accept while a position is opened and closed inside the same session. It is a broker concession rather than an exchange rule, and it carries a cutoff, commonly 15 to 30 minutes before the session close. A position still open at that cutoff is measured against the full exchange initial requirement, and most futures account agreements permit the broker to liquidate it rather than carry it.

House policy runs the other way as well. Brokers routinely require more than the exchange minimum on volatile products, the same pattern that shows up on the equity options side in margin for selling naked options. The contract you choose also scales every number above: a micro version carries a fraction of the full sized multiplier and requirement, and the symbol itself tells you which one is in the account, as how to read a futures symbol sets out.

FAQ

What is the difference between initial and maintenance margin on futures?

Initial margin is the equity required before a contract is opened, and maintenance margin is the lower floor equity must stay above at every settlement afterwards. Between the two levels the position is left alone, though it will not support a new contract. Below the floor, the broker calls for enough cash to restore the initial amount.

Is futures margin a loan?

No. It is a performance bond held against roughly one day of adverse movement in the position, so nothing is borrowed and no interest accrues on it. Stock margin under Reg T is the opposite arrangement: a real loan, with a rate attached to the debit balance.

What is SPAN margin?

SPAN, the Standard Portfolio Analysis of Risk, is the scenario based calculation many clearinghouses use to set futures margin. It re prices the portfolio across a grid of price and volatility scenarios, takes the worst outcome as the base requirement, then applies credits for offsetting positions in the same family.

What happens if I get a futures margin call?

The account has to be brought back to the initial requirement, usually by wiring cash or by reducing the position. Futures calls run on a short clock, often the same or the next session, and account agreements generally permit the broker to liquidate positions once the deadline passes.

How much is day trading margin on futures?

It varies by broker and by product, and it is a broker concession rather than an exchange number. It applies only while the position is closed before the broker's intraday cutoff. Held past that point, the position is measured against the full exchange initial requirement.


Every panel above ships with the SQL that produced it, so open one and read how the number was counted. To build the same daily move distribution for a name you follow, ask for it in plain English on the Strasmore terminal.