Spaces:
Running
Running
| 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"] | |