import pandas as pd from futures_overlay import optimize_futures_overlay def test_optimize_futures_overlay_returns_empty_when_no_cash(): weights = pd.Series({"SPY": 0.6, "TLT": 0.3, "CASH": 0.0}) betas = pd.Series({"SPY": 1.0, "TLT": 0.2}) cfg = { "with_futures": True, "overlay_mode": "beta_hedge", "futures_universe": ["MES", "ES"], "futures_safety_multiplier": 3.0, "futures_margin_headroom": 0.05, "futures_target_beta": 0.0, } result = optimize_futures_overlay(weights, betas, capital=100000.0, cfg=cfg) assert result.contracts == {} assert result.margin_used == 0.0 def test_optimize_futures_overlay_preserves_core_weights(): weights = pd.Series({"SPY": 0.6, "TLT": 0.3, "CASH": 0.1}) betas = pd.Series({"SPY": 1.0, "TLT": 0.1}) cfg = { "with_futures": True, "overlay_mode": "beta_hedge", "futures_universe": ["MES", "ES"], "futures_safety_multiplier": 3.0, "futures_margin_headroom": 0.05, "futures_target_beta": 0.0, } result = optimize_futures_overlay(weights, betas, capital=100000.0, cfg=cfg) assert weights["CASH"] == 0.1 assert isinstance(result.contracts, dict) assert result.overlay_mode == "hedge" def test_optimize_futures_overlay_respects_margin_headroom(): weights = pd.Series({"SPY": 0.6, "TLT": 0.3, "CASH": 0.05}) betas = pd.Series({"SPY": 1.0, "TLT": 0.2}) cfg = { "with_futures": True, "overlay_mode": "beta_hedge", "futures_universe": ["MES", "ES"], "futures_safety_multiplier": 3.0, "futures_margin_headroom": 0.05, "futures_target_beta": 0.0, } result = optimize_futures_overlay(weights, betas, capital=100000.0, cfg=cfg) assert result.margin_used <= 100000.0 * weights["CASH"]