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,715 @@
|
|
|
1
|
+
# Rebalancing Strategies
|
|
2
|
+
|
|
3
|
+
This document provides comprehensive guidance on portfolio rebalancing methodologies, timing strategies, tax optimization, and implementation best practices.
|
|
4
|
+
|
|
5
|
+
## What is Rebalancing?
|
|
6
|
+
|
|
7
|
+
**Definition:** Rebalancing is the process of realigning portfolio weights back to target allocation by buying and selling assets.
|
|
8
|
+
|
|
9
|
+
**Purpose:**
|
|
10
|
+
1. **Maintain target risk level** - Prevent portfolio from becoming too aggressive or conservative
|
|
11
|
+
2. **Enforce discipline** - "Buy low, sell high" systematically
|
|
12
|
+
3. **Control concentration** - Prevent winners from creating excessive risk
|
|
13
|
+
4. **Optimize diversification** - Maintain intended asset allocation benefits
|
|
14
|
+
|
|
15
|
+
**Example of Portfolio Drift:**
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Initial Allocation (Jan 2023):
|
|
19
|
+
Stocks: 60% ($60,000)
|
|
20
|
+
Bonds: 40% ($40,000)
|
|
21
|
+
Total: $100,000
|
|
22
|
+
|
|
23
|
+
After 1 Year (No Rebalancing):
|
|
24
|
+
Stocks: +20% → $72,000 (now 69% of portfolio)
|
|
25
|
+
Bonds: +2% → $40,800 (now 31% of portfolio)
|
|
26
|
+
Total: $112,800
|
|
27
|
+
|
|
28
|
+
Result: Portfolio is now riskier than intended (69/31 vs 60/40 target)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Rebalancing Methodologies
|
|
32
|
+
|
|
33
|
+
### 1. Calendar-Based Rebalancing
|
|
34
|
+
|
|
35
|
+
**Method:** Rebalance on a fixed schedule regardless of market conditions.
|
|
36
|
+
|
|
37
|
+
**Common Frequencies:**
|
|
38
|
+
- **Monthly:** Very frequent, high transaction costs, rarely needed
|
|
39
|
+
- **Quarterly:** Popular for active investors, balances responsiveness with costs
|
|
40
|
+
- **Semi-Annually:** Good middle ground, aligns with tax planning
|
|
41
|
+
- **Annually:** Simplest, lowest cost, sufficient for buy-and-hold investors
|
|
42
|
+
|
|
43
|
+
**Pros:**
|
|
44
|
+
- Simple and predictable
|
|
45
|
+
- Prevents procrastination
|
|
46
|
+
- Emotionally easier (mechanical process)
|
|
47
|
+
- Can align with tax planning (year-end)
|
|
48
|
+
|
|
49
|
+
**Cons:**
|
|
50
|
+
- May rebalance when not needed (small drifts)
|
|
51
|
+
- May not rebalance when urgently needed (between scheduled dates)
|
|
52
|
+
- Higher transaction costs if frequent
|
|
53
|
+
- Potential tax inefficiency
|
|
54
|
+
|
|
55
|
+
**Best For:**
|
|
56
|
+
- Passive investors
|
|
57
|
+
- Tax-advantaged accounts (no tax impact)
|
|
58
|
+
- Investors who want simplicity
|
|
59
|
+
|
|
60
|
+
**Implementation:**
|
|
61
|
+
```
|
|
62
|
+
Set calendar reminder: Q1 (January), Q2 (April), Q3 (July), Q4 (October)
|
|
63
|
+
|
|
64
|
+
At each date:
|
|
65
|
+
1. Calculate current allocation percentages
|
|
66
|
+
2. Compare to target allocation
|
|
67
|
+
3. If drift > 5%, rebalance
|
|
68
|
+
4. If drift < 5%, skip rebalancing
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 2. Threshold-Based Rebalancing
|
|
72
|
+
|
|
73
|
+
**Method:** Rebalance only when allocation drifts beyond specified threshold.
|
|
74
|
+
|
|
75
|
+
**Common Thresholds:**
|
|
76
|
+
- **Absolute threshold:** Asset class deviates >5 percentage points from target
|
|
77
|
+
- Example: Target 60% stocks, rebalance if <55% or >65%
|
|
78
|
+
- **Relative threshold:** Asset class deviates >10-20% from target weight
|
|
79
|
+
- Example: Target 60% stocks, rebalance if <54% (60% × 0.9) or >66% (60% × 1.1)
|
|
80
|
+
|
|
81
|
+
**Pros:**
|
|
82
|
+
- Responsive to market volatility
|
|
83
|
+
- Rebalances only when necessary
|
|
84
|
+
- Lower transaction costs than calendar-based
|
|
85
|
+
- Tax-efficient (fewer trades)
|
|
86
|
+
|
|
87
|
+
**Cons:**
|
|
88
|
+
- Requires monitoring
|
|
89
|
+
- Can be psychologically harder (rebalancing during extremes)
|
|
90
|
+
- May not rebalance in low-volatility periods (not necessarily bad)
|
|
91
|
+
|
|
92
|
+
**Best For:**
|
|
93
|
+
- Active investors who monitor regularly
|
|
94
|
+
- Taxable accounts (minimize turnover)
|
|
95
|
+
- Volatile portfolios
|
|
96
|
+
|
|
97
|
+
**Implementation:**
|
|
98
|
+
```
|
|
99
|
+
Check allocation monthly or quarterly
|
|
100
|
+
|
|
101
|
+
Rebalance triggers:
|
|
102
|
+
- Stocks: Target 60% ± 5% (rebalance if <55% or >65%)
|
|
103
|
+
- Bonds: Target 40% ± 5% (rebalance if <35% or >45%)
|
|
104
|
+
|
|
105
|
+
Single position triggers:
|
|
106
|
+
- Any position >15% → Immediate rebalance
|
|
107
|
+
- Any sector >35% → Immediate rebalance
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 3. Hybrid Approach (Recommended)
|
|
111
|
+
|
|
112
|
+
**Method:** Combine calendar and threshold - check on schedule, rebalance only if threshold exceeded.
|
|
113
|
+
|
|
114
|
+
**Implementation:**
|
|
115
|
+
```
|
|
116
|
+
Check allocation: Quarterly (Jan, Apr, Jul, Oct)
|
|
117
|
+
Rebalance only if: Drift > 5% from target
|
|
118
|
+
|
|
119
|
+
Example:
|
|
120
|
+
Q1 Review: Stocks 62% (target 60%) → Drift 2% → No action
|
|
121
|
+
Q2 Review: Stocks 67% (target 60%) → Drift 7% → Rebalance
|
|
122
|
+
Q3 Review: Stocks 59% (target 60%) → Drift 1% → No action
|
|
123
|
+
Q4 Review: Stocks 71% (target 60%) → Drift 11% → Rebalance
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Pros:**
|
|
127
|
+
- Best of both worlds
|
|
128
|
+
- Disciplined review schedule
|
|
129
|
+
- Cost-efficient execution
|
|
130
|
+
- Balances responsiveness and simplicity
|
|
131
|
+
|
|
132
|
+
**Cons:**
|
|
133
|
+
- Slightly more complex
|
|
134
|
+
|
|
135
|
+
**Best For:**
|
|
136
|
+
- Most investors
|
|
137
|
+
- Both taxable and tax-advantaged accounts
|
|
138
|
+
|
|
139
|
+
### 4. Cash Flow Rebalancing
|
|
140
|
+
|
|
141
|
+
**Method:** Use new contributions and withdrawals to rebalance rather than selling.
|
|
142
|
+
|
|
143
|
+
**Implementation:**
|
|
144
|
+
```
|
|
145
|
+
Every contribution (monthly, quarterly):
|
|
146
|
+
1. Identify underweight asset classes
|
|
147
|
+
2. Direct new money to underweight areas
|
|
148
|
+
3. Over time, allocation drifts back to target
|
|
149
|
+
|
|
150
|
+
Example:
|
|
151
|
+
Monthly contribution: $1,000
|
|
152
|
+
Current allocation: Stocks 67%, Bonds 33% (Target 60/40)
|
|
153
|
+
Action: Contribute 100% to bonds until allocation normalizes
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Pros:**
|
|
157
|
+
- Tax-efficient (no selling, no capital gains)
|
|
158
|
+
- No transaction costs
|
|
159
|
+
- Psychologically easier (always buying)
|
|
160
|
+
- Dollar-cost averaging benefit
|
|
161
|
+
|
|
162
|
+
**Cons:**
|
|
163
|
+
- Slow rebalancing (may take months/years)
|
|
164
|
+
- Requires regular contributions
|
|
165
|
+
- May not work for large drifts
|
|
166
|
+
- Not applicable for retired investors (withdrawing, not contributing)
|
|
167
|
+
|
|
168
|
+
**Best For:**
|
|
169
|
+
- Accumulation phase (regular contributions)
|
|
170
|
+
- Taxable accounts
|
|
171
|
+
- Small drift corrections
|
|
172
|
+
|
|
173
|
+
### 5. Tactical Rebalancing
|
|
174
|
+
|
|
175
|
+
**Method:** Rebalance strategically based on market conditions and valuations, not just drift.
|
|
176
|
+
|
|
177
|
+
**Factors to Consider:**
|
|
178
|
+
- Market valuations (Shiller CAPE, valuation metrics)
|
|
179
|
+
- Economic cycle position (early, mid, late expansion)
|
|
180
|
+
- Volatility regime (VIX levels)
|
|
181
|
+
- Sentiment indicators (put/call ratio, investor surveys)
|
|
182
|
+
|
|
183
|
+
**Example Tactical Adjustments:**
|
|
184
|
+
```
|
|
185
|
+
Normal target: 60% stocks, 40% bonds
|
|
186
|
+
|
|
187
|
+
When stocks expensive (CAPE >30):
|
|
188
|
+
Adjust to: 50% stocks, 50% bonds (defensive tilt)
|
|
189
|
+
|
|
190
|
+
When stocks cheap (CAPE <15):
|
|
191
|
+
Adjust to: 70% stocks, 30% bonds (aggressive tilt)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Pros:**
|
|
195
|
+
- Can enhance returns vs mechanical rebalancing
|
|
196
|
+
- Incorporates market insight
|
|
197
|
+
- Responds to changing opportunity sets
|
|
198
|
+
|
|
199
|
+
**Cons:**
|
|
200
|
+
- Requires market timing skill (difficult)
|
|
201
|
+
- Risk of being wrong
|
|
202
|
+
- Subjective judgment required
|
|
203
|
+
- Easy to rationalize not rebalancing
|
|
204
|
+
|
|
205
|
+
**Best For:**
|
|
206
|
+
- Sophisticated investors
|
|
207
|
+
- Those with market analysis capability
|
|
208
|
+
- Supplement to systematic rebalancing (not replacement)
|
|
209
|
+
|
|
210
|
+
**Warning:** Tactical rebalancing can become an excuse to avoid rebalancing. Use sparingly and document rationale.
|
|
211
|
+
|
|
212
|
+
## Rebalancing Across Portfolio Dimensions
|
|
213
|
+
|
|
214
|
+
### Asset Class Rebalancing
|
|
215
|
+
|
|
216
|
+
**Most Important:** Stock/Bond/Cash allocation drives risk
|
|
217
|
+
|
|
218
|
+
**Example:**
|
|
219
|
+
```
|
|
220
|
+
Target: 70% Stocks, 25% Bonds, 5% Cash
|
|
221
|
+
Current: 78% Stocks, 20% Bonds, 2% Cash
|
|
222
|
+
|
|
223
|
+
Rebalancing trades:
|
|
224
|
+
- Sell stocks: $10,000 (reduce from 78% to 70%)
|
|
225
|
+
- Buy bonds: $6,000 (increase from 20% to 25%)
|
|
226
|
+
- Add to cash: $4,000 (increase from 2% to 5%)
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**Priority:** High - Asset allocation most important driver of risk/return
|
|
230
|
+
|
|
231
|
+
### Sector Rebalancing
|
|
232
|
+
|
|
233
|
+
**Purpose:** Prevent sector concentration, maintain diversification
|
|
234
|
+
|
|
235
|
+
**Example:**
|
|
236
|
+
```
|
|
237
|
+
Target Allocation:
|
|
238
|
+
- Technology: 25%
|
|
239
|
+
- Healthcare: 15%
|
|
240
|
+
- Financials: 15%
|
|
241
|
+
- Consumer: 15%
|
|
242
|
+
- Industrials: 10%
|
|
243
|
+
- Other: 20%
|
|
244
|
+
|
|
245
|
+
Current Allocation (after tech rally):
|
|
246
|
+
- Technology: 38% (overweight by 13%)
|
|
247
|
+
- Healthcare: 12% (underweight by 3%)
|
|
248
|
+
- Financials: 13% (underweight by 2%)
|
|
249
|
+
- Others: unchanged
|
|
250
|
+
|
|
251
|
+
Rebalancing:
|
|
252
|
+
- Trim Technology from 38% to 25-28% (sell ~10-13%)
|
|
253
|
+
- Add to Healthcare and Financials
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Priority:** Medium-High - Sector concentration creates risk
|
|
257
|
+
|
|
258
|
+
### Position-Level Rebalancing
|
|
259
|
+
|
|
260
|
+
**Purpose:** Trim individual winners, add to losers (if thesis intact)
|
|
261
|
+
|
|
262
|
+
**Example:**
|
|
263
|
+
```
|
|
264
|
+
Target: No position >10%, typical position 5-7%
|
|
265
|
+
|
|
266
|
+
Current Positions:
|
|
267
|
+
- NVDA: 18% (winner, appreciated)
|
|
268
|
+
- AAPL: 12% (winner)
|
|
269
|
+
- MSFT: 8% (on target)
|
|
270
|
+
- Others: <5% each
|
|
271
|
+
|
|
272
|
+
Rebalancing:
|
|
273
|
+
- NVDA: Trim from 18% to 10% (sell 8%)
|
|
274
|
+
- AAPL: Trim from 12% to 10% (sell 2%)
|
|
275
|
+
- Redeploy 10% to underweight positions
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Priority:** High if single position >15%, otherwise Medium
|
|
279
|
+
|
|
280
|
+
### Geographic Rebalancing
|
|
281
|
+
|
|
282
|
+
**Example:**
|
|
283
|
+
```
|
|
284
|
+
Target: 70% US, 20% International Developed, 10% Emerging Markets
|
|
285
|
+
Current: 75% US, 18% Int'l Dev, 7% EM (US outperformed)
|
|
286
|
+
|
|
287
|
+
Rebalancing:
|
|
288
|
+
- Sell US equities: 5%
|
|
289
|
+
- Buy Int'l Developed: 2%
|
|
290
|
+
- Buy Emerging Markets: 3%
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Priority:** Low to Medium - Less critical than asset class, but maintains diversification
|
|
294
|
+
|
|
295
|
+
## Rebalancing Implementation Strategies
|
|
296
|
+
|
|
297
|
+
### Strategy 1: Full Rebalancing (Precise)
|
|
298
|
+
|
|
299
|
+
**Method:** Simultaneously buy and sell to restore exact target weights.
|
|
300
|
+
|
|
301
|
+
**Example:**
|
|
302
|
+
```
|
|
303
|
+
Portfolio: $200,000
|
|
304
|
+
Target: 60% Stocks ($120k), 40% Bonds ($80k)
|
|
305
|
+
Current: 68% Stocks ($136k), 32% Bonds ($64k)
|
|
306
|
+
|
|
307
|
+
Trades:
|
|
308
|
+
- Sell stocks: $16,000 (reduce to $120k)
|
|
309
|
+
- Buy bonds: $16,000 (increase to $80k)
|
|
310
|
+
|
|
311
|
+
Result: Exactly 60/40
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**Pros:**
|
|
315
|
+
- Precise restoration of targets
|
|
316
|
+
- Immediate rebalancing
|
|
317
|
+
|
|
318
|
+
**Cons:**
|
|
319
|
+
- Transaction costs on both sides
|
|
320
|
+
- Tax implications (capital gains on sales)
|
|
321
|
+
- Market impact if large trades
|
|
322
|
+
|
|
323
|
+
**Best For:** Tax-advantaged accounts, large drift corrections
|
|
324
|
+
|
|
325
|
+
### Strategy 2: Partial Rebalancing
|
|
326
|
+
|
|
327
|
+
**Method:** Rebalance halfway back to target (or other partial percentage).
|
|
328
|
+
|
|
329
|
+
**Example:**
|
|
330
|
+
```
|
|
331
|
+
Portfolio: $200,000
|
|
332
|
+
Target: 60% Stocks, 40% Bonds
|
|
333
|
+
Current: 68% Stocks, 32% Bonds
|
|
334
|
+
Drift: Stocks +8%, Bonds -8%
|
|
335
|
+
|
|
336
|
+
50% Rebalancing:
|
|
337
|
+
- Reduce stock overweight by 50%: 68% → 64% (sell $8k stocks)
|
|
338
|
+
- Increase bond underweight by 50%: 32% → 36% (buy $8k bonds)
|
|
339
|
+
|
|
340
|
+
Result: 64/36 (halfway between current and target)
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**Pros:**
|
|
344
|
+
- Lower transaction costs
|
|
345
|
+
- Less tax impact
|
|
346
|
+
- Preserves some momentum
|
|
347
|
+
- Still reduces risk
|
|
348
|
+
|
|
349
|
+
**Cons:**
|
|
350
|
+
- Doesn't fully restore targets
|
|
351
|
+
- May need another rebalance soon
|
|
352
|
+
|
|
353
|
+
**Best For:** Moderate drifts (5-10%), trending markets, taxable accounts
|
|
354
|
+
|
|
355
|
+
### Strategy 3: Threshold Rebalancing
|
|
356
|
+
|
|
357
|
+
**Method:** Only rebalance asset classes that exceed threshold.
|
|
358
|
+
|
|
359
|
+
**Example:**
|
|
360
|
+
```
|
|
361
|
+
Thresholds: Rebalance only if drift >5%
|
|
362
|
+
|
|
363
|
+
Current vs Target:
|
|
364
|
+
- Stocks: 68% vs 60% (drift +8%) → Rebalance
|
|
365
|
+
- Bonds: 32% vs 40% (drift -8%) → Rebalance
|
|
366
|
+
- Cash: 0% vs 0% (no drift) → No action
|
|
367
|
+
|
|
368
|
+
Only stocks and bonds trade, cash unchanged
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**Pros:**
|
|
372
|
+
- Avoids unnecessary trades
|
|
373
|
+
- Cost-efficient
|
|
374
|
+
|
|
375
|
+
**Cons:**
|
|
376
|
+
- Portfolio not perfectly balanced
|
|
377
|
+
|
|
378
|
+
**Best For:** Most situations
|
|
379
|
+
|
|
380
|
+
### Strategy 4: Opportunistic Rebalancing
|
|
381
|
+
|
|
382
|
+
**Method:** Rebalance strategically using market volatility.
|
|
383
|
+
|
|
384
|
+
**Implementation:**
|
|
385
|
+
```
|
|
386
|
+
Stocks overweight at 68%:
|
|
387
|
+
- Set limit order to sell stocks on strength (e.g., at +2% day)
|
|
388
|
+
- Wait for rally to execute
|
|
389
|
+
|
|
390
|
+
Bonds underweight at 32%:
|
|
391
|
+
- Set limit order to buy bonds on weakness (e.g., at -1% day)
|
|
392
|
+
- Wait for dip to execute
|
|
393
|
+
|
|
394
|
+
Result: Better execution prices vs market orders
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Pros:**
|
|
398
|
+
- Improved execution prices
|
|
399
|
+
- "Sell high, buy low" even within rebalancing
|
|
400
|
+
|
|
401
|
+
**Cons:**
|
|
402
|
+
- Delayed execution (orders may not fill)
|
|
403
|
+
- Requires active monitoring
|
|
404
|
+
- Rebalancing may not complete
|
|
405
|
+
|
|
406
|
+
**Best For:** Patient investors, non-urgent rebalancing
|
|
407
|
+
|
|
408
|
+
### Strategy 5: Gradual Rebalancing
|
|
409
|
+
|
|
410
|
+
**Method:** Rebalance over time in multiple tranches.
|
|
411
|
+
|
|
412
|
+
**Implementation:**
|
|
413
|
+
```
|
|
414
|
+
Need to trim stocks by 8%:
|
|
415
|
+
|
|
416
|
+
Week 1: Sell 2% (1/4 of target)
|
|
417
|
+
Week 2: Sell 2%
|
|
418
|
+
Week 3: Sell 2%
|
|
419
|
+
Week 4: Sell 2%
|
|
420
|
+
|
|
421
|
+
Total: 8% trimmed over one month
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
**Pros:**
|
|
425
|
+
- Reduces market impact
|
|
426
|
+
- Dollar-cost averaging effect
|
|
427
|
+
- Less stressful (not one big decision)
|
|
428
|
+
|
|
429
|
+
**Cons:**
|
|
430
|
+
- Delayed full rebalancing
|
|
431
|
+
- Multiple transaction fees
|
|
432
|
+
- Complex to track
|
|
433
|
+
|
|
434
|
+
**Best For:** Large positions, concentrated portfolios, volatile markets
|
|
435
|
+
|
|
436
|
+
## Tax-Efficient Rebalancing
|
|
437
|
+
|
|
438
|
+
### Tax-Loss Harvesting During Rebalancing
|
|
439
|
+
|
|
440
|
+
**Strategy:** Combine rebalancing with tax-loss harvesting to offset gains.
|
|
441
|
+
|
|
442
|
+
**Example:**
|
|
443
|
+
```
|
|
444
|
+
Rebalancing Plan:
|
|
445
|
+
- Sell Stock A (winner): +$10,000 gain
|
|
446
|
+
- Sell Stock B (loser): -$5,000 loss
|
|
447
|
+
|
|
448
|
+
Tax Impact:
|
|
449
|
+
- Net capital gain: $10,000 - $5,000 = $5,000
|
|
450
|
+
- Tax (20% long-term): $5,000 × 0.20 = $1,000
|
|
451
|
+
- Effective tax rate on Stock A: $1,000 / $10,000 = 10% (vs 20% without harvesting)
|
|
452
|
+
|
|
453
|
+
Additional benefit: Harvested loss reduces taxes
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
**Best Practices:**
|
|
457
|
+
- Prioritize selling losses to offset rebalancing gains
|
|
458
|
+
- Harvest losses in December, rebalance in January (timing)
|
|
459
|
+
- Avoid wash sale rule (wait 30 days before repurchasing)
|
|
460
|
+
|
|
461
|
+
### Tax Lot Management
|
|
462
|
+
|
|
463
|
+
**Strategy:** Select which shares to sell to minimize taxes.
|
|
464
|
+
|
|
465
|
+
**Methods:**
|
|
466
|
+
1. **Specific Identification:** Choose highest-cost shares (minimize gain)
|
|
467
|
+
2. **FIFO (First In, First Out):** Sell oldest shares (often long-term)
|
|
468
|
+
3. **LIFO (Last In, First Out):** Sell newest shares (minimize gain)
|
|
469
|
+
4. **Highest Cost:** Sell shares with highest cost basis (minimize gain)
|
|
470
|
+
|
|
471
|
+
**Example:**
|
|
472
|
+
```
|
|
473
|
+
Need to sell 100 shares of AAPL (currently $180):
|
|
474
|
+
|
|
475
|
+
Purchase lots:
|
|
476
|
+
- Lot A: 50 shares @ $150 (2 years ago) → $1,500 gain → $300 tax
|
|
477
|
+
- Lot B: 50 shares @ $170 (6 months ago) → $500 gain → $185 tax (short-term)
|
|
478
|
+
- Lot C: 50 shares @ $175 (1 month ago) → $250 gain → $93 tax (short-term)
|
|
479
|
+
|
|
480
|
+
Best approach: Sell Lot C (minimize tax) or Lot A (long-term rates)
|
|
481
|
+
|
|
482
|
+
Tax savings: $300 - $93 = $207 vs worst choice
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### Account Location Strategy
|
|
486
|
+
|
|
487
|
+
**Strategy:** Rebalance in tax-advantaged accounts when possible.
|
|
488
|
+
|
|
489
|
+
**Tax Treatment by Account Type:**
|
|
490
|
+
- **401(k), IRA, Roth IRA:** No tax on trades (best for rebalancing)
|
|
491
|
+
- **Taxable brokerage:** Capital gains tax on sales
|
|
492
|
+
|
|
493
|
+
**Optimization:**
|
|
494
|
+
```
|
|
495
|
+
Rebalancing needed: Sell $20,000 stocks, buy $20,000 bonds
|
|
496
|
+
|
|
497
|
+
Option 1 (Non-optimal):
|
|
498
|
+
- Sell stocks in taxable account → Trigger $4,000 capital gain → $800 tax
|
|
499
|
+
|
|
500
|
+
Option 2 (Optimal):
|
|
501
|
+
- Sell stocks in IRA → No tax
|
|
502
|
+
- Result: Same allocation, $800 saved
|
|
503
|
+
|
|
504
|
+
If stocks not held in IRA:
|
|
505
|
+
- Sell bonds in IRA, buy stocks in IRA
|
|
506
|
+
- Sell stocks in taxable, buy bonds in taxable
|
|
507
|
+
- Net effect: Rebalanced, but different holdings per account
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
### Tax-Deferred Rebalancing
|
|
511
|
+
|
|
512
|
+
**Strategy:** Delay rebalancing to next tax year or until qualifying for long-term rates.
|
|
513
|
+
|
|
514
|
+
**Example:**
|
|
515
|
+
```
|
|
516
|
+
Need to rebalance in November:
|
|
517
|
+
Current: Stock position 6 months old (short-term gains)
|
|
518
|
+
Options:
|
|
519
|
+
1. Rebalance now → Short-term capital gains (37% max tax)
|
|
520
|
+
2. Wait until January (long-term status) → Long-term gains (20% max tax)
|
|
521
|
+
|
|
522
|
+
Tax savings: 17 percentage points (depends on income)
|
|
523
|
+
|
|
524
|
+
Decision factors:
|
|
525
|
+
- How urgent is rebalancing? (Risk tolerance)
|
|
526
|
+
- How much gain? (Tax dollars at stake)
|
|
527
|
+
- Market outlook? (Risk of waiting)
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
## Rebalancing in Different Market Environments
|
|
531
|
+
|
|
532
|
+
### Bull Market Rebalancing
|
|
533
|
+
|
|
534
|
+
**Characteristics:**
|
|
535
|
+
- Stocks consistently outperforming
|
|
536
|
+
- Portfolio drifting more aggressive
|
|
537
|
+
- Rebalancing means selling winners
|
|
538
|
+
|
|
539
|
+
**Strategy:**
|
|
540
|
+
- Trim equities back to target regularly
|
|
541
|
+
- Don't let greed prevent rebalancing
|
|
542
|
+
- "No one went broke taking profits"
|
|
543
|
+
- Use proceeds to buy underperforming assets
|
|
544
|
+
|
|
545
|
+
**Emotional Challenge:** Feels like leaving money on the table
|
|
546
|
+
|
|
547
|
+
**Discipline Required:** Sell winners even when they're going up
|
|
548
|
+
|
|
549
|
+
### Bear Market Rebalancing
|
|
550
|
+
|
|
551
|
+
**Characteristics:**
|
|
552
|
+
- Stocks underperforming, declining
|
|
553
|
+
- Portfolio drifting more conservative
|
|
554
|
+
- Rebalancing means buying stocks
|
|
555
|
+
|
|
556
|
+
**Strategy:**
|
|
557
|
+
- Buy equities to restore target (contrarian)
|
|
558
|
+
- "Buy when there's blood in the streets"
|
|
559
|
+
- Gradual buying (dollar-cost average into weakness)
|
|
560
|
+
- Maintain emotional discipline
|
|
561
|
+
|
|
562
|
+
**Emotional Challenge:** Buying feels risky when markets falling
|
|
563
|
+
|
|
564
|
+
**Discipline Required:** Buy when fearful, stick to plan
|
|
565
|
+
|
|
566
|
+
**Example:**
|
|
567
|
+
```
|
|
568
|
+
2020 COVID Crash:
|
|
569
|
+
March: Stocks down 30%
|
|
570
|
+
Portfolio drift: 60/40 → 48/52 (stocks fell, bonds rose)
|
|
571
|
+
Rebalancing: Buy stocks (sell bonds)
|
|
572
|
+
Result: Bought at bottom, participated in recovery
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
### High Volatility Rebalancing
|
|
576
|
+
|
|
577
|
+
**Characteristics:**
|
|
578
|
+
- Wild market swings
|
|
579
|
+
- Frequent drift beyond thresholds
|
|
580
|
+
- Risk of over-trading
|
|
581
|
+
|
|
582
|
+
**Strategy:**
|
|
583
|
+
- Widen rebalancing thresholds (e.g., 5% → 7%)
|
|
584
|
+
- Use partial rebalancing (50% toward target)
|
|
585
|
+
- Gradual rebalancing over time
|
|
586
|
+
- Avoid panic-driven trades
|
|
587
|
+
|
|
588
|
+
**Best Practice:** Don't rebalance daily, stick to schedule
|
|
589
|
+
|
|
590
|
+
### Low Volatility Rebalancing
|
|
591
|
+
|
|
592
|
+
**Characteristics:**
|
|
593
|
+
- Markets calm, low drift
|
|
594
|
+
- Infrequent rebalancing needs
|
|
595
|
+
|
|
596
|
+
**Strategy:**
|
|
597
|
+
- May go 12+ months without rebalancing
|
|
598
|
+
- Focus on position-level adjustments
|
|
599
|
+
- Opportunistic trimming of winners
|
|
600
|
+
- Portfolio construction improvements
|
|
601
|
+
|
|
602
|
+
## Rebalancing Costs and Break-Even Analysis
|
|
603
|
+
|
|
604
|
+
### Transaction Costs
|
|
605
|
+
|
|
606
|
+
**Cost Components:**
|
|
607
|
+
1. **Commissions:** $0 at most brokers (2024)
|
|
608
|
+
2. **Bid-ask spreads:** 0.01-0.10% for liquid stocks, higher for bonds/ETFs
|
|
609
|
+
3. **Market impact:** Minimal for small trades, higher for large positions
|
|
610
|
+
4. **Taxes:** Largest cost (15-20% long-term, up to 37% short-term)
|
|
611
|
+
|
|
612
|
+
**Total Cost Estimate:**
|
|
613
|
+
```
|
|
614
|
+
Rebalancing $50,000 position:
|
|
615
|
+
- Bid-ask spread: $50,000 × 0.05% = $25
|
|
616
|
+
- Capital gain: $20,000 (assumes doubled)
|
|
617
|
+
- Tax (20% long-term): $20,000 × 0.20 = $4,000
|
|
618
|
+
|
|
619
|
+
Total cost: $4,025 (8% of trade value)
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
### Break-Even Analysis
|
|
623
|
+
|
|
624
|
+
**Question:** Does rebalancing benefit outweigh costs?
|
|
625
|
+
|
|
626
|
+
**Benefits of Rebalancing:**
|
|
627
|
+
- Risk reduction (volatility drag reduction)
|
|
628
|
+
- "Buy low, sell high" systematic discipline
|
|
629
|
+
- Maintain target risk level
|
|
630
|
+
|
|
631
|
+
**Academic Research:**
|
|
632
|
+
- Rebalancing adds 0.3-0.5% annual return (after costs) for 60/40 portfolio
|
|
633
|
+
- Benefit higher in volatile markets
|
|
634
|
+
- Benefit lower in trending markets
|
|
635
|
+
|
|
636
|
+
**Rule of Thumb:**
|
|
637
|
+
```
|
|
638
|
+
Rebalance if:
|
|
639
|
+
(Expected Risk Reduction Benefit × Time Horizon) > (Transaction Costs + Tax Costs)
|
|
640
|
+
|
|
641
|
+
Example:
|
|
642
|
+
Expected benefit: 0.4% per year
|
|
643
|
+
Time horizon: 10 years
|
|
644
|
+
Total benefit: ~4%
|
|
645
|
+
|
|
646
|
+
Costs: 8% (from example above)
|
|
647
|
+
|
|
648
|
+
Conclusion: Don't rebalance if costs >4% (wait for long-term rates, use tax-advantaged account, or accept drift)
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
## Rebalancing Checklist
|
|
652
|
+
|
|
653
|
+
### Quarterly Review Checklist
|
|
654
|
+
|
|
655
|
+
- [ ] **Calculate Current Allocation**
|
|
656
|
+
- Asset class percentages (stocks, bonds, cash, alternatives)
|
|
657
|
+
- Sector percentages (within equities)
|
|
658
|
+
- Position sizes (% of portfolio)
|
|
659
|
+
- Geographic allocation
|
|
660
|
+
|
|
661
|
+
- [ ] **Compare to Targets**
|
|
662
|
+
- Asset class drift from target (% points)
|
|
663
|
+
- Sector drift from target
|
|
664
|
+
- Position size vs maximum thresholds
|
|
665
|
+
- Identify overweight and underweight areas
|
|
666
|
+
|
|
667
|
+
- [ ] **Assess Rebalancing Need**
|
|
668
|
+
- Any drift >5%? (Rebalancing recommended)
|
|
669
|
+
- Any position >15%? (Immediate trim)
|
|
670
|
+
- Any sector >35%? (Immediate trim)
|
|
671
|
+
- Overall risk level vs target
|
|
672
|
+
|
|
673
|
+
- [ ] **Plan Rebalancing Trades**
|
|
674
|
+
- List positions to sell (overweight)
|
|
675
|
+
- List positions to buy (underweight)
|
|
676
|
+
- Calculate trade sizes ($)
|
|
677
|
+
- Select which account to trade in (tax optimization)
|
|
678
|
+
|
|
679
|
+
- [ ] **Tax Optimization**
|
|
680
|
+
- Identify tax-loss harvest opportunities
|
|
681
|
+
- Select tax lots (highest cost basis)
|
|
682
|
+
- Consider timing (short-term vs long-term)
|
|
683
|
+
- Estimate tax impact
|
|
684
|
+
|
|
685
|
+
- [ ] **Execute Rebalancing**
|
|
686
|
+
- Place sell orders (overweight positions)
|
|
687
|
+
- Wait for settlement (T+2)
|
|
688
|
+
- Place buy orders (underweight positions)
|
|
689
|
+
- Verify allocation after trades
|
|
690
|
+
|
|
691
|
+
- [ ] **Document Decision**
|
|
692
|
+
- Record pre-rebalancing allocation
|
|
693
|
+
- Record trades executed
|
|
694
|
+
- Record post-rebalancing allocation
|
|
695
|
+
- Note any deviations from plan
|
|
696
|
+
- Set next review date
|
|
697
|
+
|
|
698
|
+
## Summary
|
|
699
|
+
|
|
700
|
+
**Key Principles:**
|
|
701
|
+
|
|
702
|
+
1. **Systematic discipline** - Rebalance on schedule or threshold, not emotions
|
|
703
|
+
2. **Tax efficiency** - Use tax-advantaged accounts, harvest losses, manage lots
|
|
704
|
+
3. **Cost awareness** - Balance rebalancing benefits vs transaction costs
|
|
705
|
+
4. **Appropriate frequency** - Quarterly or semi-annually for most investors
|
|
706
|
+
5. **Maintain perspective** - Rebalancing is risk management, not return maximization
|
|
707
|
+
|
|
708
|
+
**Recommended Approach for Most Investors:**
|
|
709
|
+
|
|
710
|
+
- **Frequency:** Quarterly review, rebalance if drift >5%
|
|
711
|
+
- **Method:** Hybrid (calendar + threshold)
|
|
712
|
+
- **Implementation:** Full rebalancing in tax-advantaged accounts, partial in taxable
|
|
713
|
+
- **Tax optimization:** Harvest losses, select tax lots, time for long-term rates
|
|
714
|
+
|
|
715
|
+
**Remember:** Rebalancing is a risk management tool, not a performance enhancement technique. The primary goal is to maintain your target risk level and prevent portfolio drift. The discipline of rebalancing enforces "buy low, sell high" behavior that is emotionally difficult but mathematically sound.
|