Download examples/risk_engine_example.py from ResearchEngineering/financial_news_bot: direct link, hf CLI and curl.
- Browser
- Download file 4.52 kB
-
https://huggingface.co/spaces/ResearchEngineering/financial_news_bot/resolve/main/examples/risk_engine_example.py
- Command line
-
hf download hf://spaces/ResearchEngineering/financial_news_bot/examples/risk_engine_example.py
-
curl -L -o risk_engine_example.py https://huggingface.co/spaces/ResearchEngineering/financial_news_bot/resolve/main/examples/risk_engine_example.py
4.52 kB
| """ | |
| Market Risk Engine - Usage Examples | |
| Simple examples showing how to use the Market Risk Engine. | |
| """ | |
| import asyncio | |
| from src.core.macroeconomics.markets.risk_engine import ( | |
| MarketRiskEngine, | |
| RiskRegime, | |
| RiskEngineConfig, | |
| ) | |
| async def example_1_basic_usage(): | |
| """Example 1: Basic risk assessment.""" | |
| print("\n=== Example 1: Basic Risk Assessment ===\n") | |
| # Initialize engine | |
| engine = MarketRiskEngine() | |
| # Get current risk score | |
| risk_score = await engine.assess_current_risk() | |
| # Display results | |
| print(f"Global Risk Score: {risk_score.risk_score:.1f}/100") | |
| print(f"Risk Regime: {risk_score.regime.value.upper()}") | |
| # Act based on regime | |
| if risk_score.regime == RiskRegime.RED: | |
| print("⚠️ HIGH RISK: Consider defensive positioning") | |
| elif risk_score.regime == RiskRegime.YELLOW: | |
| print("⚡ MODERATE RISK: Monitor closely") | |
| else: | |
| print("✅ LOW RISK: Favorable environment for risk assets") | |
| async def example_2_category_breakdown(): | |
| """Example 2: Detailed category breakdown.""" | |
| print("\n=== Example 2: Category Breakdown ===\n") | |
| engine = MarketRiskEngine() | |
| risk_score = await engine.assess_current_risk() | |
| print("Risk by Category:") | |
| for category, score in risk_score.category_scores.items(): | |
| cat_name = category.value.replace('_', ' ').title() | |
| print(f" {cat_name:20s} {score.score:5.1f}/100") | |
| async def example_3_custom_config(): | |
| """Example 3: Custom configuration.""" | |
| print("\n=== Example 3: Custom Configuration ===\n") | |
| # Create custom config | |
| config = RiskEngineConfig( | |
| lookback_days=252 # 1 year instead of default 2 years | |
| ) | |
| engine = MarketRiskEngine(config=config) | |
| risk_score = await engine.assess_current_risk() | |
| print(f"Risk Score (1-year lookback): {risk_score.risk_score:.1f}/100") | |
| async def example_4_full_report(): | |
| """Example 4: Generate full report.""" | |
| print("\n=== Example 4: Full Report ===\n") | |
| engine = MarketRiskEngine() | |
| # Generate comprehensive report | |
| report = await engine.get_full_report() | |
| print(report) | |
| async def example_5_top_risks(): | |
| """Example 5: Identify top risk categories.""" | |
| print("\n=== Example 5: Top Risk Categories ===\n") | |
| engine = MarketRiskEngine() | |
| risk_score = await engine.assess_current_risk() | |
| # Get top 3 most stressed categories | |
| top_risks = engine.aggregator.get_top_risks(risk_score, n=3) | |
| print("Top 3 Risk Areas:") | |
| for i, cat_score in enumerate(top_risks, 1): | |
| cat_name = cat_score.category.value.replace('_', ' ').title() | |
| print(f"\n{i}. {cat_name}") | |
| print(f" Score: {cat_score.score:.1f}/100") | |
| print(f" {cat_score.description}") | |
| async def example_6_programmatic_usage(): | |
| """Example 6: Programmatic decision making.""" | |
| print("\n=== Example 6: Programmatic Usage ===\n") | |
| engine = MarketRiskEngine() | |
| risk_score = await engine.assess_current_risk() | |
| # Make trading decisions based on risk | |
| if risk_score.risk_score > 70: | |
| print("🔴 Risk Score > 70: Reduce exposure") | |
| print(" Action: Move to defensive positions (TLT, GLD, cash)") | |
| elif risk_score.risk_score > 50: | |
| print("⚡ Risk Score 50-70: Cautious positioning") | |
| print(" Action: Reduce leverage, tighten stops") | |
| else: | |
| print("✅ Risk Score < 50: Favorable for risk assets") | |
| print(" Action: Normal positioning, consider opportunities") | |
| # Check specific categories | |
| credit_score = risk_score.category_scores.get( | |
| next(c for c in risk_score.category_scores.keys() | |
| if c.value == "credit") | |
| ) | |
| if credit_score and credit_score.score > 65: | |
| print("\n⚠️ Credit stress detected:") | |
| print(" Consider: Reduce HY exposure, focus on quality") | |
| async def main(): | |
| """Run all examples.""" | |
| examples = [ | |
| example_1_basic_usage, | |
| example_2_category_breakdown, | |
| example_3_custom_config, | |
| example_4_full_report, | |
| example_5_top_risks, | |
| example_6_programmatic_usage, | |
| ] | |
| for example in examples: | |
| try: | |
| await example() | |
| except Exception as e: | |
| print(f"\n✗ Example failed: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| print("\n" + "=" * 70 + "\n") | |
| if __name__ == "__main__": | |
| # Run single example | |
| # asyncio.run(example_1_basic_usage()) | |
| # Or run all examples | |
| asyncio.run(main()) | |