quantwise 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/README.md +80 -0
- package/.claude/skills/backtest-expert/SKILL.md +206 -0
- package/.claude/skills/backtest-expert/references/failed_tests.md +236 -0
- package/.claude/skills/backtest-expert/references/methodology.md +227 -0
- package/.claude/skills/breadth-chart-analyst/SKILL.md +583 -0
- package/.claude/skills/breadth-chart-analyst/assets/SP500_Breadth_Index_200MA_8MA.jpeg +0 -0
- package/.claude/skills/breadth-chart-analyst/assets/US_Stock_Market_Uptrend_Ratio.jpeg +0 -0
- package/.claude/skills/breadth-chart-analyst/assets/breadth_analysis_template.md +558 -0
- package/.claude/skills/breadth-chart-analyst/references/breadth_chart_methodology.md +590 -0
- package/.claude/skills/canslim-screener/SKILL.md +599 -0
- package/.claude/skills/canslim-screener/references/canslim_methodology.md +606 -0
- package/.claude/skills/canslim-screener/references/fmp_api_endpoints.md +707 -0
- package/.claude/skills/canslim-screener/references/interpretation_guide.md +516 -0
- package/.claude/skills/canslim-screener/references/scoring_system.md +597 -0
- package/.claude/skills/canslim-screener/scripts/calculators/earnings_calculator.py +343 -0
- package/.claude/skills/canslim-screener/scripts/calculators/growth_calculator.py +334 -0
- package/.claude/skills/canslim-screener/scripts/calculators/institutional_calculator.py +347 -0
- package/.claude/skills/canslim-screener/scripts/calculators/leadership_calculator.py +380 -0
- package/.claude/skills/canslim-screener/scripts/calculators/market_calculator.py +244 -0
- package/.claude/skills/canslim-screener/scripts/calculators/new_highs_calculator.py +194 -0
- package/.claude/skills/canslim-screener/scripts/calculators/supply_demand_calculator.py +221 -0
- package/.claude/skills/canslim-screener/scripts/finviz_stock_client.py +227 -0
- package/.claude/skills/canslim-screener/scripts/fmp_client.py +393 -0
- package/.claude/skills/canslim-screener/scripts/report_generator.py +405 -0
- package/.claude/skills/canslim-screener/scripts/scorer.py +625 -0
- package/.claude/skills/canslim-screener/scripts/screen_canslim.py +361 -0
- package/.claude/skills/canslim-screener/scripts/test_institutional_endpoint.py +109 -0
- package/.claude/skills/chart/SKILL.md +20 -0
- package/.claude/skills/dividend-growth-pullback-screener/SKILL.md +322 -0
- package/.claude/skills/dividend-growth-pullback-screener/references/dividend_growth_compounding.md +400 -0
- package/.claude/skills/dividend-growth-pullback-screener/references/fmp_api_guide.md +642 -0
- package/.claude/skills/dividend-growth-pullback-screener/references/rsi_oversold_strategy.md +333 -0
- package/.claude/skills/dividend-growth-pullback-screener/scripts/screen_dividend_growth_rsi.py +1155 -0
- package/.claude/skills/earnings-calendar/SKILL.md +721 -0
- package/.claude/skills/earnings-calendar/assets/earnings_report_template.md +102 -0
- package/.claude/skills/earnings-calendar/references/fmp_api_guide.md +590 -0
- package/.claude/skills/earnings-calendar/scripts/fetch_earnings_fmp.py +443 -0
- package/.claude/skills/earnings-calendar/scripts/generate_report.py +366 -0
- package/.claude/skills/economic-calendar-fetcher/SKILL.md +365 -0
- package/.claude/skills/economic-calendar-fetcher/references/fmp_api_documentation.md +345 -0
- package/.claude/skills/economic-calendar-fetcher/scripts/get_economic_calendar.py +267 -0
- package/.claude/skills/ftd-detector/SKILL.md +147 -0
- package/.claude/skills/ftd-detector/references/ftd_methodology.md +188 -0
- package/.claude/skills/ftd-detector/references/post_ftd_guide.md +185 -0
- package/.claude/skills/ftd-detector/scripts/fmp_client.py +158 -0
- package/.claude/skills/ftd-detector/scripts/ftd_detector.py +280 -0
- package/.claude/skills/ftd-detector/scripts/post_ftd_monitor.py +404 -0
- package/.claude/skills/ftd-detector/scripts/rally_tracker.py +508 -0
- package/.claude/skills/ftd-detector/scripts/report_generator.py +341 -0
- package/.claude/skills/ftd-detector/scripts/tests/conftest.py +9 -0
- package/.claude/skills/ftd-detector/scripts/tests/helpers.py +107 -0
- package/.claude/skills/ftd-detector/scripts/tests/test_post_ftd_monitor.py +311 -0
- package/.claude/skills/ftd-detector/scripts/tests/test_rally_tracker.py +302 -0
- package/.claude/skills/institutional-flow-tracker/README.md +362 -0
- package/.claude/skills/institutional-flow-tracker/SKILL.md +357 -0
- package/.claude/skills/institutional-flow-tracker/references/13f_filings_guide.md +383 -0
- package/.claude/skills/institutional-flow-tracker/references/institutional_investor_types.md +580 -0
- package/.claude/skills/institutional-flow-tracker/references/interpretation_framework.md +573 -0
- package/.claude/skills/institutional-flow-tracker/scripts/analyze_single_stock.py +457 -0
- package/.claude/skills/institutional-flow-tracker/scripts/track_institution_portfolio.py +108 -0
- package/.claude/skills/institutional-flow-tracker/scripts/track_institutional_flow.py +450 -0
- package/.claude/skills/macro-regime-detector/SKILL.md +86 -0
- package/.claude/skills/macro-regime-detector/references/historical_regimes.md +124 -0
- package/.claude/skills/macro-regime-detector/references/indicator_interpretation_guide.md +144 -0
- package/.claude/skills/macro-regime-detector/references/regime_detection_methodology.md +138 -0
- package/.claude/skills/macro-regime-detector/scripts/calculators/__init__.py +1 -0
- package/.claude/skills/macro-regime-detector/scripts/calculators/concentration_calculator.py +165 -0
- package/.claude/skills/macro-regime-detector/scripts/calculators/credit_conditions_calculator.py +124 -0
- package/.claude/skills/macro-regime-detector/scripts/calculators/equity_bond_calculator.py +198 -0
- package/.claude/skills/macro-regime-detector/scripts/calculators/sector_rotation_calculator.py +123 -0
- package/.claude/skills/macro-regime-detector/scripts/calculators/size_factor_calculator.py +131 -0
- package/.claude/skills/macro-regime-detector/scripts/calculators/utils.py +347 -0
- package/.claude/skills/macro-regime-detector/scripts/calculators/yield_curve_calculator.py +279 -0
- package/.claude/skills/macro-regime-detector/scripts/fmp_client.py +134 -0
- package/.claude/skills/macro-regime-detector/scripts/macro_regime_detector.py +278 -0
- package/.claude/skills/macro-regime-detector/scripts/report_generator.py +327 -0
- package/.claude/skills/macro-regime-detector/scripts/scorer.py +574 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/conftest.py +9 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_concentration.py +78 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_credit_conditions.py +59 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_equity_bond.py +74 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_helpers.py +90 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_scorer.py +439 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_sector_rotation.py +78 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_size_factor.py +59 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_utils.py +126 -0
- package/.claude/skills/macro-regime-detector/scripts/tests/test_yield_curve.py +64 -0
- package/.claude/skills/market-breadth-analyzer/SKILL.md +121 -0
- package/.claude/skills/market-breadth-analyzer/references/breadth_analysis_methodology.md +168 -0
- package/.claude/skills/market-breadth-analyzer/scripts/calculators/__init__.py +1 -0
- package/.claude/skills/market-breadth-analyzer/scripts/calculators/bearish_signal_calculator.py +150 -0
- package/.claude/skills/market-breadth-analyzer/scripts/calculators/cycle_calculator.py +168 -0
- package/.claude/skills/market-breadth-analyzer/scripts/calculators/divergence_calculator.py +119 -0
- package/.claude/skills/market-breadth-analyzer/scripts/calculators/historical_context_calculator.py +120 -0
- package/.claude/skills/market-breadth-analyzer/scripts/calculators/ma_crossover_calculator.py +115 -0
- package/.claude/skills/market-breadth-analyzer/scripts/calculators/trend_level_calculator.py +103 -0
- package/.claude/skills/market-breadth-analyzer/scripts/csv_client.py +225 -0
- package/.claude/skills/market-breadth-analyzer/scripts/market_breadth_analyzer.py +307 -0
- package/.claude/skills/market-breadth-analyzer/scripts/report_generator.py +330 -0
- package/.claude/skills/market-breadth-analyzer/scripts/scorer.py +271 -0
- package/.claude/skills/market-environment-analysis/SKILL.md +139 -0
- package/.claude/skills/market-environment-analysis/references/analysis_patterns.md +124 -0
- package/.claude/skills/market-environment-analysis/references/indicators.md +99 -0
- package/.claude/skills/market-environment-analysis/scripts/market_utils.py +127 -0
- package/.claude/skills/market-news-analyst/SKILL.md +714 -0
- package/.claude/skills/market-news-analyst/references/corporate_news_impact.md +446 -0
- package/.claude/skills/market-news-analyst/references/geopolitical_commodity_correlations.md +499 -0
- package/.claude/skills/market-news-analyst/references/market_event_patterns.md +393 -0
- package/.claude/skills/market-news-analyst/references/trusted_news_sources.md +510 -0
- package/.claude/skills/market-top-detector/SKILL.md +159 -0
- package/.claude/skills/market-top-detector/references/distribution_day_guide.md +100 -0
- package/.claude/skills/market-top-detector/references/historical_tops.md +142 -0
- package/.claude/skills/market-top-detector/references/market_top_methodology.md +167 -0
- package/.claude/skills/market-top-detector/scripts/calculators/__init__.py +17 -0
- package/.claude/skills/market-top-detector/scripts/calculators/breadth_calculator.py +116 -0
- package/.claude/skills/market-top-detector/scripts/calculators/defensive_rotation_calculator.py +127 -0
- package/.claude/skills/market-top-detector/scripts/calculators/distribution_day_calculator.py +161 -0
- package/.claude/skills/market-top-detector/scripts/calculators/index_technical_calculator.py +254 -0
- package/.claude/skills/market-top-detector/scripts/calculators/leading_stock_calculator.py +198 -0
- package/.claude/skills/market-top-detector/scripts/calculators/sentiment_calculator.py +213 -0
- package/.claude/skills/market-top-detector/scripts/fmp_client.py +158 -0
- package/.claude/skills/market-top-detector/scripts/market_top_detector.py +349 -0
- package/.claude/skills/market-top-detector/scripts/report_generator.py +314 -0
- package/.claude/skills/market-top-detector/scripts/scorer.py +473 -0
- package/.claude/skills/market-top-detector/scripts/tests/conftest.py +9 -0
- package/.claude/skills/market-top-detector/scripts/tests/helpers.py +49 -0
- package/.claude/skills/market-top-detector/scripts/tests/test_breadth.py +62 -0
- package/.claude/skills/market-top-detector/scripts/tests/test_defensive_rotation.py +56 -0
- package/.claude/skills/market-top-detector/scripts/tests/test_distribution_day.py +92 -0
- package/.claude/skills/market-top-detector/scripts/tests/test_index_technical.py +73 -0
- package/.claude/skills/market-top-detector/scripts/tests/test_leading_stock.py +57 -0
- package/.claude/skills/market-top-detector/scripts/tests/test_scorer.py +180 -0
- package/.claude/skills/market-top-detector/scripts/tests/test_sentiment.py +64 -0
- package/.claude/skills/options-strategy-advisor/README.md +469 -0
- package/.claude/skills/options-strategy-advisor/SKILL.md +959 -0
- package/.claude/skills/options-strategy-advisor/scripts/black_scholes.py +495 -0
- package/.claude/skills/pair-trade-screener/README.md +389 -0
- package/.claude/skills/pair-trade-screener/SKILL.md +622 -0
- package/.claude/skills/pair-trade-screener/references/cointegration_guide.md +745 -0
- package/.claude/skills/pair-trade-screener/references/methodology.md +853 -0
- package/.claude/skills/pair-trade-screener/scripts/analyze_spread.py +394 -0
- package/.claude/skills/pair-trade-screener/scripts/find_pairs.py +535 -0
- package/.claude/skills/portfolio-manager/README.md +394 -0
- package/.claude/skills/portfolio-manager/SKILL.md +750 -0
- package/.claude/skills/portfolio-manager/references/alpaca-mcp-setup.md +367 -0
- package/.claude/skills/portfolio-manager/references/asset-allocation.md +502 -0
- package/.claude/skills/portfolio-manager/references/diversification-principles.md +553 -0
- package/.claude/skills/portfolio-manager/references/portfolio-risk-metrics.md +603 -0
- package/.claude/skills/portfolio-manager/references/position-evaluation.md +477 -0
- package/.claude/skills/portfolio-manager/references/rebalancing-strategies.md +715 -0
- package/.claude/skills/portfolio-manager/references/risk-profile-questionnaire.md +608 -0
- package/.claude/skills/portfolio-manager/references/target-allocations.md +558 -0
- package/.claude/skills/portfolio-manager/scripts/test_alpaca_connection.py +286 -0
- package/.claude/skills/scenario-analyzer/SKILL.md +317 -0
- package/.claude/skills/scenario-analyzer/references/headline_event_patterns.md +264 -0
- package/.claude/skills/scenario-analyzer/references/scenario_playbooks.md +320 -0
- package/.claude/skills/scenario-analyzer/references/sector_sensitivity_matrix.md +217 -0
- package/.claude/skills/sector-analyst/SKILL.md +206 -0
- package/.claude/skills/sector-analyst/assets/industory_performance_1.jpeg +0 -0
- package/.claude/skills/sector-analyst/assets/industory_performance_2.jpeg +0 -0
- package/.claude/skills/sector-analyst/assets/sector_performance.jpeg +0 -0
- package/.claude/skills/sector-analyst/references/sector_rotation.md +170 -0
- package/.claude/skills/stanley-druckenmiller-investment/SKILL.md +84 -0
- package/.claude/skills/stanley-druckenmiller-investment/references/case-studies.md +148 -0
- package/.claude/skills/stanley-druckenmiller-investment/references/investment-philosophy.md +80 -0
- package/.claude/skills/stanley-druckenmiller-investment/references/market-analysis-guide.md +146 -0
- package/.claude/skills/stock/NOTION_SETUP.md +33 -0
- package/.claude/skills/stock/SKILL.md +38 -0
- package/.claude/skills/technical-analyst/SKILL.md +238 -0
- package/.claude/skills/technical-analyst/assets/analysis_template.md +183 -0
- package/.claude/skills/technical-analyst/references/technical_analysis_framework.md +282 -0
- package/.claude/skills/theme-detector/SKILL.md +320 -0
- package/.claude/skills/theme-detector/assets/report_template.md +155 -0
- package/.claude/skills/theme-detector/references/cross_sector_themes.md +252 -0
- package/.claude/skills/theme-detector/references/finviz_industry_codes.md +403 -0
- package/.claude/skills/theme-detector/references/thematic_etf_catalog.md +333 -0
- package/.claude/skills/theme-detector/references/theme_detection_methodology.md +430 -0
- package/.claude/skills/theme-detector/scripts/calculators/__init__.py +1 -0
- package/.claude/skills/theme-detector/scripts/calculators/heat_calculator.py +123 -0
- package/.claude/skills/theme-detector/scripts/calculators/industry_ranker.py +98 -0
- package/.claude/skills/theme-detector/scripts/calculators/lifecycle_calculator.py +172 -0
- package/.claude/skills/theme-detector/scripts/calculators/theme_classifier.py +195 -0
- package/.claude/skills/theme-detector/scripts/calculators/theme_discoverer.py +280 -0
- package/.claude/skills/theme-detector/scripts/config_loader.py +142 -0
- package/.claude/skills/theme-detector/scripts/default_theme_config.py +254 -0
- package/.claude/skills/theme-detector/scripts/etf_scanner.py +609 -0
- package/.claude/skills/theme-detector/scripts/finviz_performance_client.py +131 -0
- package/.claude/skills/theme-detector/scripts/report_generator.py +490 -0
- package/.claude/skills/theme-detector/scripts/representative_stock_selector.py +673 -0
- package/.claude/skills/theme-detector/scripts/scorer.py +87 -0
- package/.claude/skills/theme-detector/scripts/tests/README.md +21 -0
- package/.claude/skills/theme-detector/scripts/tests/conftest.py +9 -0
- package/.claude/skills/theme-detector/scripts/tests/test_config_loader.py +239 -0
- package/.claude/skills/theme-detector/scripts/tests/test_etf_scanner.py +810 -0
- package/.claude/skills/theme-detector/scripts/tests/test_heat_calculator.py +245 -0
- package/.claude/skills/theme-detector/scripts/tests/test_industry_ranker.py +256 -0
- package/.claude/skills/theme-detector/scripts/tests/test_lifecycle_calculator.py +301 -0
- package/.claude/skills/theme-detector/scripts/tests/test_report_generator.py +624 -0
- package/.claude/skills/theme-detector/scripts/tests/test_representative_stock_selector.py +898 -0
- package/.claude/skills/theme-detector/scripts/tests/test_scorer.py +185 -0
- package/.claude/skills/theme-detector/scripts/tests/test_theme_classifier.py +534 -0
- package/.claude/skills/theme-detector/scripts/tests/test_theme_detector_e2e.py +467 -0
- package/.claude/skills/theme-detector/scripts/tests/test_theme_discoverer.py +458 -0
- package/.claude/skills/theme-detector/scripts/tests/test_uptrend_client.py +76 -0
- package/.claude/skills/theme-detector/scripts/theme_detector.py +815 -0
- package/.claude/skills/theme-detector/scripts/themes.yaml +168 -0
- package/.claude/skills/theme-detector/scripts/uptrend_client.py +241 -0
- package/.claude/skills/uptrend-analyzer/SKILL.md +108 -0
- package/.claude/skills/uptrend-analyzer/references/uptrend_methodology.md +215 -0
- package/.claude/skills/uptrend-analyzer/scripts/calculators/__init__.py +1 -0
- package/.claude/skills/uptrend-analyzer/scripts/calculators/historical_context_calculator.py +122 -0
- package/.claude/skills/uptrend-analyzer/scripts/calculators/market_breadth_calculator.py +145 -0
- package/.claude/skills/uptrend-analyzer/scripts/calculators/momentum_calculator.py +183 -0
- package/.claude/skills/uptrend-analyzer/scripts/calculators/sector_participation_calculator.py +204 -0
- package/.claude/skills/uptrend-analyzer/scripts/calculators/sector_rotation_calculator.py +218 -0
- package/.claude/skills/uptrend-analyzer/scripts/data_fetcher.py +236 -0
- package/.claude/skills/uptrend-analyzer/scripts/report_generator.py +329 -0
- package/.claude/skills/uptrend-analyzer/scripts/scorer.py +276 -0
- package/.claude/skills/uptrend-analyzer/scripts/uptrend_analyzer.py +219 -0
- package/.claude/skills/us-market-bubble-detector/CHANGELOG.md +118 -0
- package/.claude/skills/us-market-bubble-detector/SKILL.md +545 -0
- package/.claude/skills/us-market-bubble-detector/references/bubble_framework.md +335 -0
- package/.claude/skills/us-market-bubble-detector/references/historical_cases.md +327 -0
- package/.claude/skills/us-market-bubble-detector/references/implementation_guide.md +473 -0
- package/.claude/skills/us-market-bubble-detector/references/quick_reference.md +354 -0
- package/.claude/skills/us-market-bubble-detector/references/quick_reference_en.md +342 -0
- package/.claude/skills/us-market-bubble-detector/scripts/bubble_scorer.py +309 -0
- package/.claude/skills/us-stock-analysis/SKILL.md +294 -0
- package/.claude/skills/us-stock-analysis/references/financial-metrics.md +172 -0
- package/.claude/skills/us-stock-analysis/references/fundamental-analysis.md +129 -0
- package/.claude/skills/us-stock-analysis/references/report-template.md +207 -0
- package/.claude/skills/us-stock-analysis/references/technical-analysis.md +93 -0
- package/.claude/skills/value-dividend-screener/SKILL.md +562 -0
- package/.claude/skills/value-dividend-screener/references/fmp_api_guide.md +348 -0
- package/.claude/skills/value-dividend-screener/references/screening_methodology.md +315 -0
- package/.claude/skills/value-dividend-screener/scripts/screen_dividend_stocks.py +1138 -0
- package/.claude/skills/vcp-screener/SKILL.md +79 -0
- package/.claude/skills/vcp-screener/references/fmp_api_endpoints.md +45 -0
- package/.claude/skills/vcp-screener/references/scoring_system.md +154 -0
- package/.claude/skills/vcp-screener/references/vcp_methodology.md +124 -0
- package/.claude/skills/vcp-screener/scripts/calculators/__init__.py +1 -0
- package/.claude/skills/vcp-screener/scripts/calculators/pivot_proximity_calculator.py +139 -0
- package/.claude/skills/vcp-screener/scripts/calculators/relative_strength_calculator.py +161 -0
- package/.claude/skills/vcp-screener/scripts/calculators/trend_template_calculator.py +228 -0
- package/.claude/skills/vcp-screener/scripts/calculators/vcp_pattern_calculator.py +322 -0
- package/.claude/skills/vcp-screener/scripts/calculators/volume_pattern_calculator.py +121 -0
- package/.claude/skills/vcp-screener/scripts/fmp_client.py +162 -0
- package/.claude/skills/vcp-screener/scripts/report_generator.py +317 -0
- package/.claude/skills/vcp-screener/scripts/scorer.py +155 -0
- package/.claude/skills/vcp-screener/scripts/screen_vcp.py +536 -0
- package/.claude/skills/vcp-screener/scripts/tests/__init__.py +0 -0
- package/.claude/skills/vcp-screener/scripts/tests/conftest.py +9 -0
- package/.claude/skills/vcp-screener/scripts/tests/test_vcp_screener.py +834 -0
- package/.claude/skills/weekly-trade-strategy/.claude/agents/druckenmiller-strategy-planner.md +300 -0
- package/.claude/skills/weekly-trade-strategy/.claude/agents/market-news-analyzer.md +239 -0
- package/.claude/skills/weekly-trade-strategy/.claude/agents/technical-market-analyst.md +187 -0
- package/.claude/skills/weekly-trade-strategy/.claude/agents/us-market-analyst.md +218 -0
- package/.claude/skills/weekly-trade-strategy/.claude/agents/weekly-trade-blog-writer.md +318 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/SKILL.md +662 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/assets/SP500_Breadth_Index_200MA_8MA.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/assets/US_Stock_Market_Uptrend_Ratio.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/assets/breadth_analysis_template.md +558 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/references/breadth_chart_methodology.md +590 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/SKILL.md +721 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/assets/earnings_report_template.md +102 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/earnings_calendar_2025-11-02.md +447 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/references/fmp_api_guide.md +590 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/scripts/fetch_earnings_fmp.py +443 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/scripts/generate_report.py +366 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/economic-calendar-fetcher/SKILL.md +365 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/economic-calendar-fetcher/references/fmp_api_documentation.md +345 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/economic-calendar-fetcher/scripts/get_economic_calendar.py +267 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-environment-analysis/SKILL.md +139 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-environment-analysis/references/analysis_patterns.md +124 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-environment-analysis/references/indicators.md +99 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-environment-analysis/scripts/market_utils.py +127 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/SKILL.md +714 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/references/corporate_news_impact.md +446 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/references/geopolitical_commodity_correlations.md +499 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/references/market_event_patterns.md +393 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/references/trusted_news_sources.md +510 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/SKILL.md +206 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/assets/industory_performance_1.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/assets/industory_performance_2.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/assets/sector_performance.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/references/sector_rotation.md +170 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/stanley-druckenmiller-investment/SKILL.md +84 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/stanley-druckenmiller-investment/references/case-studies.md +148 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/stanley-druckenmiller-investment/references/investment-philosophy.md +80 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/stanley-druckenmiller-investment/references/market-analysis-guide.md +146 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/technical-analyst/SKILL.md +238 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/technical-analyst/assets/analysis_template.md +183 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/technical-analyst/references/technical_analysis_framework.md +282 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/CHANGELOG.md +118 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/SKILL.md +545 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/bubble_framework.md +335 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/historical_cases.md +327 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/implementation_guide.md +473 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/quick_reference.md +354 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/quick_reference_en.md +342 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/scripts/bubble_scorer.py +309 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/SKILL.md +294 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/references/financial-metrics.md +172 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/references/fundamental-analysis.md +129 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/references/report-template.md +207 -0
- package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/references/technical-analysis.md +93 -0
- package/.claude/skills/weekly-trade-strategy/CLAUDE.md +454 -0
- package/.claude/skills/weekly-trade-strategy/README.md +287 -0
- package/.claude/skills/weekly-trade-strategy/blogs/.gitkeep +0 -0
- package/.claude/skills/weekly-trade-strategy/charts/.gitkeep +0 -0
- package/.claude/skills/weekly-trade-strategy/earnings_data.json +10054 -0
- package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/SKILL.md +662 -0
- package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/assets/SP500_Breadth_Index_200MA_8MA.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/assets/US_Stock_Market_Uptrend_Ratio.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/assets/breadth_analysis_template.md +558 -0
- package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/references/breadth_chart_methodology.md +590 -0
- package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/SKILL.md +721 -0
- package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/assets/earnings_report_template.md +102 -0
- package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/earnings_calendar_2025-11-02.md +447 -0
- package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/references/fmp_api_guide.md +590 -0
- package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/scripts/fetch_earnings_fmp.py +443 -0
- package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/scripts/generate_report.py +366 -0
- package/.claude/skills/weekly-trade-strategy/skills/economic-calendar-fetcher/SKILL.md +365 -0
- package/.claude/skills/weekly-trade-strategy/skills/economic-calendar-fetcher/references/fmp_api_documentation.md +345 -0
- package/.claude/skills/weekly-trade-strategy/skills/economic-calendar-fetcher/scripts/get_economic_calendar.py +267 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-environment-analysis/SKILL.md +139 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-environment-analysis/references/analysis_patterns.md +124 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-environment-analysis/references/indicators.md +99 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-environment-analysis/scripts/market_utils.py +127 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/SKILL.md +714 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/references/corporate_news_impact.md +446 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/references/geopolitical_commodity_correlations.md +499 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/references/market_event_patterns.md +393 -0
- package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/references/trusted_news_sources.md +510 -0
- package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/SKILL.md +206 -0
- package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/assets/industory_performance_1.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/assets/industory_performance_2.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/assets/sector_performance.jpeg +0 -0
- package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/references/sector_rotation.md +170 -0
- package/.claude/skills/weekly-trade-strategy/skills/stanley-druckenmiller-investment/SKILL.md +84 -0
- package/.claude/skills/weekly-trade-strategy/skills/stanley-druckenmiller-investment/references/case-studies.md +148 -0
- package/.claude/skills/weekly-trade-strategy/skills/stanley-druckenmiller-investment/references/investment-philosophy.md +80 -0
- package/.claude/skills/weekly-trade-strategy/skills/stanley-druckenmiller-investment/references/market-analysis-guide.md +146 -0
- package/.claude/skills/weekly-trade-strategy/skills/technical-analyst/SKILL.md +238 -0
- package/.claude/skills/weekly-trade-strategy/skills/technical-analyst/assets/analysis_template.md +183 -0
- package/.claude/skills/weekly-trade-strategy/skills/technical-analyst/references/technical_analysis_framework.md +282 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/CHANGELOG.md +118 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/SKILL.md +545 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/bubble_framework.md +335 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/historical_cases.md +327 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/implementation_guide.md +473 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/quick_reference.md +354 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/quick_reference_en.md +342 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/scripts/bubble_scorer.py +309 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/SKILL.md +294 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/references/financial-metrics.md +172 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/references/fundamental-analysis.md +129 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/references/report-template.md +207 -0
- package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/references/technical-analysis.md +93 -0
- package/.mcp.json +3 -0
- package/cli.mjs +16 -16
- package/package.json +4 -2
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
# Portfolio Risk Metrics
|
|
2
|
+
|
|
3
|
+
This document provides comprehensive guidance on measuring and interpreting portfolio risk using standard financial metrics.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Portfolio risk assessment requires both quantitative metrics and qualitative judgment. This guide covers:
|
|
8
|
+
|
|
9
|
+
1. Volatility-based metrics (standard deviation, beta)
|
|
10
|
+
2. Downside risk measures (maximum drawdown, semi-deviation)
|
|
11
|
+
3. Risk-adjusted return metrics (Sharpe ratio, Sortino ratio)
|
|
12
|
+
4. Concentration and correlation metrics
|
|
13
|
+
5. Interpretation frameworks for different investor types
|
|
14
|
+
|
|
15
|
+
## Volatility Metrics
|
|
16
|
+
|
|
17
|
+
### Standard Deviation (σ)
|
|
18
|
+
|
|
19
|
+
**Definition:** Measure of how much returns vary from the average return over time.
|
|
20
|
+
|
|
21
|
+
**Formula:**
|
|
22
|
+
```
|
|
23
|
+
σ = √[Σ(R_i - R_avg)² / (n-1)]
|
|
24
|
+
|
|
25
|
+
Where:
|
|
26
|
+
R_i = Return in period i
|
|
27
|
+
R_avg = Average return
|
|
28
|
+
n = Number of periods
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Interpretation:**
|
|
32
|
+
|
|
33
|
+
| Annual Std Dev | Risk Level | Typical Assets |
|
|
34
|
+
|---------------|------------|----------------|
|
|
35
|
+
| **<5%** | Very Low | Cash, short-term bonds |
|
|
36
|
+
| **5-10%** | Low | Bond portfolios, conservative balanced |
|
|
37
|
+
| **10-15%** | Moderate | Balanced portfolios (60/40), dividend stocks |
|
|
38
|
+
| **15-20%** | High | Stock portfolios, growth stocks |
|
|
39
|
+
| **>20%** | Very High | Small caps, emerging markets, sector funds |
|
|
40
|
+
|
|
41
|
+
**S&P 500 Historical:** ~15-18% annualized standard deviation
|
|
42
|
+
|
|
43
|
+
**Usage in Portfolio Analysis:**
|
|
44
|
+
- Compare portfolio volatility to benchmarks
|
|
45
|
+
- Assess if volatility matches investor risk tolerance
|
|
46
|
+
- Track changes in volatility over time (increasing volatility = warning sign)
|
|
47
|
+
|
|
48
|
+
**Limitations:**
|
|
49
|
+
- Assumes normal distribution (actual returns have "fat tails")
|
|
50
|
+
- Treats upside and downside volatility equally
|
|
51
|
+
- Based on historical data (may not predict future)
|
|
52
|
+
|
|
53
|
+
### Beta (β)
|
|
54
|
+
|
|
55
|
+
**Definition:** Measure of portfolio sensitivity to market movements.
|
|
56
|
+
|
|
57
|
+
**Formula:**
|
|
58
|
+
```
|
|
59
|
+
β = Cov(R_portfolio, R_market) / Var(R_market)
|
|
60
|
+
|
|
61
|
+
Or estimated as:
|
|
62
|
+
β = (Σw_i × β_i)
|
|
63
|
+
|
|
64
|
+
Where:
|
|
65
|
+
w_i = Weight of position i
|
|
66
|
+
β_i = Beta of position i
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Interpretation:**
|
|
70
|
+
|
|
71
|
+
| Beta | Market Sensitivity | Portfolio Behavior |
|
|
72
|
+
|------|-------------------|-------------------|
|
|
73
|
+
| **β < 0.5** | Very low | Defensive, low correlation to market |
|
|
74
|
+
| **β = 0.5-0.8** | Low | Below-market volatility, defensive tilt |
|
|
75
|
+
| **β = 0.8-1.0** | Moderate | Slightly less volatile than market |
|
|
76
|
+
| **β = 1.0** | Market | Moves in line with market (index-like) |
|
|
77
|
+
| **β = 1.0-1.3** | Moderate-high | More volatile than market |
|
|
78
|
+
| **β = 1.3-1.6** | High | Significantly more volatile |
|
|
79
|
+
| **β > 1.6** | Very high | Extremely volatile, aggressive |
|
|
80
|
+
|
|
81
|
+
**Typical Security Betas:**
|
|
82
|
+
- Utilities: 0.4-0.7
|
|
83
|
+
- Consumer Staples: 0.5-0.8
|
|
84
|
+
- Healthcare: 0.8-1.1
|
|
85
|
+
- S&P 500 Index: 1.0
|
|
86
|
+
- Technology: 1.1-1.5
|
|
87
|
+
- Small-cap growth: 1.3-2.0
|
|
88
|
+
- Leveraged ETFs: 2.0-3.0
|
|
89
|
+
|
|
90
|
+
**Example Portfolio Beta Calculation:**
|
|
91
|
+
|
|
92
|
+
Portfolio:
|
|
93
|
+
- 40% SPY (S&P 500 ETF, β=1.0): 0.40 × 1.0 = 0.40
|
|
94
|
+
- 30% QQQ (Nasdaq ETF, β=1.2): 0.30 × 1.2 = 0.36
|
|
95
|
+
- 20% VNQ (REIT ETF, β=0.9): 0.20 × 0.9 = 0.18
|
|
96
|
+
- 10% TLT (Bond ETF, β=0.3): 0.10 × 0.3 = 0.03
|
|
97
|
+
|
|
98
|
+
**Portfolio Beta** = 0.40 + 0.36 + 0.18 + 0.03 = **0.97**
|
|
99
|
+
|
|
100
|
+
**Interpretation:** Portfolio expected to move 97% as much as the market (slightly defensive).
|
|
101
|
+
|
|
102
|
+
**Usage:**
|
|
103
|
+
- Assess portfolio aggressiveness
|
|
104
|
+
- Predict portfolio behavior in market moves (β=1.2 means 12% drop when market drops 10%)
|
|
105
|
+
- Identify need for hedging or rebalancing
|
|
106
|
+
|
|
107
|
+
**Limitations:**
|
|
108
|
+
- Beta changes over time
|
|
109
|
+
- Based on historical correlations
|
|
110
|
+
- May not hold in extreme markets
|
|
111
|
+
|
|
112
|
+
### Semi-Deviation
|
|
113
|
+
|
|
114
|
+
**Definition:** Standard deviation of returns below the mean (focuses on downside volatility only).
|
|
115
|
+
|
|
116
|
+
**Formula:**
|
|
117
|
+
```
|
|
118
|
+
Semi-deviation = √[Σ(R_i - R_avg)² for all R_i < R_avg / n]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Interpretation:**
|
|
122
|
+
- Lower semi-deviation = better downside protection
|
|
123
|
+
- Useful for risk-averse investors who care more about losses than gains
|
|
124
|
+
- Typically 60-70% of standard deviation for symmetric distributions
|
|
125
|
+
|
|
126
|
+
**Usage:**
|
|
127
|
+
- Evaluate downside risk specifically
|
|
128
|
+
- Compare defensive vs aggressive strategies
|
|
129
|
+
- Input for Sortino ratio (risk-adjusted return metric)
|
|
130
|
+
|
|
131
|
+
## Downside Risk Metrics
|
|
132
|
+
|
|
133
|
+
### Maximum Drawdown (MDD)
|
|
134
|
+
|
|
135
|
+
**Definition:** Largest peak-to-trough decline in portfolio value over a specific period.
|
|
136
|
+
|
|
137
|
+
**Formula:**
|
|
138
|
+
```
|
|
139
|
+
MDD = (Trough Value - Peak Value) / Peak Value
|
|
140
|
+
|
|
141
|
+
Or: MDD = max[(P_peak - P_trough) / P_peak] over all peaks
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Example:**
|
|
145
|
+
- Portfolio peak: $150,000 (March 2020)
|
|
146
|
+
- Portfolio trough: $105,000 (March 2020 crash)
|
|
147
|
+
- MDD = ($105k - $150k) / $150k = **-30%**
|
|
148
|
+
|
|
149
|
+
**Historical Maximum Drawdowns:**
|
|
150
|
+
|
|
151
|
+
| Asset/Portfolio | Max Drawdown | Period |
|
|
152
|
+
|----------------|--------------|--------|
|
|
153
|
+
| S&P 500 | -57% | 2007-2009 (Financial Crisis) |
|
|
154
|
+
| S&P 500 | -34% | 2020 (COVID Crash) |
|
|
155
|
+
| Nasdaq 100 | -83% | 2000-2002 (Tech Bubble) |
|
|
156
|
+
| Nasdaq 100 | -32% | 2021-2022 (Rate Hikes) |
|
|
157
|
+
| 60/40 Portfolio | -32% | 2007-2009 |
|
|
158
|
+
| Treasury Bonds | -48% | 2020-2023 (Rising Rates) |
|
|
159
|
+
|
|
160
|
+
**Risk Tolerance Guide:**
|
|
161
|
+
|
|
162
|
+
| Investor Type | Max Acceptable Drawdown |
|
|
163
|
+
|--------------|------------------------|
|
|
164
|
+
| **Conservative** | -10 to -15% |
|
|
165
|
+
| **Moderate** | -15 to -25% |
|
|
166
|
+
| **Growth** | -25 to -35% |
|
|
167
|
+
| **Aggressive** | -35 to -50% |
|
|
168
|
+
|
|
169
|
+
**Usage:**
|
|
170
|
+
- Assess worst-case historical scenario
|
|
171
|
+
- Compare to investor risk tolerance
|
|
172
|
+
- Set risk management triggers (e.g., hedge if drawdown >20%)
|
|
173
|
+
- Estimate recovery time needed
|
|
174
|
+
|
|
175
|
+
**Recovery Time:**
|
|
176
|
+
- 20% drawdown requires +25% gain to recover
|
|
177
|
+
- 30% drawdown requires +43% gain
|
|
178
|
+
- 50% drawdown requires +100% gain (doubling)
|
|
179
|
+
|
|
180
|
+
### Current Drawdown
|
|
181
|
+
|
|
182
|
+
**Definition:** Decline from most recent peak to current value.
|
|
183
|
+
|
|
184
|
+
**Formula:**
|
|
185
|
+
```
|
|
186
|
+
Current Drawdown = (Current Value - Recent Peak Value) / Recent Peak Value
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Example:**
|
|
190
|
+
- Recent peak: $150,000 (last month)
|
|
191
|
+
- Current value: $142,500
|
|
192
|
+
- Current drawdown = ($142.5k - $150k) / $150k = **-5%**
|
|
193
|
+
|
|
194
|
+
**Interpretation:**
|
|
195
|
+
|
|
196
|
+
| Current Drawdown | Status | Action |
|
|
197
|
+
|-----------------|--------|--------|
|
|
198
|
+
| **0%** | At all-time high | Monitor for complacency |
|
|
199
|
+
| **-1% to -5%** | Minor pullback | Normal, no action |
|
|
200
|
+
| **-5% to -10%** | Moderate correction | Review positions, monitor |
|
|
201
|
+
| **-10% to -20%** | Correction | Assess portfolio, consider adjustments |
|
|
202
|
+
| **>-20%** | Bear market territory | Review allocation, consider rebalancing |
|
|
203
|
+
|
|
204
|
+
**Usage:**
|
|
205
|
+
- Real-time risk monitoring
|
|
206
|
+
- Identify when portfolio is under stress
|
|
207
|
+
- Trigger rebalancing or risk reduction
|
|
208
|
+
|
|
209
|
+
### Value at Risk (VaR)
|
|
210
|
+
|
|
211
|
+
**Definition:** Maximum expected loss over a given time period at a given confidence level.
|
|
212
|
+
|
|
213
|
+
**Example:**
|
|
214
|
+
- 1-month VaR at 95% confidence = $10,000
|
|
215
|
+
- **Interpretation:** 95% confident that portfolio will not lose more than $10,000 in the next month (or: 5% chance of losing more than $10,000)
|
|
216
|
+
|
|
217
|
+
**Calculation Methods:**
|
|
218
|
+
|
|
219
|
+
1. **Historical VaR:** Use historical return distribution
|
|
220
|
+
2. **Parametric VaR:** Assume normal distribution, use mean and std dev
|
|
221
|
+
3. **Monte Carlo VaR:** Simulate thousands of scenarios
|
|
222
|
+
|
|
223
|
+
**Simplified Parametric VaR Formula:**
|
|
224
|
+
```
|
|
225
|
+
VaR = Portfolio Value × (z-score × σ - μ)
|
|
226
|
+
|
|
227
|
+
Where:
|
|
228
|
+
z-score = 1.65 for 95% confidence, 2.33 for 99% confidence
|
|
229
|
+
σ = Portfolio standard deviation (daily or monthly)
|
|
230
|
+
μ = Expected return (daily or monthly)
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**Example Calculation:**
|
|
234
|
+
- Portfolio value: $100,000
|
|
235
|
+
- Annual std dev: 18%
|
|
236
|
+
- Monthly std dev: 18% / √12 = 5.2%
|
|
237
|
+
- Expected monthly return: 0.5%
|
|
238
|
+
|
|
239
|
+
**95% 1-month VaR:**
|
|
240
|
+
```
|
|
241
|
+
VaR = $100,000 × (1.65 × 5.2% - 0.5%)
|
|
242
|
+
= $100,000 × (8.58% - 0.5%)
|
|
243
|
+
= $100,000 × 8.08%
|
|
244
|
+
= $8,080
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Interpretation:** 95% confident that portfolio will not lose more than $8,080 in the next month.
|
|
248
|
+
|
|
249
|
+
**Usage:**
|
|
250
|
+
- Risk budgeting
|
|
251
|
+
- Setting position limits
|
|
252
|
+
- Regulatory compliance (for institutions)
|
|
253
|
+
|
|
254
|
+
**Limitations:**
|
|
255
|
+
- Assumes historical patterns continue
|
|
256
|
+
- Underestimates tail risk (extreme events)
|
|
257
|
+
- Doesn't tell you about losses beyond VaR threshold
|
|
258
|
+
|
|
259
|
+
## Risk-Adjusted Return Metrics
|
|
260
|
+
|
|
261
|
+
### Sharpe Ratio
|
|
262
|
+
|
|
263
|
+
**Definition:** Excess return per unit of risk (reward-to-variability ratio).
|
|
264
|
+
|
|
265
|
+
**Formula:**
|
|
266
|
+
```
|
|
267
|
+
Sharpe Ratio = (R_portfolio - R_f) / σ_portfolio
|
|
268
|
+
|
|
269
|
+
Where:
|
|
270
|
+
R_portfolio = Portfolio return (annualized)
|
|
271
|
+
R_f = Risk-free rate (typically 10-year Treasury)
|
|
272
|
+
σ_portfolio = Portfolio standard deviation (annualized)
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Example Calculation:**
|
|
276
|
+
- Portfolio return: 12%
|
|
277
|
+
- Risk-free rate: 4%
|
|
278
|
+
- Portfolio std dev: 15%
|
|
279
|
+
|
|
280
|
+
**Sharpe = (12% - 4%) / 15% = 8% / 15% = 0.53**
|
|
281
|
+
|
|
282
|
+
**Interpretation:**
|
|
283
|
+
|
|
284
|
+
| Sharpe Ratio | Quality | Interpretation |
|
|
285
|
+
|--------------|---------|----------------|
|
|
286
|
+
| **< 0** | Poor | Return less than risk-free rate |
|
|
287
|
+
| **0 - 0.5** | Suboptimal | Low excess return for risk taken |
|
|
288
|
+
| **0.5 - 1.0** | Good | Adequate risk-adjusted return |
|
|
289
|
+
| **1.0 - 2.0** | Very Good | Strong risk-adjusted return |
|
|
290
|
+
| **> 2.0** | Excellent | Exceptional risk-adjusted return |
|
|
291
|
+
|
|
292
|
+
**Typical Sharpe Ratios:**
|
|
293
|
+
- S&P 500 (long-term): 0.3-0.5
|
|
294
|
+
- Well-managed equity portfolio: 0.5-0.8
|
|
295
|
+
- Exceptional hedge fund: 1.0-1.5
|
|
296
|
+
- Market-neutral strategy: 1.5-2.0+
|
|
297
|
+
|
|
298
|
+
**Usage:**
|
|
299
|
+
- Compare different portfolios or strategies
|
|
300
|
+
- Assess if additional risk is being compensated
|
|
301
|
+
- Benchmark against market (S&P 500 Sharpe)
|
|
302
|
+
|
|
303
|
+
**Limitations:**
|
|
304
|
+
- Penalizes upside volatility equally with downside
|
|
305
|
+
- Assumes normal distribution
|
|
306
|
+
- Sensitive to time period chosen
|
|
307
|
+
|
|
308
|
+
### Sortino Ratio
|
|
309
|
+
|
|
310
|
+
**Definition:** Like Sharpe ratio, but uses downside deviation instead of total volatility.
|
|
311
|
+
|
|
312
|
+
**Formula:**
|
|
313
|
+
```
|
|
314
|
+
Sortino Ratio = (R_portfolio - R_f) / Semi-deviation
|
|
315
|
+
|
|
316
|
+
Where semi-deviation only counts returns below risk-free rate
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**Example:**
|
|
320
|
+
- Portfolio return: 12%
|
|
321
|
+
- Risk-free rate: 4%
|
|
322
|
+
- Semi-deviation (downside only): 10%
|
|
323
|
+
|
|
324
|
+
**Sortino = (12% - 4%) / 10% = 0.80**
|
|
325
|
+
|
|
326
|
+
**Interpretation:**
|
|
327
|
+
- Higher Sortino = better downside-adjusted returns
|
|
328
|
+
- Sortino typically higher than Sharpe (since semi-deviation < standard deviation)
|
|
329
|
+
- Preferred metric for risk-averse investors
|
|
330
|
+
|
|
331
|
+
**Usage:**
|
|
332
|
+
- Evaluate strategies with asymmetric returns (e.g., option strategies)
|
|
333
|
+
- Focus on downside protection
|
|
334
|
+
- Compare portfolios with different return distributions
|
|
335
|
+
|
|
336
|
+
### Calmar Ratio
|
|
337
|
+
|
|
338
|
+
**Definition:** Return relative to maximum drawdown.
|
|
339
|
+
|
|
340
|
+
**Formula:**
|
|
341
|
+
```
|
|
342
|
+
Calmar Ratio = Annualized Return / |Max Drawdown|
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
**Example:**
|
|
346
|
+
- Annualized return: 10%
|
|
347
|
+
- Max drawdown: -25%
|
|
348
|
+
|
|
349
|
+
**Calmar = 10% / 25% = 0.40**
|
|
350
|
+
|
|
351
|
+
**Interpretation:**
|
|
352
|
+
|
|
353
|
+
| Calmar Ratio | Quality |
|
|
354
|
+
|--------------|---------|
|
|
355
|
+
| **< 0.5** | Poor (high drawdown relative to return) |
|
|
356
|
+
| **0.5 - 1.0** | Acceptable |
|
|
357
|
+
| **1.0 - 2.0** | Good |
|
|
358
|
+
| **> 2.0** | Excellent (low drawdown, high return) |
|
|
359
|
+
|
|
360
|
+
**Usage:**
|
|
361
|
+
- Focus on worst-case scenarios
|
|
362
|
+
- Evaluate hedge funds and absolute return strategies
|
|
363
|
+
- Assess recovery potential
|
|
364
|
+
|
|
365
|
+
## Concentration and Correlation Metrics
|
|
366
|
+
|
|
367
|
+
### Concentration Metrics
|
|
368
|
+
|
|
369
|
+
**1. Top-N Concentration**
|
|
370
|
+
|
|
371
|
+
Percentage of portfolio in largest N positions:
|
|
372
|
+
|
|
373
|
+
```
|
|
374
|
+
Top-N % = (Σ Top N Position Values) / Total Portfolio Value
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
**Guidelines:**
|
|
378
|
+
- Top 1 position: <10% ideal, <15% maximum
|
|
379
|
+
- Top 5 positions: <40% ideal, <50% maximum
|
|
380
|
+
- Top 10 positions: <60% ideal, <70% maximum
|
|
381
|
+
|
|
382
|
+
**2. Herfindahl-Hirschman Index (HHI)**
|
|
383
|
+
|
|
384
|
+
(See diversification-principles.md for detailed explanation)
|
|
385
|
+
|
|
386
|
+
```
|
|
387
|
+
HHI = Σ(Weight_i × 100)²
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
**Quick Assessment:**
|
|
391
|
+
- HHI < 1000: Well-diversified
|
|
392
|
+
- HHI 1000-1800: Moderately concentrated
|
|
393
|
+
- HHI > 1800: High concentration
|
|
394
|
+
|
|
395
|
+
### Correlation Metrics
|
|
396
|
+
|
|
397
|
+
**Average Pairwise Correlation**
|
|
398
|
+
|
|
399
|
+
Average correlation between all position pairs:
|
|
400
|
+
|
|
401
|
+
```
|
|
402
|
+
Avg Correlation = Σ(ρ_ij) / Number of pairs
|
|
403
|
+
|
|
404
|
+
Where:
|
|
405
|
+
ρ_ij = correlation between positions i and j
|
|
406
|
+
Number of pairs = n(n-1)/2 for n positions
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**Example (5 positions):**
|
|
410
|
+
- 10 pairs total
|
|
411
|
+
- Sum of correlations: 5.2
|
|
412
|
+
- Average: 5.2 / 10 = **0.52**
|
|
413
|
+
|
|
414
|
+
**Interpretation:**
|
|
415
|
+
|
|
416
|
+
| Avg Correlation | Diversification Quality |
|
|
417
|
+
|----------------|------------------------|
|
|
418
|
+
| **< 0.3** | Excellent (low correlation) |
|
|
419
|
+
| **0.3 - 0.5** | Good |
|
|
420
|
+
| **0.5 - 0.7** | Moderate (typical equity portfolio) |
|
|
421
|
+
| **> 0.7** | Poor (positions move together) |
|
|
422
|
+
|
|
423
|
+
## Risk Scoring Framework
|
|
424
|
+
|
|
425
|
+
### Composite Risk Score (0-100)
|
|
426
|
+
|
|
427
|
+
Combine multiple metrics into single score:
|
|
428
|
+
|
|
429
|
+
**Scoring Formula:**
|
|
430
|
+
|
|
431
|
+
```
|
|
432
|
+
Risk Score =
|
|
433
|
+
(Volatility Score × 30%) +
|
|
434
|
+
(Beta Score × 20%) +
|
|
435
|
+
(Drawdown Score × 25%) +
|
|
436
|
+
(Concentration Score × 25%)
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
**Individual Component Scores (0-100):**
|
|
440
|
+
|
|
441
|
+
**1. Volatility Score:**
|
|
442
|
+
- <10% std dev: 0-20 points (low risk)
|
|
443
|
+
- 10-15% std dev: 20-40 points
|
|
444
|
+
- 15-20% std dev: 40-60 points
|
|
445
|
+
- 20-25% std dev: 60-80 points
|
|
446
|
+
- >25% std dev: 80-100 points (very high risk)
|
|
447
|
+
|
|
448
|
+
**2. Beta Score:**
|
|
449
|
+
- β < 0.8: 0-20 points
|
|
450
|
+
- β 0.8-1.0: 20-40 points
|
|
451
|
+
- β 1.0-1.3: 40-60 points
|
|
452
|
+
- β 1.3-1.6: 60-80 points
|
|
453
|
+
- β > 1.6: 80-100 points
|
|
454
|
+
|
|
455
|
+
**3. Drawdown Score:**
|
|
456
|
+
- Max DD <10%: 0-20 points
|
|
457
|
+
- Max DD 10-20%: 20-40 points
|
|
458
|
+
- Max DD 20-30%: 40-60 points
|
|
459
|
+
- Max DD 30-40%: 60-80 points
|
|
460
|
+
- Max DD >40%: 80-100 points
|
|
461
|
+
|
|
462
|
+
**4. Concentration Score:**
|
|
463
|
+
- HHI <1000: 0-20 points
|
|
464
|
+
- HHI 1000-1500: 20-40 points
|
|
465
|
+
- HHI 1500-2000: 40-60 points
|
|
466
|
+
- HHI 2000-2500: 60-80 points
|
|
467
|
+
- HHI >2500: 80-100 points
|
|
468
|
+
|
|
469
|
+
**Composite Risk Score Interpretation:**
|
|
470
|
+
|
|
471
|
+
| Score | Risk Level | Appropriate For |
|
|
472
|
+
|-------|-----------|-----------------|
|
|
473
|
+
| **0-20** | Very Low | Ultra-conservative, retirees |
|
|
474
|
+
| **20-40** | Low | Conservative investors |
|
|
475
|
+
| **40-60** | Moderate | Balanced investors |
|
|
476
|
+
| **60-80** | High | Growth-oriented investors |
|
|
477
|
+
| **80-100** | Very High | Aggressive, long time horizon |
|
|
478
|
+
|
|
479
|
+
## Practical Risk Assessment Workflow
|
|
480
|
+
|
|
481
|
+
### Step 1: Calculate Basic Metrics
|
|
482
|
+
|
|
483
|
+
1. **Portfolio Beta** (weighted average of position betas)
|
|
484
|
+
2. **Standard Deviation** (if historical data available, else estimate)
|
|
485
|
+
3. **Maximum Drawdown** (from portfolio history)
|
|
486
|
+
4. **Current Drawdown** (vs recent peak)
|
|
487
|
+
5. **Top-5 Concentration** (sum of 5 largest positions)
|
|
488
|
+
6. **HHI** (concentration index)
|
|
489
|
+
|
|
490
|
+
### Step 2: Compare to Benchmarks
|
|
491
|
+
|
|
492
|
+
**Against S&P 500:**
|
|
493
|
+
- Is beta higher or lower than 1.0?
|
|
494
|
+
- Is volatility higher or lower than ~16%?
|
|
495
|
+
|
|
496
|
+
**Against Risk Profile Targets:**
|
|
497
|
+
- Does risk level match investor's stated risk tolerance?
|
|
498
|
+
- Is maximum drawdown acceptable?
|
|
499
|
+
|
|
500
|
+
### Step 3: Identify Risk Concentrations
|
|
501
|
+
|
|
502
|
+
**Position-Level:**
|
|
503
|
+
- Any position >15%? → Immediate trim
|
|
504
|
+
- Top 5 >50%? → High concentration
|
|
505
|
+
|
|
506
|
+
**Sector-Level:**
|
|
507
|
+
- Any sector >35%? → Concentration risk
|
|
508
|
+
- Any sector missing? → Diversification gap
|
|
509
|
+
|
|
510
|
+
**Factor-Level:**
|
|
511
|
+
- All high-beta growth stocks? → Factor concentration
|
|
512
|
+
- All value stocks? → Style concentration
|
|
513
|
+
|
|
514
|
+
### Step 4: Risk-Adjusted Performance
|
|
515
|
+
|
|
516
|
+
1. **Calculate Sharpe Ratio** (if return history available)
|
|
517
|
+
2. **Compare to benchmark:** Is portfolio delivering better risk-adjusted returns?
|
|
518
|
+
3. **Calculate Sortino Ratio** for downside focus
|
|
519
|
+
4. **Assess if excess risk is being rewarded**
|
|
520
|
+
|
|
521
|
+
### Step 5: Generate Risk Assessment
|
|
522
|
+
|
|
523
|
+
**Summary Format:**
|
|
524
|
+
|
|
525
|
+
```markdown
|
|
526
|
+
## Portfolio Risk Assessment
|
|
527
|
+
|
|
528
|
+
**Overall Risk Profile:** [Conservative / Moderate / Growth / Aggressive]
|
|
529
|
+
|
|
530
|
+
**Risk Score:** XX/100 ([Low / Medium / High / Very High])
|
|
531
|
+
|
|
532
|
+
**Key Metrics:**
|
|
533
|
+
- Portfolio Beta: X.XX (vs market 1.00)
|
|
534
|
+
- Estimated Volatility: XX% annualized
|
|
535
|
+
- Maximum Drawdown: -XX% (acceptable for [risk profile])
|
|
536
|
+
- Current Drawdown: -X% (vs recent peak)
|
|
537
|
+
|
|
538
|
+
**Risk Concentrations:**
|
|
539
|
+
- Top 5 positions: XX% of portfolio ([OK / High / Excessive])
|
|
540
|
+
- Largest single position: [SYMBOL] at XX% ([OK / Trim recommended])
|
|
541
|
+
- HHI: XXXX ([Well-diversified / Concentrated])
|
|
542
|
+
|
|
543
|
+
**Risk-Adjusted Performance:**
|
|
544
|
+
- Sharpe Ratio: X.XX ([Below / In-line / Above] market)
|
|
545
|
+
- Sortino Ratio: X.XX
|
|
546
|
+
- Performance for risk taken: [Excellent / Good / Fair / Poor]
|
|
547
|
+
|
|
548
|
+
**Risk Recommendations:**
|
|
549
|
+
- [List specific actions to reduce risk if needed]
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
## Risk Management Guidelines
|
|
553
|
+
|
|
554
|
+
### When to Reduce Risk
|
|
555
|
+
|
|
556
|
+
**Signals:**
|
|
557
|
+
- Portfolio beta >1.5 for moderate risk tolerance investor
|
|
558
|
+
- Max drawdown exceeds investor's tolerance
|
|
559
|
+
- Single position >15% of portfolio
|
|
560
|
+
- Sector concentration >40%
|
|
561
|
+
- Current drawdown >20% (entering bear market)
|
|
562
|
+
|
|
563
|
+
**Actions:**
|
|
564
|
+
- Trim concentrated positions
|
|
565
|
+
- Add defensive sectors (Utilities, Staples, Healthcare)
|
|
566
|
+
- Increase bond allocation
|
|
567
|
+
- Raise cash levels
|
|
568
|
+
|
|
569
|
+
### When to Increase Risk
|
|
570
|
+
|
|
571
|
+
**Signals:**
|
|
572
|
+
- Portfolio beta <0.7 for growth-oriented investor
|
|
573
|
+
- Cash position >15% (unless intentionally defensive)
|
|
574
|
+
- Underperforming benchmark significantly with lower volatility
|
|
575
|
+
- Long time horizon with conservative allocation
|
|
576
|
+
|
|
577
|
+
**Actions:**
|
|
578
|
+
- Add growth sectors (Technology, Consumer Discretionary)
|
|
579
|
+
- Increase equity allocation
|
|
580
|
+
- Deploy excess cash
|
|
581
|
+
- Add higher-conviction positions
|
|
582
|
+
|
|
583
|
+
## Summary
|
|
584
|
+
|
|
585
|
+
**Key Takeaways:**
|
|
586
|
+
|
|
587
|
+
1. **Multiple metrics needed:** No single metric tells the full story
|
|
588
|
+
2. **Volatility measures:** Standard deviation and beta for overall risk
|
|
589
|
+
3. **Downside risk:** Maximum drawdown, current drawdown, VaR for worst-case scenarios
|
|
590
|
+
4. **Risk-adjusted returns:** Sharpe and Sortino ratios for performance quality
|
|
591
|
+
5. **Concentration:** HHI and top-N positions for diversification assessment
|
|
592
|
+
6. **Match to investor:** Risk metrics must align with risk tolerance and goals
|
|
593
|
+
7. **Monitor continuously:** Risk characteristics change as markets move
|
|
594
|
+
|
|
595
|
+
**Practical Application:**
|
|
596
|
+
|
|
597
|
+
- Calculate key metrics quarterly
|
|
598
|
+
- Compare to investor risk tolerance
|
|
599
|
+
- Identify concentrations and gaps
|
|
600
|
+
- Adjust allocation to maintain target risk level
|
|
601
|
+
- Document risk assessment in portfolio reports
|
|
602
|
+
|
|
603
|
+
**Remember:** Risk metrics are tools, not absolute truth. Use judgment and consider qualitative factors (market environment, economic outlook, investor circumstances) alongside quantitative metrics.
|