test_regime.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from argus_mcp.models import MarketQuote
  2. from argus_mcp.regime import build_regime_snapshot
  3. def test_regime_prefers_risk_on_when_qqq_leads():
  4. snapshot = build_regime_snapshot(
  5. [
  6. MarketQuote(symbol="QQQ", source="test", change_pct=2.0),
  7. MarketQuote(symbol="SPY", source="test", change_pct=0.5),
  8. MarketQuote(symbol="BTCUSD", source="test", change_pct=2.5),
  9. MarketQuote(symbol="ETHUSD", source="test", change_pct=4.0),
  10. MarketQuote(symbol="HYG", source="test", change_pct=0.8),
  11. MarketQuote(symbol="UUP", source="test", change_pct=-0.3),
  12. MarketQuote(symbol="VXX", source="test", change_pct=-1.5),
  13. ]
  14. )
  15. assert snapshot.regime == "risk_on"
  16. assert snapshot.confidence > 0
  17. assert snapshot.components["risk_appetite"] > 0
  18. def test_regime_prefers_stress_when_vol_spikes_and_credit_weakens():
  19. snapshot = build_regime_snapshot(
  20. [
  21. MarketQuote(symbol="QQQ", source="test", change_pct=-1.5),
  22. MarketQuote(symbol="SPY", source="test", change_pct=-0.9),
  23. MarketQuote(symbol="BTCUSD", source="test", change_pct=-3.5),
  24. MarketQuote(symbol="HYG", source="test", change_pct=-1.0),
  25. MarketQuote(symbol="UUP", source="test", change_pct=0.7),
  26. MarketQuote(symbol="VXX", source="test", change_pct=4.5),
  27. MarketQuote(symbol="UVXY", source="test", change_pct=8.0),
  28. MarketQuote(symbol="TLT", source="test", change_pct=1.0),
  29. ]
  30. )
  31. assert snapshot.regime in {"stress", "risk_off"}
  32. assert snapshot.components["stress"] > 0
  33. def test_regime_handles_no_data():
  34. snapshot = build_regime_snapshot([])
  35. assert snapshot.regime == "no_data"
  36. assert snapshot.confidence == 0.0
  37. def test_regime_responds_to_metals_strength():
  38. snapshot = build_regime_snapshot(
  39. [
  40. MarketQuote(symbol="XAU", source="metals_mcp", change_pct=1.8),
  41. MarketQuote(symbol="XAG", source="metals_mcp", change_pct=1.2),
  42. MarketQuote(symbol="XPT", source="metals_mcp", change_pct=0.9),
  43. MarketQuote(symbol="XPD", source="metals_mcp", change_pct=0.7),
  44. ]
  45. )
  46. assert snapshot.components["real_asset_pressure"] > 0
  47. assert snapshot.regime in {"real_asset_inflation", "neutral", "risk_off", "compression"}