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,553 @@
|
|
|
1
|
+
# Diversification Principles
|
|
2
|
+
|
|
3
|
+
This document explains the theory and practice of portfolio diversification, providing frameworks for assessing diversification quality and identifying concentration risks.
|
|
4
|
+
|
|
5
|
+
## Core Concepts
|
|
6
|
+
|
|
7
|
+
### What is Diversification?
|
|
8
|
+
|
|
9
|
+
Diversification is the practice of spreading investments across various assets, sectors, and geographies to reduce portfolio risk without proportionally reducing expected returns.
|
|
10
|
+
|
|
11
|
+
**Harry Markowitz's Key Insight (1952):**
|
|
12
|
+
> "Diversification is the only free lunch in finance."
|
|
13
|
+
|
|
14
|
+
By combining assets with imperfect correlation, investors can achieve better risk-adjusted returns than holding individual securities.
|
|
15
|
+
|
|
16
|
+
### The Math Behind Diversification
|
|
17
|
+
|
|
18
|
+
**Portfolio Risk Formula:**
|
|
19
|
+
|
|
20
|
+
For a two-asset portfolio:
|
|
21
|
+
```
|
|
22
|
+
σ_p = √(w₁²σ₁² + w₂²σ₂² + 2w₁w₂σ₁σ₂ρ₁₂)
|
|
23
|
+
|
|
24
|
+
Where:
|
|
25
|
+
σ_p = Portfolio standard deviation (risk)
|
|
26
|
+
w₁, w₂ = Weights of assets 1 and 2
|
|
27
|
+
σ₁, σ₂ = Standard deviations of assets 1 and 2
|
|
28
|
+
ρ₁₂ = Correlation between assets 1 and 2
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Key Insight:** When correlation < 1.0, portfolio risk is less than the weighted average of individual risks.
|
|
32
|
+
|
|
33
|
+
### Types of Risk
|
|
34
|
+
|
|
35
|
+
**1. Systematic Risk (Market Risk)**
|
|
36
|
+
- **Definition:** Risk inherent to the entire market
|
|
37
|
+
- **Examples:** Recessions, interest rate changes, geopolitical events
|
|
38
|
+
- **Cannot be eliminated** by diversification
|
|
39
|
+
- **Beta** measures exposure to systematic risk
|
|
40
|
+
|
|
41
|
+
**2. Unsystematic Risk (Specific Risk)**
|
|
42
|
+
- **Definition:** Risk specific to individual companies or sectors
|
|
43
|
+
- **Examples:** Management failures, product recalls, competitive losses
|
|
44
|
+
- **Can be reduced** through diversification
|
|
45
|
+
- **Diversification benefit:** Holding 15-30 stocks eliminates ~90% of unsystematic risk
|
|
46
|
+
|
|
47
|
+
**Modern Portfolio Theory Goal:** Eliminate unsystematic risk while accepting systematic risk (compensated by market risk premium).
|
|
48
|
+
|
|
49
|
+
## Optimal Number of Holdings
|
|
50
|
+
|
|
51
|
+
### Individual Stocks
|
|
52
|
+
|
|
53
|
+
Research shows diminishing diversification benefits beyond a certain number of holdings:
|
|
54
|
+
|
|
55
|
+
| Number of Stocks | % of Unsystematic Risk Eliminated |
|
|
56
|
+
|------------------|----------------------------------|
|
|
57
|
+
| 1 | 0% (all risk remains) |
|
|
58
|
+
| 5 | ~40% |
|
|
59
|
+
| 10 | ~65% |
|
|
60
|
+
| 15 | ~75% |
|
|
61
|
+
| 20 | ~85% |
|
|
62
|
+
| 30 | ~90% |
|
|
63
|
+
| 50 | ~93% |
|
|
64
|
+
| 100 | ~95% |
|
|
65
|
+
|
|
66
|
+
**Recommended Range: 15-30 stocks**
|
|
67
|
+
|
|
68
|
+
**Why not more than 30?**
|
|
69
|
+
- Marginal diversification benefit very small
|
|
70
|
+
- Increased complexity and monitoring burden
|
|
71
|
+
- Higher transaction costs
|
|
72
|
+
- Diluted impact of high-conviction ideas
|
|
73
|
+
- "Closet indexing" (might as well own an ETF)
|
|
74
|
+
|
|
75
|
+
**Why not fewer than 15?**
|
|
76
|
+
- Insufficient elimination of unsystematic risk
|
|
77
|
+
- Concentration risk remains significant
|
|
78
|
+
- Single-stock events can severely impact portfolio
|
|
79
|
+
- Correlation underestimation risk
|
|
80
|
+
|
|
81
|
+
### ETFs and Mutual Funds
|
|
82
|
+
|
|
83
|
+
**For diversified funds (broad market, sector, international):**
|
|
84
|
+
- **5-10 ETFs** can provide excellent diversification
|
|
85
|
+
- Each ETF already holds dozens to thousands of stocks
|
|
86
|
+
- Focus on low overlap and complementary exposures
|
|
87
|
+
|
|
88
|
+
**Example Well-Diversified 6-ETF Portfolio:**
|
|
89
|
+
1. US Large Cap (S&P 500)
|
|
90
|
+
2. US Small/Mid Cap
|
|
91
|
+
3. International Developed Markets
|
|
92
|
+
4. Emerging Markets
|
|
93
|
+
5. US Bonds (Aggregate)
|
|
94
|
+
6. Real Estate (REITs)
|
|
95
|
+
|
|
96
|
+
## Correlation and Diversification
|
|
97
|
+
|
|
98
|
+
### Understanding Correlation
|
|
99
|
+
|
|
100
|
+
**Correlation coefficient (ρ) ranges from -1.0 to +1.0:**
|
|
101
|
+
|
|
102
|
+
| Correlation | Interpretation | Diversification Benefit |
|
|
103
|
+
|-------------|----------------|------------------------|
|
|
104
|
+
| **+1.0** | Perfect positive correlation | None (redundant holdings) |
|
|
105
|
+
| **+0.7 to +0.9** | Very high correlation | Minimal |
|
|
106
|
+
| **+0.3 to +0.7** | Moderate positive correlation | Good |
|
|
107
|
+
| **0 to +0.3** | Low positive correlation | Excellent |
|
|
108
|
+
| **0** | No correlation | Maximum benefit |
|
|
109
|
+
| **-0.3 to 0** | Low negative correlation | Excellent (hedging) |
|
|
110
|
+
| **< -0.3** | Moderate to strong negative correlation | Hedging properties |
|
|
111
|
+
|
|
112
|
+
### Typical Stock Correlations
|
|
113
|
+
|
|
114
|
+
**Within Same Sector:**
|
|
115
|
+
- Large tech stocks (AAPL, MSFT, GOOGL): ρ ≈ 0.6-0.8
|
|
116
|
+
- Banks (JPM, BAC, WFC): ρ ≈ 0.7-0.9
|
|
117
|
+
- Oil companies (XOM, CVX): ρ ≈ 0.8-0.9
|
|
118
|
+
|
|
119
|
+
**Across Different Sectors:**
|
|
120
|
+
- Tech vs Healthcare: ρ ≈ 0.3-0.5
|
|
121
|
+
- Utilities vs Technology: ρ ≈ 0.2-0.4
|
|
122
|
+
- Consumer Staples vs Energy: ρ ≈ 0.3-0.5
|
|
123
|
+
|
|
124
|
+
**Defensive vs Cyclical:**
|
|
125
|
+
- Utilities vs Industrials: ρ ≈ 0.2-0.4
|
|
126
|
+
- Consumer Staples vs Consumer Discretionary: ρ ≈ 0.4-0.6
|
|
127
|
+
|
|
128
|
+
**US vs International:**
|
|
129
|
+
- US stocks vs International Developed: ρ ≈ 0.7-0.9 (increasing over time)
|
|
130
|
+
- US stocks vs Emerging Markets: ρ ≈ 0.6-0.8
|
|
131
|
+
|
|
132
|
+
**Stocks vs Bonds:**
|
|
133
|
+
- US Stocks vs US Treasuries: ρ ≈ -0.2 to +0.3 (varies by regime)
|
|
134
|
+
- Stocks vs Corporate Bonds: ρ ≈ 0.4-0.6
|
|
135
|
+
|
|
136
|
+
### Correlation Pitfalls
|
|
137
|
+
|
|
138
|
+
**1. Correlation Instability**
|
|
139
|
+
- Correlations increase during market crashes ("correlation goes to 1 in a crisis")
|
|
140
|
+
- Diversification benefits diminish when most needed
|
|
141
|
+
- Solution: Include truly uncorrelated assets (gold, volatility strategies)
|
|
142
|
+
|
|
143
|
+
**2. Hidden Correlations**
|
|
144
|
+
- Stocks may appear different but share common risk factors
|
|
145
|
+
- Example: Bank stocks + homebuilders both exposed to interest rates
|
|
146
|
+
- Solution: Analyze underlying risk factors, not just sector labels
|
|
147
|
+
|
|
148
|
+
**3. Globalization Effect**
|
|
149
|
+
- International diversification less effective than historically
|
|
150
|
+
- US and global markets increasingly correlated
|
|
151
|
+
- Solution: Still valuable, but expect lower diversification benefit than in past
|
|
152
|
+
|
|
153
|
+
## Concentration Risk Measurement
|
|
154
|
+
|
|
155
|
+
### Position Concentration
|
|
156
|
+
|
|
157
|
+
**Single Position Thresholds:**
|
|
158
|
+
|
|
159
|
+
| Position Size | Risk Level | Action |
|
|
160
|
+
|---------------|------------|--------|
|
|
161
|
+
| **<5%** | Low | Acceptable for all positions |
|
|
162
|
+
| **5-10%** | Medium | Monitor, ensure high conviction |
|
|
163
|
+
| **10-15%** | High | Trim recommended unless exceptional conviction |
|
|
164
|
+
| **15-20%** | Very High | Trim immediately (except rare cases) |
|
|
165
|
+
| **>20%** | Extreme | Urgent trim required |
|
|
166
|
+
|
|
167
|
+
**Top Holdings Concentration:**
|
|
168
|
+
|
|
169
|
+
| Top 5 Holdings | Risk Assessment |
|
|
170
|
+
|----------------|-----------------|
|
|
171
|
+
| **<25%** | Well-diversified |
|
|
172
|
+
| **25-40%** | Moderate concentration |
|
|
173
|
+
| **40-60%** | High concentration |
|
|
174
|
+
| **>60%** | Excessive concentration |
|
|
175
|
+
|
|
176
|
+
**Example:**
|
|
177
|
+
- If top 5 positions = 55% of portfolio → High concentration risk
|
|
178
|
+
- If largest single position = 18% → Immediate trim recommended
|
|
179
|
+
|
|
180
|
+
### Sector Concentration
|
|
181
|
+
|
|
182
|
+
**Sector Allocation Thresholds:**
|
|
183
|
+
|
|
184
|
+
| Sector Weight | Risk Level | Guidance |
|
|
185
|
+
|---------------|------------|----------|
|
|
186
|
+
| **<15%** | Underweight | May be intentional or opportunity |
|
|
187
|
+
| **15-25%** | Normal | Typical for major sectors |
|
|
188
|
+
| **25-30%** | Moderate overweight | Monitor, ensure intentional |
|
|
189
|
+
| **30-40%** | High overweight | Trim recommended |
|
|
190
|
+
| **>40%** | Excessive concentration | Urgent diversification needed |
|
|
191
|
+
|
|
192
|
+
**S&P 500 Sector Benchmarks (approximate):**
|
|
193
|
+
- Technology: 25-30%
|
|
194
|
+
- Healthcare: 12-15%
|
|
195
|
+
- Financials: 10-13%
|
|
196
|
+
- Consumer Discretionary: 10-12%
|
|
197
|
+
- Communication Services: 8-10%
|
|
198
|
+
- Industrials: 8-10%
|
|
199
|
+
- Consumer Staples: 6-8%
|
|
200
|
+
- Energy: 3-5%
|
|
201
|
+
- Utilities: 2-3%
|
|
202
|
+
- Real Estate: 2-3%
|
|
203
|
+
- Materials: 2-3%
|
|
204
|
+
|
|
205
|
+
**Deviation Analysis:**
|
|
206
|
+
- **>10% above benchmark** = Significant overweight (ensure intentional)
|
|
207
|
+
- **>20% above benchmark** = Excessive overweight (trim recommended)
|
|
208
|
+
|
|
209
|
+
### Herfindahl-Hirschman Index (HHI)
|
|
210
|
+
|
|
211
|
+
**Formula:**
|
|
212
|
+
```
|
|
213
|
+
HHI = Σ(w_i × 100)²
|
|
214
|
+
|
|
215
|
+
Where w_i = weight of position i (as decimal)
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Interpretation:**
|
|
219
|
+
|
|
220
|
+
| HHI Score | Concentration Level | Portfolio Characteristics |
|
|
221
|
+
|-----------|---------------------|--------------------------|
|
|
222
|
+
| **<1000** | Low concentration | Well-diversified (25+ equal positions) |
|
|
223
|
+
| **1000-1800** | Moderate concentration | Typical diversified portfolio (15-25 stocks) |
|
|
224
|
+
| **1800-2500** | High concentration | Concentrated portfolio (8-15 stocks) |
|
|
225
|
+
| **>2500** | Very high concentration | Very concentrated (5-8 stocks) |
|
|
226
|
+
| **>4000** | Extreme concentration | Poorly diversified (<5 stocks) |
|
|
227
|
+
|
|
228
|
+
**Example Calculation:**
|
|
229
|
+
|
|
230
|
+
Portfolio with 5 positions:
|
|
231
|
+
- Position A: 30% → (30)² = 900
|
|
232
|
+
- Position B: 25% → (25)² = 625
|
|
233
|
+
- Position C: 20% → (20)² = 400
|
|
234
|
+
- Position D: 15% → (15)² = 225
|
|
235
|
+
- Position E: 10% → (10)² = 100
|
|
236
|
+
|
|
237
|
+
HHI = 900 + 625 + 400 + 225 + 100 = **2250** (High concentration)
|
|
238
|
+
|
|
239
|
+
## Multi-Dimensional Diversification
|
|
240
|
+
|
|
241
|
+
Effective diversification requires spreading risk across multiple dimensions:
|
|
242
|
+
|
|
243
|
+
### 1. Number of Holdings (Quantity)
|
|
244
|
+
- **Target:** 15-30 individual stocks OR 5-10 diversified funds
|
|
245
|
+
- **Measure:** Count of positions
|
|
246
|
+
- **Risk:** Too few = concentration; too many = over-diversification
|
|
247
|
+
|
|
248
|
+
### 2. Position Sizing (Weight)
|
|
249
|
+
- **Target:** No single position >10-15%, top 5 <40%
|
|
250
|
+
- **Measure:** HHI, top-N concentration
|
|
251
|
+
- **Risk:** Unequal weighting creates concentration despite many holdings
|
|
252
|
+
|
|
253
|
+
### 3. Sector Allocation (Industry)
|
|
254
|
+
- **Target:** No sector >30-35%, diversified across 6+ sectors
|
|
255
|
+
- **Measure:** Sector breakdown, compare to benchmark
|
|
256
|
+
- **Risk:** Industry-specific shocks (e.g., tech crash 2000, financial crisis 2008)
|
|
257
|
+
|
|
258
|
+
### 4. Market Cap (Size)
|
|
259
|
+
- **Target:** Mix of large-cap (60-70%), mid-cap (20-25%), small-cap (10-15%)
|
|
260
|
+
- **Measure:** Weighted average market cap, cap-based breakdown
|
|
261
|
+
- **Risk:** Small caps more volatile; large caps may underperform in recoveries
|
|
262
|
+
|
|
263
|
+
### 5. Geography (Region)
|
|
264
|
+
- **Target:** US 60-75%, International Developed 15-25%, Emerging Markets 5-15%
|
|
265
|
+
- **Measure:** Revenue geography, listing geography
|
|
266
|
+
- **Risk:** Country-specific risks (politics, currency, regulation)
|
|
267
|
+
|
|
268
|
+
### 6. Style (Growth vs Value)
|
|
269
|
+
- **Target:** Balanced or slight tilt based on market cycle
|
|
270
|
+
- **Measure:** Average P/E, P/B, growth rates of holdings
|
|
271
|
+
- **Risk:** Style rotation (growth outperforms in some periods, value in others)
|
|
272
|
+
|
|
273
|
+
### 7. Correlation (Independence)
|
|
274
|
+
- **Target:** Average pairwise correlation <0.6
|
|
275
|
+
- **Measure:** Correlation matrix of holdings
|
|
276
|
+
- **Risk:** High correlation = false diversification
|
|
277
|
+
|
|
278
|
+
### 8. Factor Exposures (Risk Factors)
|
|
279
|
+
- **Target:** Balanced exposure to momentum, quality, volatility, etc.
|
|
280
|
+
- **Measure:** Factor loadings (requires advanced analytics)
|
|
281
|
+
- **Risk:** Concentrated factor bets (e.g., all momentum stocks)
|
|
282
|
+
|
|
283
|
+
## Practical Diversification Strategies
|
|
284
|
+
|
|
285
|
+
### Strategy 1: Equal Weighting
|
|
286
|
+
|
|
287
|
+
**Method:** Each position gets equal allocation (e.g., 20 stocks = 5% each)
|
|
288
|
+
|
|
289
|
+
**Pros:**
|
|
290
|
+
- Simple to implement
|
|
291
|
+
- Automatic rebalancing to smaller positions
|
|
292
|
+
- Reduces concentration risk
|
|
293
|
+
|
|
294
|
+
**Cons:**
|
|
295
|
+
- Ignores conviction levels
|
|
296
|
+
- May overweight low-quality names
|
|
297
|
+
- Higher turnover (frequent rebalancing)
|
|
298
|
+
|
|
299
|
+
**Best for:** Passive investors, index-like approaches
|
|
300
|
+
|
|
301
|
+
### Strategy 2: Conviction Weighting
|
|
302
|
+
|
|
303
|
+
**Method:** Allocate more to high-conviction ideas, less to lower conviction
|
|
304
|
+
|
|
305
|
+
**Example Tiers:**
|
|
306
|
+
- High conviction: 7-10% positions (5-8 stocks)
|
|
307
|
+
- Medium conviction: 4-6% positions (8-12 stocks)
|
|
308
|
+
- Low conviction / Satellite: 2-3% positions (5-10 stocks)
|
|
309
|
+
|
|
310
|
+
**Pros:**
|
|
311
|
+
- Reflects analytical edge
|
|
312
|
+
- Better risk-adjusted returns if skill exists
|
|
313
|
+
- Maintains diversification
|
|
314
|
+
|
|
315
|
+
**Cons:**
|
|
316
|
+
- Requires honest conviction assessment
|
|
317
|
+
- Risk of overconfidence
|
|
318
|
+
- Can lead to concentration
|
|
319
|
+
|
|
320
|
+
**Best for:** Active investors with research capability
|
|
321
|
+
|
|
322
|
+
### Strategy 3: Risk Parity
|
|
323
|
+
|
|
324
|
+
**Method:** Allocate based on risk contribution, not dollar value
|
|
325
|
+
|
|
326
|
+
**Example:**
|
|
327
|
+
- Volatile stock (beta 1.8): 3% allocation
|
|
328
|
+
- Moderate stock (beta 1.0): 5% allocation
|
|
329
|
+
- Stable stock (beta 0.6): 8% allocation
|
|
330
|
+
|
|
331
|
+
**Pros:**
|
|
332
|
+
- True diversification of risk
|
|
333
|
+
- More stable portfolio performance
|
|
334
|
+
- Thoughtful risk management
|
|
335
|
+
|
|
336
|
+
**Cons:**
|
|
337
|
+
- Complex to implement
|
|
338
|
+
- Requires volatility estimates
|
|
339
|
+
- May overweight low-quality stable stocks
|
|
340
|
+
|
|
341
|
+
**Best for:** Sophisticated investors, risk-focused approaches
|
|
342
|
+
|
|
343
|
+
### Strategy 4: Core-Satellite
|
|
344
|
+
|
|
345
|
+
**Method:**
|
|
346
|
+
- **Core (60-80%):** Diversified, low-cost index funds
|
|
347
|
+
- **Satellite (20-40%):** High-conviction individual stocks or sector bets
|
|
348
|
+
|
|
349
|
+
**Pros:**
|
|
350
|
+
- Combines passive diversification with active upside
|
|
351
|
+
- Reduces risk of stock-picking errors
|
|
352
|
+
- Cost-efficient
|
|
353
|
+
|
|
354
|
+
**Cons:**
|
|
355
|
+
- Performance depends on satellite selection
|
|
356
|
+
- Complexity in management
|
|
357
|
+
- Tax efficiency varies
|
|
358
|
+
|
|
359
|
+
**Best for:** Investors who want both diversification and active involvement
|
|
360
|
+
|
|
361
|
+
## Diversification Quality Checklist
|
|
362
|
+
|
|
363
|
+
Use this checklist to assess portfolio diversification:
|
|
364
|
+
|
|
365
|
+
**Position Diversification:**
|
|
366
|
+
- [ ] Portfolio has 15-30 stocks (or 5-10 diversified funds)
|
|
367
|
+
- [ ] No single position exceeds 10% of portfolio
|
|
368
|
+
- [ ] No single position exceeds 15% of portfolio
|
|
369
|
+
- [ ] Top 5 positions represent less than 40% of portfolio
|
|
370
|
+
- [ ] HHI score below 1800
|
|
371
|
+
|
|
372
|
+
**Sector Diversification:**
|
|
373
|
+
- [ ] No single sector exceeds 30% of equity allocation
|
|
374
|
+
- [ ] Portfolio includes at least 6 different sectors
|
|
375
|
+
- [ ] Sector weights reasonably close to benchmark (within 15%)
|
|
376
|
+
- [ ] Balance between growth, defensive, and cyclical sectors
|
|
377
|
+
- [ ] No overconcentration in single industry (e.g., semiconductors within tech)
|
|
378
|
+
|
|
379
|
+
**Correlation Diversification:**
|
|
380
|
+
- [ ] Holdings span multiple industries with different drivers
|
|
381
|
+
- [ ] Average pairwise correlation estimated below 0.6
|
|
382
|
+
- [ ] Not all positions are high-beta growth stocks
|
|
383
|
+
- [ ] Includes mix of cyclical and defensive names
|
|
384
|
+
- [ ] Some low-correlation positions included (staples, utilities, healthcare)
|
|
385
|
+
|
|
386
|
+
**Geographic Diversification:**
|
|
387
|
+
- [ ] International exposure present (15-30% of equities)
|
|
388
|
+
- [ ] Not 100% dependent on US economic performance
|
|
389
|
+
- [ ] Emerging market exposure if appropriate for risk tolerance
|
|
390
|
+
- [ ] Consider revenue geography, not just listing location
|
|
391
|
+
|
|
392
|
+
**Market Cap Diversification:**
|
|
393
|
+
- [ ] Mix of large-cap, mid-cap, and potentially small-cap
|
|
394
|
+
- [ ] Not exclusively mega-caps (>$500B)
|
|
395
|
+
- [ ] Not exclusively small-caps (<$2B)
|
|
396
|
+
- [ ] Weighted average market cap appropriate for risk tolerance
|
|
397
|
+
|
|
398
|
+
**Asset Class Diversification:**
|
|
399
|
+
- [ ] Equity allocation matches risk tolerance
|
|
400
|
+
- [ ] Fixed income present (unless very aggressive allocation)
|
|
401
|
+
- [ ] Cash buffer for opportunities and liquidity
|
|
402
|
+
- [ ] Alternative assets if appropriate (real estate, commodities)
|
|
403
|
+
|
|
404
|
+
## Common Diversification Mistakes
|
|
405
|
+
|
|
406
|
+
### Mistake 1: False Diversification
|
|
407
|
+
|
|
408
|
+
**Problem:** Holding many stocks that are highly correlated
|
|
409
|
+
|
|
410
|
+
**Example:**
|
|
411
|
+
- Portfolio: AAPL, MSFT, GOOGL, AMZN, META, NVDA, TSLA (all large-cap tech/growth)
|
|
412
|
+
- **Appears** diversified (7 stocks)
|
|
413
|
+
- **Actually** highly concentrated (single sector, similar risk factors)
|
|
414
|
+
|
|
415
|
+
**Solution:** Diversify across sectors, not just number of names
|
|
416
|
+
|
|
417
|
+
### Mistake 2: Over-Diversification ("Diworsification")
|
|
418
|
+
|
|
419
|
+
**Problem:** Holding too many positions, diluting returns with no additional risk reduction
|
|
420
|
+
|
|
421
|
+
**Example:**
|
|
422
|
+
- 100 individual stock positions
|
|
423
|
+
- Overlap with index funds
|
|
424
|
+
- Closet indexing with higher fees
|
|
425
|
+
|
|
426
|
+
**Solution:** Stick to 15-30 best ideas OR use low-cost index funds
|
|
427
|
+
|
|
428
|
+
### Mistake 3: Home Country Bias
|
|
429
|
+
|
|
430
|
+
**Problem:** Overweighting domestic stocks, missing global opportunities
|
|
431
|
+
|
|
432
|
+
**Example:**
|
|
433
|
+
- US investor with 95% US stocks
|
|
434
|
+
- US represents ~60% of global market cap
|
|
435
|
+
- Missing international diversification benefit
|
|
436
|
+
|
|
437
|
+
**Solution:** Allocate 15-30% to international equities
|
|
438
|
+
|
|
439
|
+
### Mistake 4: Employer Stock Concentration
|
|
440
|
+
|
|
441
|
+
**Problem:** Large position in employer stock creates correlated life risks
|
|
442
|
+
|
|
443
|
+
**Example:**
|
|
444
|
+
- 40% of portfolio in employer stock
|
|
445
|
+
- Job + portfolio both dependent on same company
|
|
446
|
+
- "Double jeopardy" if company struggles
|
|
447
|
+
|
|
448
|
+
**Solution:** Trim to <10% of portfolio, diversify proceeds
|
|
449
|
+
|
|
450
|
+
### Mistake 5: Sector Drift
|
|
451
|
+
|
|
452
|
+
**Problem:** Letting winners run creates unintended sector concentration
|
|
453
|
+
|
|
454
|
+
**Example:**
|
|
455
|
+
- Tech stocks appreciate 200%, now 50% of portfolio
|
|
456
|
+
- Investor didn't actively overweight tech, just didn't rebalance
|
|
457
|
+
- Concentrated risk without conviction
|
|
458
|
+
|
|
459
|
+
**Solution:** Regular rebalancing to maintain diversification
|
|
460
|
+
|
|
461
|
+
### Mistake 6: Forgetting About Bonds
|
|
462
|
+
|
|
463
|
+
**Problem:** 100% equities for investors who can't handle volatility
|
|
464
|
+
|
|
465
|
+
**Example:**
|
|
466
|
+
- Aggressive investor holds all stocks
|
|
467
|
+
- Market drops 30%, investor panics and sells at bottom
|
|
468
|
+
- Would have been better with 70/30 stock/bond mix
|
|
469
|
+
|
|
470
|
+
**Solution:** Match allocation to risk tolerance and time horizon
|
|
471
|
+
|
|
472
|
+
### Mistake 7: Low-Quality Diversification
|
|
473
|
+
|
|
474
|
+
**Problem:** Adding poor-quality stocks just to increase position count
|
|
475
|
+
|
|
476
|
+
**Example:**
|
|
477
|
+
- Has 20 quality stocks, adds 10 speculative names to "diversify"
|
|
478
|
+
- Speculative names drag down returns without meaningfully reducing risk
|
|
479
|
+
- Quality dilution
|
|
480
|
+
|
|
481
|
+
**Solution:** Diversify within quality standards, don't lower bar for diversification
|
|
482
|
+
|
|
483
|
+
## Advanced Topics
|
|
484
|
+
|
|
485
|
+
### Factor-Based Diversification
|
|
486
|
+
|
|
487
|
+
Beyond traditional diversification, consider factor exposures:
|
|
488
|
+
|
|
489
|
+
**Common Factors:**
|
|
490
|
+
- **Value:** Low P/E, P/B stocks
|
|
491
|
+
- **Growth:** High revenue/earnings growth
|
|
492
|
+
- **Momentum:** Recent price performance
|
|
493
|
+
- **Quality:** High ROE, stable earnings
|
|
494
|
+
- **Low Volatility:** Low beta, stable returns
|
|
495
|
+
- **Size:** Small cap vs large cap
|
|
496
|
+
|
|
497
|
+
**Factor Diversification:**
|
|
498
|
+
- Avoid loading entirely on one factor (e.g., all momentum stocks)
|
|
499
|
+
- Balance factor exposures or tilt deliberately
|
|
500
|
+
- Recognize factor cycles (value outperforms in some periods, growth in others)
|
|
501
|
+
|
|
502
|
+
### Tail Risk and Black Swans
|
|
503
|
+
|
|
504
|
+
**Problem:** Normal diversification fails in extreme events
|
|
505
|
+
|
|
506
|
+
**2008 Financial Crisis Example:**
|
|
507
|
+
- Stocks fell 50%+
|
|
508
|
+
- Most correlations approached 1.0
|
|
509
|
+
- Traditional diversification provided limited protection
|
|
510
|
+
|
|
511
|
+
**Solutions:**
|
|
512
|
+
- **Include uncorrelated assets:** Gold, long-volatility strategies, managed futures
|
|
513
|
+
- **Tail hedges:** Put options, VIX calls (expensive, insurance-like)
|
|
514
|
+
- **Portfolio construction:** Barbell approach (safe core + aggressive satellites)
|
|
515
|
+
|
|
516
|
+
### Dynamic Diversification
|
|
517
|
+
|
|
518
|
+
**Concept:** Adjust diversification based on market conditions
|
|
519
|
+
|
|
520
|
+
**High Volatility Regimes:**
|
|
521
|
+
- Increase diversification (more positions, lower concentration)
|
|
522
|
+
- Add defensive positions
|
|
523
|
+
- Reduce correlation among holdings
|
|
524
|
+
|
|
525
|
+
**Low Volatility Regimes:**
|
|
526
|
+
- Can handle slightly higher concentration
|
|
527
|
+
- Focus on highest conviction ideas
|
|
528
|
+
- Accept higher correlation
|
|
529
|
+
|
|
530
|
+
**Implementation Challenge:** Requires market regime detection and discipline
|
|
531
|
+
|
|
532
|
+
## Summary
|
|
533
|
+
|
|
534
|
+
**Key Principles:**
|
|
535
|
+
|
|
536
|
+
1. **Diversification reduces unsystematic risk** without eliminating systematic risk
|
|
537
|
+
2. **Optimal range:** 15-30 individual stocks OR 5-10 diversified funds
|
|
538
|
+
3. **Multi-dimensional approach:** Number, weight, sector, geography, correlation
|
|
539
|
+
4. **Avoid false diversification:** Many holdings with high correlation
|
|
540
|
+
5. **Avoid over-diversification:** Too many positions dilute returns
|
|
541
|
+
6. **Regular rebalancing** prevents concentration drift
|
|
542
|
+
7. **Match to risk tolerance:** More diversification for lower risk tolerance
|
|
543
|
+
|
|
544
|
+
**Practical Guidelines:**
|
|
545
|
+
|
|
546
|
+
- No single stock >10-15%
|
|
547
|
+
- No single sector >30-35%
|
|
548
|
+
- Top 5 holdings <40% of portfolio
|
|
549
|
+
- 6+ sectors represented
|
|
550
|
+
- International exposure 15-30%
|
|
551
|
+
- Asset allocation matches time horizon and risk tolerance
|
|
552
|
+
|
|
553
|
+
**Remember:** Diversification is about risk management, not return maximization. A well-diversified portfolio sacrifices some upside potential to protect against catastrophic losses. The goal is to "stay in the game" through all market conditions.
|