test_regime.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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