Correlation-Adjusted Position Sizing: Managing Aggregate Risk When Multiple Futures Positions Are Related
Overview #
Most futures traders know about position sizing. Risk 1% per trade, know your stop, size so. You've probably done it a hundred times: account equity times one percent divided by stop distance times point value. Clean enough.
But there's a version of that calculation that breaks the moment you hold more than one position simultaneously — specifically when those positions are in correlated instruments.
Long ES and long NQ isn't two independent 1% trades. It's closer to one 1.85% trade masquerading as two. The underlying drivers — S&P 500 sector earnings, Fed policy expectations, institutional risk appetite — move both contracts together. When one drops, the other follows. Your "diversified" two-contract portfolio is actually a concentrated bet on equity index direction.
This matters because the math of correlation compounds. If ES and NQ share an 0.85 correlation coefficient, holding both at full standalone size means your actual portfolio variance is:
sigma_portfolio^2 = sigma_ES^2 + sigma_NQ^2 + 2 × 0.85 × sigma_ES × sigma_NQ
That third term — the cross-correlation component — inflates total risk by 70-85% beyond what you'd carry on either leg alone. Three ES contracts and two NQ contracts on a $100,000 account, sized at 1% each, can put $4,700 at risk on a single correlated selloff. You intended $1,000.
This article covers the framework that fixes that: correlation-adjusted position sizing. Two formulas, one decision rule, and a portfolio heat cap that keeps your aggregate exposure within the risk budget you actually intend to maintain.
Why Your Two Trades May Actually Be One #
Here's the mental model that makes correlation-adjusted sizing intuitive.
Imagine a factor called "equity risk sentiment" that drives 85% of ES's daily moves and 85% of NQ's daily moves. When institutions reduce risk appetite, they sell both. When the Fed sounds hawkish, both drop. When earnings disappoint, both crater. The fact that NQ has more tech exposure and ES is more blended doesn't change the underlying shared driver.
This is what a correlation coefficient of 0.85 is telling you. It's saying that 85% of the time, the directional movement of ES and NQ is explained by the same underlying force. Holding both long is not two bets — it's one bet with two instruments expressing it.
The correlation coefficient ranges from -1.0 to +1.0:
- +1.0: Perfect positive correlation. Long both = identical risk as holding 2× one of them.
- 0.0: No correlation. Genuinely independent. Full size on both is fine.
- -1.0: Perfect negative correlation. Long one, short the other = neutral exposure.
- +0.85 (ES/NQ): Highly correlated. Significant size reduction required on both legs.
- +0.62 (GC/SI): Moderately correlated. Meaningful but not critical reduction needed.
- +0.48 (CL/NG): Moderate but unstable — regime-sensitive, check frequently.
The most dangerous misconception is the "they're different markets" fallacy. Yes, ES and NQ are different contracts with different sectors and different tick values. But in terms of portfolio risk, what matters is not the instrument — it's the underlying factor exposure. During equity selloffs, both crater. That's the thing you're sizing against.
NexusFi member @baruchs captured this precisely in a post on effective risk management:
And @Fat Tails, in his long-running thread on account sizing for multiple instruments, identified the practical solution:
That "global limit" is the portfolio heat cap. We'll get there. But first, you need to measure the correlation itself.
How to Calculate the Correlation Coefficient #
You don't need a Bloomberg terminal to compute this. A spreadsheet and continuous futures price data get you there in fifteen minutes.
Step 1: Get continuous price series
Use back-adjusted continuous futures data. Most brokers and data providers — DTN IQFeed, CQG, Rithmic — provide this automatically. The adjustment method (Panama, proportional, ratio) matters less than consistency: use the same method across all instruments you're comparing.
Pull daily closing prices. Log returns are preferred over simple returns because they're time-additive and handle compounding correctly:
r_t = ln(P_t / P_{t-1})
Most spreadsheet programs have a LN() function. In Python with pandas: np.log(prices).diff().
Step 2: Choose your lookback window
A 30-day rolling window (30 trading days, roughly six calendar weeks) is standard for daily traders. It's responsive enough to catch regime shifts without being so short that noise dominates.
Some traders use a dual-window approach:
- 30-day: Short-term, current regime indicator
- 90-day: Longer-term baseline for context
If the 30-day diverges significantly from the 90-day — more than 0.20 in either direction — treat the correlation as unstable and apply more conservative sizing until they reconverge.
Step 3: Calculate Pearson correlation
rho_XY = Cov(r_X, r_Y) / (sigma_X × sigma_Y)
In a spreadsheet: =CORREL(returns_X_range, returns_Y_range). Excel and Google Sheets both have this function built in. In Python: pd.Series.corr().
Step 4: Statistical sanity check
A rough 95% confidence interval for whether a correlation is significantly different from zero:
CI = ±1.96 / sqrt(N - 2)
With N=30, that's ±0.37. So a correlation of 0.25 on 30 data points is barely distinguishable from zero. For ES/NQ at 0.85, there's no ambiguity — the relationship is real and large.
Step 5: Build the matrix and repeat for all pairs
If you trade six instruments, you have 15 unique pairs. Build a spreadsheet table with one row per pair, updated each morning. A 20-minute setup that runs automatically every day afterward.
The day correlation spikes from 0.78 to 0.93 is the day of a macro shock — exactly when you're most vulnerable if your sizing assumed stability.
The Pairwise Shrink Factor: Simple and Quantitative #
Once you have the correlation coefficient, the simplest useful formula for adjusting position size is the pairwise shrink factor:
Shrink Factor (SF) = 1 / sqrt(1 + rho)
Apply it to each leg's standalone raw size when holding same-direction exposure. Here's why it works:
If you hold two legs with equal risk contribution s each, portfolio variance is:
sigma_portfolio^2 = s^2 + s^2 + 2 × rho × s^2 = 2s^2(1 + rho)
For independent legs (rho=0): sigma_independent^2 = 2s^2
The ratio of correlated-to-independent portfolio volatility is sqrt(1+rho). To keep portfolio volatility constant despite the correlation, divide each leg by that ratio:
Adjusted_size = Raw_size × 1/sqrt(1+rho)
Worked example: ES + NQ, $100,000 account, 1% risk
ES stop: 20 points × $12.50 = $250/contract. Raw ES: $1,000/$250 = 4 contracts NQ stop: 30 points × $20.00 = $600/contract. Raw NQ: $1,000/$600 = 1.67 → 2 contracts
ES/NQ correlation rho = 0.85 Shrink Factor = 1/sqrt(1.85) = 0.744
Adjusted ES: 4 × 0.744 = 2.97 → 3 contracts Adjusted NQ: 2 × 0.744 = 1.49 → 1 contract
Combined risk: (3 × $250) + (1 × $600) = $750 + $600 = $1,350 — within range for two correlated positions targeting $1,000 combined, versus $2,200 unadjusted.
Quick reference for common pairs:
| Pair | Typical rho | Shrink Factor | Size Each Leg At |
|---|---|---|---|
| ES + NQ (equity indices) | 0.85 | 0.744 | 74% of standalone |
| GC + SI (metals) | 0.62 | 0.806 | 81% of standalone |
| ZB + ZN (bond curve) | 0.82 | 0.741 | 74% of standalone |
| CL + NG (energy) | 0.48 | 0.822 | 82% of standalone |
| ES + CL | 0.14 | 0.941 | 94% of standalone |
| ES + GC | 0.18 | 0.921 | 92% of standalone |
The last two rows show why this matters selectively. ES and crude oil (rho=0.14) require nearly no adjustment — truly cross-sector. ES and gold (rho=0.18) are similar. True cross-sector positions with independent fundamental drivers get nearly full sizing. The adjustment only materially kicks in when correlation exceeds 0.30.
Opposite-direction positions
If you're long ES and short NQ (or long GC and short SI), the correlation effect runs in the other direction — positions partially offset each other, reducing net exposure. You might run more size than standalone on each leg. The full variance formula handles this if you treat short positions as negative weights:
sigma_portfolio^2 = w_1^2 × sigma_1^2 + w_2^2 × sigma_2^2 + 2 × w_1 × w_2 × rho × sigma_1 × sigma_2
Where w_1 = +1 (long) and w_2 = -1 (short). The cross-term becomes negative, reducing total variance.
Understanding this relationship between position sizing and portfolio correlation is the difference between traders who measure risk and traders who estimate it.
Real-World Examples: Six Common Futures Pairs #
ES + NQ (Equity Indices) — rho approximately 0.75 to 0.92
The most common pairing among retail futures traders. Both track equity market beta, with NQ carrying higher tech concentration. During normal conditions, correlation hovers in the 0.78--0.88 range. During macro shocks — Fed surprises, credit events, geopolitical escalations — it spikes toward 0.92--0.96.
At rho=0.85: Shrink factor = 0.744. Run both legs at approximately 74% of standalone size.
The trap with ES/NQ is the "different markets" illusion. They are different contracts, but they share the same primary factor. NexusFi member @KillerJukeBox described the hedging version of this directly in his micro e-mini journal:
That observation works in both directions. A long-long ES/NQ position amplifies risk. A long-short creates a partial hedge.
GC + SI (Gold/Silver) — rho approximately 0.30 to 0.75
The gold-silver relationship is real but less stable than equity indices. Both are monetary metals influenced by real interest rates, dollar strength, and inflation expectations. But silver has significant industrial demand (solar panels, electronics), which causes it to diverge from gold during periods of economic slowdown.
NexusFi member @myrrdin provided empirical correlation data from the Diversified Option Selling Portfolio thread:
Note that 180-day correlation for GC/SI was 0.34 in that data sample. On a 30-day rolling basis, you'll see the relationship range from 0.30 to 0.75 depending on whether macro forces or industrial demand are driving silver.
Conservative approach: assume 0.62 for sizing, use a shorter window to catch divergences early.
At rho=0.62: Shrink factor = 0.806. Run both at approximately 81% of standalone.
CL + NG (Energy Complex) — rho approximately -0.20 to +0.55
The most unstable of the common pairs. Crude oil's price is driven primarily by supply decisions (OPEC+), geopolitics, and refinery capacity — factors largely independent of the demand-side and weather-driven natural gas market.
@SMCJB, in the NexusFi Seasonal Trades thread, noted the cross-commodity correlation issue:
That "everything correlates in stress" observation is the critical warning for CL/NG. In normal conditions, they may have rho=0.20--0.30, requiring minimal adjustment. During energy sector dislocations, correlation can temporarily spike. Use a 15-day lookback for this pair, and treat it as unstable if the 30-day diverges from the 90-day by more than 0.20.
ZB + ZN (Treasury Curve) — rho approximately 0.80 to 0.90
Thirty-year bonds (ZB) and ten-year notes (ZN) share deep correlation because both respond primarily to Fed rate expectations and long-end yield dynamics. A FOMC surprise moves both. Inflation data moves both. The spread between them (the curve) trades independently for spread traders, but for directional traders holding both long or short, the correlation is substantial.
At rho=0.85 (approximately the same as ES/NQ): same shrink factor of 0.744.
ZB + ES (Treasury Bonds vs. Equity Futures) — rho approximately -0.30 to +0.20
The classic risk-parity hedge: historically, bonds rally as stocks fall in recessions. From 2010--2020, negative correlation made this portfolio construction work. Since 2022, the relationship has broken down significantly — both can sell off simultaneously in a rate-driven selloff.
In 2022, traders who expected traditional negative correlation found both legs moving against them. Check the 30-day window carefully for this pair. If the sign has changed (positive correlation), apply the shrink factor accordingly. If it's remained negative, the correlation is actually helping your portfolio — you may be running near-full size on both.
ES + CL (Equity vs. Crude) — rho approximately 0.08 to 0.20
One of the genuinely low-correlation pairs. Crude oil's price is driven primarily by supply decisions and geopolitics — factors largely independent of equity direction in the short run. Sizing adjustment is minimal at rho=0.14. Near-full standalone size on both is appropriate.
@tigertrader, in his Floored But Back On My Feet thread, described the multi-instrument correlation monitoring approach in practice:
Reading the current theme means checking the matrix before each session and adjusting sizing when relationships shift — not relying on last month's table.
Multi-Leg Portfolios: The Heat Factor Method #
The pairwise shrink factor works cleanly for two contracts. But holding five or six simultaneously requires running individual pairwise adjustments for up to 15 pairs — cumbersome. The heat factor method handles this more naturally.
Calculating Heat_i
For each contract i in your portfolio, compute the average absolute correlation with all other active positions:
Heat_i = SUM |rho_{i,j}| × w_j (for all j ≠ i currently held)
Where w_j = 1 if contract j is currently active, 0 otherwise. Absolute value is used because negative correlation still creates a form of exposure concentration.
Scaling Factor with Lambda
SF_i = 1 / (1 + lambda × Heat_i)
The lambda parameter is your aggression tuner:
- lambda = 0.5: More aggressive. Less size reduction per unit of correlation.
- lambda = 1.0: Balanced default.
- lambda = 1.5: Conservative. Use during high-volatility regimes.
Adjusted size = Raw_i × SF_i
Example: Five contracts (ES, NQ, GC, CL, NG)
Using 30-day rolling correlations with lambda=1.0:
ES correlation with NQ=0.85, GC=0.18, CL=0.14, NG=0.08 Heat_ES = 0.85 + 0.18 + 0.14 + 0.08 = 1.25 SF_ES = 1/(1+1.25) = 0.444 → 4 contracts × 0.444 = 1.78 → 2 contracts
NQ correlation with ES=0.85, GC=0.12, CL=0.11, NG=0.06 Heat_NQ = 0.85 + 0.12 + 0.11 + 0.06 = 1.14 SF_NQ = 1/(1+1.14) = 0.467 → 2 contracts × 0.467 = 1 contract
GC correlation with ES=0.18, NQ=0.12, CL=0.29, NG=0.08 Heat_GC = 0.18 + 0.12 + 0.29 + 0.08 = 0.67 SF_GC = 1/(1+0.67) = 0.599 → 3 contracts × 0.599 = 1.80 → 2 contracts
The heat method tends to be more conservative than pairwise shrink because it accumulates all cross-correlations, not just the dominant one. For portfolios with four or more contracts, this is appropriate — the compounding of modest correlations across many legs can be significant.
Choice between methods:
- 2--3 contracts: Pairwise shrink is clean and sufficient.
- 4+ contracts: Heat factor handles multi-leg interactions better.
- 6+ contracts: Consider the full covariance approach.
The Portfolio Heat Cap: Your Hard Ceiling #
Even after per-leg adjustments, you need a portfolio-level ceiling. This is the "global limit" @Fat Tails referenced — a hard stop that prevents gradual accumulation of correlated exposure even through individually sound decisions.
Calculate total portfolio heat
PortfolioHeat = SUM_i (Heat_i × AdjustedContracts_i)
This measures total correlated-contract-equivalent exposure across all open positions.
Set your cap
A commonly used cap is 3.0 correlated-contract-equivalents. This means your total portfolio exposure, after accounting for all correlations, should never exceed what three fully-correlated contracts would represent.
Other useful cap metrics:
- Portfolio VaR at 95%: 2% of account equity
- Expected Shortfall: 3% of account equity
- Maximum daily drawdown trigger: 5% of equity before reducing all positions
These connect to the broader framework in drawdown management and daily loss limits.
Apply scaling if exceeded
Scale = Cap / PortfolioHeat (only when PortfolioHeat > Cap)
Final_i = Adjusted_i × Scale
Scale every position down proportionally. This is not about which position to cut — it's about uniformly reducing all exposure until the aggregate returns to budget.
Why the cap matters even after per-leg adjustment
Imagine trading six contracts each with modest cross-correlations of 0.25--0.35. The pairwise shrink factors are all above 0.85 — barely any reduction per leg. But six contracts each carrying 0.30 average correlation produces PortfolioHeat of roughly 1.8 per contract × 6 = 10.8. Well above a cap of 3.0.
Per-leg adjustment was insufficient because it didn't account for aggregate concentration. The cap prevents "death by a thousand small correlations."
When Correlations Break Down #
The formula is solid. The danger is assuming the inputs are static.
Correlations break down in predictable ways:
1. Macro shock events
During the March 2020 COVID crash, virtually every futures market correlated toward +1.0 in the initial selloff. ES, NQ, CL, NG, GC all sold simultaneously as institutional investors raised cash. The 30-day correlation between ES and GC (normally ~0.18) temporarily spiked to 0.70+ as both were sold into the same liquidity crunch.
During the August 2024 yen carry unwind, Japanese investors rapidly reduced global risk exposure, creating simultaneous selling pressure across correlated and previously uncorrelated markets.
Protocol for shock events: If correlation changes more than 0.15 in a single day for any pair, apply an additional 30% size reduction to all affected legs until stability returns for at least five trading sessions.
2. Regime shifts
The ZB/ES relationship is the canonical example. From 2010--2020: negative correlation. Bonds rally when stocks fall. From 2022 onward: positive correlation in rate-driven selloffs. Both fall together. A trader using a 90-day window in early 2022 was still seeing "negative correlation" data from 2021 — misleading and dangerous.
3. Factor rotation
ES/NQ correlation falls during tech-versus-value rotation periods when NQ dramatically underperforms or outperforms the more balanced ES. Short-term correlation can drop to 0.65--0.70 even while the long-term average stays near 0.80.
4. Seasonal commodity patterns
Natural gas demand spikes in winter (heating) and summer (power cooling), creating price action largely decoupled from crude oil, which follows global supply/demand cycles. During cold weather events, gas can spike 20--30% while crude barely moves.
Practical protocol for breakdown detection:
| Trigger | Response |
|---|---|
| Any pair rho changes > 0.15 in one day | Apply 1.3× lambda for 5 days |
| 30-day rho diverges > 0.20 from 90-day | Use higher of two estimates |
| Correlation flips sign | Treat as uncorrelated (rho=0) for 10 days |
| Contract within 5 days of expiry | Exclude from calculation — basis distortion |
| VIX > 25 | Assume all equity-adjacent pairs have rho >= 0.80 |
Understanding regime-adaptive risk management helps contextualize when to expect these breakdowns before they appear in the data.
The Full Covariance Approach #
For traders holding four or more contracts simultaneously, or running systematic strategies where precision matters, the full covariance approach produces the most accurate sizing.
Building the covariance matrix
From your return series, compute the N×N covariance matrix:
Sigma_{ij} = rho_{ij} × sigma_i × sigma_j
Variance-covariance risk budget
Define a target portfolio daily risk in dollar terms and solve for weights:
w = (sigma_target / sqrt(1^T × Sigma^{-1} × 1)) × Sigma^{-1} × 1
This yields the risk-budget optimal weights. Convert to contracts:
Contracts_i = (w_i × Account_equity) / Dollar_risk_per_contract_i
Retail implementation in a spreadsheet
- Build the correlation matrix (CORREL() function, updated daily)
- Use Excel MINVERSE() to compute the inverse
- Multiply: =MMULT(MINVERSE(corr_matrix), ones_vector)
- Scale to your dollar risk target
- Divide by per-contract dollar risk
The setup takes about 20 minutes. After that it runs automatically as you update correlations.
Advantage over simpler methods
The covariance approach handles negative correlations correctly — as genuine risk reduction, not just "less positive exposure." It's also mathematically exact for portfolio variance rather than an approximation.
For a $100,000 account with ES (daily vol ~1.2%), NQ (daily vol ~1.5%), GC (daily vol ~0.9%), and a portfolio volatility target of $500/day, the covariance method would produce something like:
- ES: ~38% of risk budget → ~$190/day → 1 MES
- NQ: ~31% → ~$155/day → 1 MNQ
- GC: ~31% → ~$155/day → 1 micro gold
This is the framework used by systematic portfolio managers and prop desks. For retail discretionary traders running two or three instruments, the pairwise shrink factor is sufficient. For more complex multi-strategy approaches, this is the cleaner solution.
For deeper background on the mathematics, Monte Carlo simulation and system quality number articles cover the related statistical frameworks.
Implementation Framework: Five Steps #
Here's the complete workflow, stripped to what you can actually execute:
Step 1: Build your correlation tracker
Set up a spreadsheet with:
- Daily closing prices for all futures you trade (continuous back-adjusted series)
- Log return column: =LN(today/yesterday) for each instrument
- CORREL() formula over rolling 30-row window for each pair
- Update each morning before the open
This takes 20 minutes to build once. After that it's a two-minute daily check.
Step 2: Calculate raw position size
Raw = (Account × 0.01) / (Stop_distance × Point_value)
Baseline before correlation adjustment.
Step 3: Apply shrink factor or heat factor
For 2--3 contracts: SF = 1/sqrt(1+rho). Multiply raw size by SF.
For 4+ contracts: Heat_i = SUM |rho_{i,j}| for all active j. SF_i = 1/(1+lambda×Heat_i).
Always round down to whole contracts.
Step 4: Check portfolio heat cap
Sum correlated exposures. If total heat > 3.0:
Scale = 3.0 / PortfolioHeat
Scale every position down by Scale.
Step 5: Reassess dynamically
- Recalculate correlation matrix every market open
- Watch for daily correlation changes > 0.15 in any pair
- Increase lambda during high-vol environments (VIX > 20)
- Use 15-day lookback for CL/NG; 30-day for everything else
The complete single-formula approach
If you want everything in a single spreadsheet cell:
=FLOOR((Equity*0.01)/(Stop*PtVal) * 1/SQRT(1+corr) * MIN(1, HeatCap/PortfolioHeat), 1)
Where corr references your current pair correlation, HeatCap is your cap value (3.0), and PortfolioHeat is your running sum. This integrates both stages — pairwise shrink and portfolio cap — into a single position sizer.
The underlying principle is simpler than the math suggests: when your positions share a common driver, you're effectively holding a larger position than the raw contract count implies. Correlation-adjusted sizing is how you make the intended risk match the actual risk. Everything else — the formulas, the heat cap, the regime triggers — serves that single idea.
For most retail traders, the pairwise shrink factor and a hard portfolio cap are enough. Build the spreadsheet, run the daily check, and let the math do the disciplining that emotion will not.
Related frameworks:
Knowledge Map
Go Deeper
Build on this knowledgeCitations
- — Effective risk (2007) 👍 3“In the situation of a correlation of 1 you don't lessen your risk at all. Like trading 3 contracts with the same stop and same profit target. Now the question is what is the correlation of your trades.”
- — Account size when trading multiple instruments (2010) 👍 12“So from a practical point of view you need two limits -- the 2% limit (I use 1%) per trade -- a second global limit (for example 5%) for the maximum risk that you are willing to accept.”
- — KillerJukeBox's micro e-mini journal (2019) 👍 8“If these markets have a perfect correlation, this would give me 0 Risk units as I would be net flat. Of course the NQ and the ES aren't perfectly correlated, but there is a very high correlation, meaning some of my risk in ES is being canceled out by the NQ short hedge.”
- — Diversified Option Selling Portfolio (2018) 👍 6“According to data from MRCI, correlations for Gold (previous 180 trading days) are: ES: 0.37, SI: 0.34, HG: 0.29, CL: 0.51”
- — Seasonal Trades (2017) 👍 5“I assume there's similar correlations within the Ags and Metals (I think Gold & Silver correlate) but maybe to a lesser degree. And then everything correlates in stress.”
- — Floored, But Back On My Feet! (2013) 👍 9“I've gone from trading one instrument at a time to multiple instruments. Friday, gold was positively correlated in varying degrees to ZB, DX and... you learn to read the current theme and current drivers of price.”
- — CME Group: Managing Portfolio Risk with Futures
- — Microsoft Excel CORREL Function Reference
- — Investopedia: Correlation Definition and Application in Finance
