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,477 @@
|
|
|
1
|
+
# Position Evaluation Framework
|
|
2
|
+
|
|
3
|
+
This document provides a systematic framework for evaluating individual positions within a portfolio to determine appropriate actions: HOLD, ADD, TRIM, or SELL.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Position evaluation requires both quantitative analysis and qualitative judgment. This framework helps answer:
|
|
8
|
+
|
|
9
|
+
1. Is the original investment thesis still intact?
|
|
10
|
+
2. Is the position appropriately sized given current conviction and risk?
|
|
11
|
+
3. Has the valuation become stretched or attractive?
|
|
12
|
+
4. What is the expected forward return vs risk?
|
|
13
|
+
5. Are there better opportunities elsewhere?
|
|
14
|
+
|
|
15
|
+
## Four-Factor Evaluation Model
|
|
16
|
+
|
|
17
|
+
Every position should be evaluated across four dimensions:
|
|
18
|
+
|
|
19
|
+
### 1. Thesis Validation (40% weight)
|
|
20
|
+
- Is the investment thesis playing out as expected?
|
|
21
|
+
- Have fundamentals improved, remained stable, or deteriorated?
|
|
22
|
+
- Are growth prospects intact or changed?
|
|
23
|
+
|
|
24
|
+
### 2. Valuation Assessment (30% weight)
|
|
25
|
+
- Is the stock overvalued, fairly valued, or undervalued?
|
|
26
|
+
- How does current valuation compare to historical range?
|
|
27
|
+
- How does it compare to peer group?
|
|
28
|
+
|
|
29
|
+
### 3. Position Sizing (20% weight)
|
|
30
|
+
- Is current position size appropriate?
|
|
31
|
+
- Does it match conviction level?
|
|
32
|
+
- Is it creating concentration risk?
|
|
33
|
+
|
|
34
|
+
### 4. Relative Opportunity (10% weight)
|
|
35
|
+
- Are there better uses of capital?
|
|
36
|
+
- Would selling this improve portfolio?
|
|
37
|
+
- Cost of holding vs deploying elsewhere
|
|
38
|
+
|
|
39
|
+
## Detailed Evaluation Framework
|
|
40
|
+
|
|
41
|
+
### Thesis Validation Analysis
|
|
42
|
+
|
|
43
|
+
**Original Thesis Documentation:**
|
|
44
|
+
|
|
45
|
+
For each position, document the original investment thesis:
|
|
46
|
+
|
|
47
|
+
**Example Thesis Template:**
|
|
48
|
+
```
|
|
49
|
+
Symbol: AAPL
|
|
50
|
+
Initial Thesis (Date: Jan 2023):
|
|
51
|
+
- Services revenue growing 15%+ annually
|
|
52
|
+
- Installed base expansion (1.8B → 2.0B devices)
|
|
53
|
+
- Margin expansion from services mix shift
|
|
54
|
+
- Capital return program (dividends + buybacks)
|
|
55
|
+
- Valuation: P/E 24x vs historical 18x, justified by services growth
|
|
56
|
+
|
|
57
|
+
Entry Price: $145
|
|
58
|
+
Target Price: $180 (12-month)
|
|
59
|
+
Expected Return: 24% (+2% dividend = 26% total)
|
|
60
|
+
Risk Factors: iPhone demand slowdown, China regulatory risk
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Thesis Validation Checklist:**
|
|
64
|
+
|
|
65
|
+
- [ ] **Revenue/Earnings Growth:** On track vs expectations?
|
|
66
|
+
- Expected: +15% revenue growth
|
|
67
|
+
- Actual: +12% (slightly below, acceptable / -5% (concerning))
|
|
68
|
+
|
|
69
|
+
- [ ] **Margins:** Improving, stable, or declining?
|
|
70
|
+
- Expected: Expanding by 100bps
|
|
71
|
+
- Actual: Expanded 80bps (close enough / Contracted 50bps (negative))
|
|
72
|
+
|
|
73
|
+
- [ ] **Competitive Position:** Strengthening or weakening?
|
|
74
|
+
- Market share trends
|
|
75
|
+
- New product success/failures
|
|
76
|
+
- Competitor actions
|
|
77
|
+
|
|
78
|
+
- [ ] **Management Execution:** Meeting targets?
|
|
79
|
+
- Guidance met/beaten/missed
|
|
80
|
+
- Capital allocation decisions
|
|
81
|
+
- Strategic pivots if any
|
|
82
|
+
|
|
83
|
+
- [ ] **Industry Tailwinds:** Still present?
|
|
84
|
+
- Secular trends intact?
|
|
85
|
+
- Regulatory changes
|
|
86
|
+
- Technology shifts
|
|
87
|
+
|
|
88
|
+
**Thesis Status Classification:**
|
|
89
|
+
|
|
90
|
+
| Status | Criteria | Action Bias |
|
|
91
|
+
|--------|----------|-------------|
|
|
92
|
+
| **Strengthening** | Fundamentals improving, thesis accelerating | Consider ADD |
|
|
93
|
+
| **Intact** | On track with expectations, no changes | HOLD |
|
|
94
|
+
| **Weakening** | Some concerns, thesis partially impaired | Consider TRIM |
|
|
95
|
+
| **Broken** | Thesis invalid, fundamentals deteriorating | SELL |
|
|
96
|
+
|
|
97
|
+
### Valuation Assessment
|
|
98
|
+
|
|
99
|
+
**Valuation Methodology:**
|
|
100
|
+
|
|
101
|
+
Compare current valuation across multiple dimensions:
|
|
102
|
+
|
|
103
|
+
**1. Historical Valuation Range**
|
|
104
|
+
|
|
105
|
+
| Metric | Current | 1Y Avg | 3Y Avg | 5Y Avg | Min | Max |
|
|
106
|
+
|--------|---------|--------|--------|--------|-----|-----|
|
|
107
|
+
| P/E | 28x | 25x | 22x | 20x | 12x | 35x |
|
|
108
|
+
| P/B | 6.5x | 5.8x | 5.2x | 4.8x | 3.5x | 8.0x |
|
|
109
|
+
| EV/EBITDA | 22x | 19x | 17x | 16x | 10x | 25x |
|
|
110
|
+
| Div Yield | 1.2% | 1.4% | 1.6% | 1.8% | 0.8% | 2.5% |
|
|
111
|
+
|
|
112
|
+
**Analysis:**
|
|
113
|
+
- Current P/E (28x) near 3Y max (35x) → Expensive vs history
|
|
114
|
+
- P/B elevated vs 5Y avg → Premium valuation
|
|
115
|
+
- Dividend yield low vs range → Not a value play
|
|
116
|
+
|
|
117
|
+
**2. Peer Group Comparison**
|
|
118
|
+
|
|
119
|
+
| Company | P/E | P/B | EV/EBITDA | Dividend Yield | Rev Growth | Margin |
|
|
120
|
+
|---------|-----|-----|-----------|----------------|------------|--------|
|
|
121
|
+
| **[Target]** | 28x | 6.5x | 22x | 1.2% | 12% | 28% |
|
|
122
|
+
| Peer A | 22x | 4.2x | 18x | 1.8% | 8% | 22% |
|
|
123
|
+
| Peer B | 31x | 7.8x | 25x | 0.9% | 18% | 32% |
|
|
124
|
+
| Peer C | 25x | 5.1x | 20x | 1.5% | 10% | 25% |
|
|
125
|
+
| **Sector Median** | 25x | 5.5x | 20x | 1.4% | 11% | 26% |
|
|
126
|
+
|
|
127
|
+
**Analysis:**
|
|
128
|
+
- P/E slightly above sector median → Modest premium
|
|
129
|
+
- Growth (12%) above median (11%) → Premium partially justified
|
|
130
|
+
- Margins (28%) above median (26%) → Quality justifies some premium
|
|
131
|
+
- **Assessment:** Fair to slightly expensive vs peers
|
|
132
|
+
|
|
133
|
+
**3. Growth-Adjusted Valuation (PEG Ratio)**
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
PEG Ratio = P/E / Earnings Growth Rate
|
|
137
|
+
|
|
138
|
+
Example:
|
|
139
|
+
P/E: 28x
|
|
140
|
+
Expected EPS growth: 15%
|
|
141
|
+
PEG = 28 / 15 = 1.87
|
|
142
|
+
|
|
143
|
+
Interpretation:
|
|
144
|
+
< 1.0 = Undervalued
|
|
145
|
+
1.0-2.0 = Fair value
|
|
146
|
+
> 2.0 = Overvalued
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**4. DCF Fair Value Estimate (Simplified)**
|
|
150
|
+
|
|
151
|
+
If time permits, estimate intrinsic value using discounted cash flow:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
Fair Value = (FCF × (1 + growth rate)^5) / (discount rate - terminal growth)
|
|
155
|
+
|
|
156
|
+
Example inputs:
|
|
157
|
+
Current FCF: $100B
|
|
158
|
+
Growth (5Y): 12%
|
|
159
|
+
Discount rate: 10%
|
|
160
|
+
Terminal growth: 4%
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Valuation Status Classification:**
|
|
164
|
+
|
|
165
|
+
| Status | Criteria | Action Bias |
|
|
166
|
+
|--------|----------|-------------|
|
|
167
|
+
| **Undervalued** | Below historical avg, below peers, low PEG | ADD |
|
|
168
|
+
| **Fair Value** | In-line with history and peers | HOLD |
|
|
169
|
+
| **Overvalued** | Above historical range, premium to peers, high PEG | TRIM |
|
|
170
|
+
| **Severely Overvalued** | Extreme multiples, bubble-like | SELL |
|
|
171
|
+
|
|
172
|
+
### Position Sizing Analysis
|
|
173
|
+
|
|
174
|
+
**Current Position Assessment:**
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
Position Size = Position Value / Total Portfolio Value
|
|
178
|
+
|
|
179
|
+
Example:
|
|
180
|
+
Position value: $18,000
|
|
181
|
+
Portfolio value: $120,000
|
|
182
|
+
Position size: 18,000 / 120,000 = 15%
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Position Sizing Guidelines:**
|
|
186
|
+
|
|
187
|
+
| Conviction Level | Target Position Size | Max Position Size |
|
|
188
|
+
|------------------|---------------------|-------------------|
|
|
189
|
+
| **High Conviction** | 8-12% | 15% |
|
|
190
|
+
| **Medium Conviction** | 5-8% | 10% |
|
|
191
|
+
| **Low Conviction / Speculative** | 2-5% | 7% |
|
|
192
|
+
| **Starter Position** | 2-3% | 5% |
|
|
193
|
+
|
|
194
|
+
**Position Sizing Risk Assessment:**
|
|
195
|
+
|
|
196
|
+
| Current Size | Risk Level | Typical Action |
|
|
197
|
+
|--------------|-----------|----------------|
|
|
198
|
+
| **<5%** | Low | Can add if conviction high |
|
|
199
|
+
| **5-10%** | Normal | Monitor |
|
|
200
|
+
| **10-15%** | Elevated | Trim if conviction not very high |
|
|
201
|
+
| **15-20%** | High | Trim recommended |
|
|
202
|
+
| **>20%** | Excessive | Urgent trim required |
|
|
203
|
+
|
|
204
|
+
**Position Drift Analysis:**
|
|
205
|
+
|
|
206
|
+
Track how position size has changed due to price appreciation:
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
Position Appreciation Impact:
|
|
210
|
+
|
|
211
|
+
Initial investment: $10,000 (10% of $100K portfolio)
|
|
212
|
+
Other holdings flat, this position doubled
|
|
213
|
+
Current value: $20,000 (18% of $110K portfolio)
|
|
214
|
+
|
|
215
|
+
Position drift: 10% → 18% (increased 8 percentage points)
|
|
216
|
+
Exceeded target: Yes (assuming 10% target)
|
|
217
|
+
Action: Trim back to 10-12% range
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Rebalancing Calculation:**
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
To trim from 18% to 10%:
|
|
224
|
+
|
|
225
|
+
Target value: $110,000 × 10% = $11,000
|
|
226
|
+
Current value: $20,000
|
|
227
|
+
Amount to sell: $20,000 - $11,000 = $9,000
|
|
228
|
+
Shares to sell: $9,000 / Current Price
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Relative Opportunity Analysis
|
|
232
|
+
|
|
233
|
+
**Opportunity Cost Framework:**
|
|
234
|
+
|
|
235
|
+
Ask: "If I sold this position today, where would I deploy the capital?"
|
|
236
|
+
|
|
237
|
+
**Comparison Matrix:**
|
|
238
|
+
|
|
239
|
+
| Option | Expected Return | Risk Level | Conviction | Notes |
|
|
240
|
+
|--------|----------------|------------|-----------|-------|
|
|
241
|
+
| **Hold [Current]** | 8% | Medium | Medium | Fairly valued, thesis intact |
|
|
242
|
+
| Alternative A | 15% | High | High | Undervalued, strong thesis |
|
|
243
|
+
| Alternative B | 10% | Low | Medium | Defensive, lower risk |
|
|
244
|
+
| Cash (wait) | 4% | None | N/A | Opportunity cost |
|
|
245
|
+
|
|
246
|
+
**Decision Logic:**
|
|
247
|
+
|
|
248
|
+
If (Alternative Expected Return - Hold Expected Return) > Switching Cost:
|
|
249
|
+
→ Consider selling current, buying alternative
|
|
250
|
+
|
|
251
|
+
**Switching Costs to Consider:**
|
|
252
|
+
- **Taxes:** Capital gains (15-20% long-term, ordinary income short-term)
|
|
253
|
+
- **Transaction costs:** Commissions (minimal) + bid-ask spread
|
|
254
|
+
- **Opportunity risk:** Wrong about alternative, miss rebound in current
|
|
255
|
+
|
|
256
|
+
**Example Calculation:**
|
|
257
|
+
|
|
258
|
+
```
|
|
259
|
+
Current position: Expected 8% return
|
|
260
|
+
Alternative: Expected 15% return
|
|
261
|
+
Differential: 7%
|
|
262
|
+
|
|
263
|
+
Unrealized gain: $8,000 on $20,000 position (67% gain)
|
|
264
|
+
Tax on sale (20% long-term): $8,000 × 0.20 = $1,600
|
|
265
|
+
After-tax proceeds: $20,000 - $1,600 = $18,400
|
|
266
|
+
|
|
267
|
+
After-tax opportunity gain (1 year):
|
|
268
|
+
Hold current: $20,000 × 1.08 = $21,600
|
|
269
|
+
Buy alternative: $18,400 × 1.15 = $21,160
|
|
270
|
+
|
|
271
|
+
Conclusion: Tax drag eliminates benefit for 1-year hold
|
|
272
|
+
Consider if: (1) Multi-year horizon, or (2) Tax-advantaged account, or (3) Can tax-loss harvest elsewhere
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Position Action Decision Matrix
|
|
276
|
+
|
|
277
|
+
Combine the four factors to determine action:
|
|
278
|
+
|
|
279
|
+
### HOLD Decision
|
|
280
|
+
|
|
281
|
+
**Criteria:**
|
|
282
|
+
- ✅ Thesis: Intact or strengthening
|
|
283
|
+
- ✅ Valuation: Fair to undervalued
|
|
284
|
+
- ✅ Position Size: Within target range (5-10% for medium conviction)
|
|
285
|
+
- ✅ Relative Opportunity: No clearly better alternative after costs
|
|
286
|
+
|
|
287
|
+
**Example:**
|
|
288
|
+
```
|
|
289
|
+
Position: Johnson & Johnson (JNJ)
|
|
290
|
+
Thesis: ✅ Intact (healthcare demand, dividend aristocrat)
|
|
291
|
+
Valuation: ✅ Fair (P/E 16x vs 15x historical avg)
|
|
292
|
+
Position Size: ✅ 7% of portfolio (target range)
|
|
293
|
+
Opportunity: ✅ No compelling alternative in healthcare
|
|
294
|
+
|
|
295
|
+
Decision: HOLD
|
|
296
|
+
Rationale: Position performing as expected, appropriately sized, no reason to change
|
|
297
|
+
Next Review: Quarterly earnings (Q3 2024)
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### ADD Decision
|
|
301
|
+
|
|
302
|
+
**Criteria:**
|
|
303
|
+
- ✅ Thesis: Strengthening or intact with high conviction
|
|
304
|
+
- ✅ Valuation: Undervalued or fair with improving fundamentals
|
|
305
|
+
- ✅ Position Size: Below target, room to add without excessive concentration
|
|
306
|
+
- ✅ Opportunity: Among top ideas, better than alternatives
|
|
307
|
+
|
|
308
|
+
**Example:**
|
|
309
|
+
```
|
|
310
|
+
Position: Meta Platforms (META)
|
|
311
|
+
Thesis: ✅ Strengthening (AI monetization exceeding expectations, cost discipline)
|
|
312
|
+
Valuation: ✅ Undervalued (P/E 22x vs 28x historical, PEG 1.2)
|
|
313
|
+
Position Size: ✅ 5% of portfolio (room to add to 8-10%)
|
|
314
|
+
Opportunity: ✅ Top conviction, better expected return than alternatives
|
|
315
|
+
|
|
316
|
+
Decision: ADD 3-5% more (increase position to 8-10% total)
|
|
317
|
+
Rationale: Thesis improving, valuation attractive, high conviction
|
|
318
|
+
Entry Strategy: Add 3% now, 2% more if pullback to $450 support
|
|
319
|
+
Risk Management: Set stop-loss at $420 (recent low)
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### TRIM Decision
|
|
323
|
+
|
|
324
|
+
**Criteria:**
|
|
325
|
+
- ⚠️ Thesis: Weakening OR still intact but lower conviction
|
|
326
|
+
- ⚠️ Valuation: Overvalued or expensive vs historical/peers
|
|
327
|
+
- ⚠️ Position Size: Exceeded target (>12% for medium conviction, >15% for high conviction)
|
|
328
|
+
- ⚠️ Opportunity: Better alternatives available or risk reduction needed
|
|
329
|
+
|
|
330
|
+
**Example:**
|
|
331
|
+
```
|
|
332
|
+
Position: NVIDIA (NVDA)
|
|
333
|
+
Thesis: ✅ Intact (AI demand strong) ⚠️ but slowing growth rates expected
|
|
334
|
+
Valuation: ⚠️ Expensive (P/E 65x vs 45x historical, extended vs peers)
|
|
335
|
+
Position Size: ⚠️ 18% of portfolio (exceeded 15% max)
|
|
336
|
+
Opportunity: ⚠️ Other high-quality tech at better valuations
|
|
337
|
+
|
|
338
|
+
Decision: TRIM from 18% to 10-12%
|
|
339
|
+
Rationale: Valuation extended, position too large, take some profits
|
|
340
|
+
Trim Strategy: Sell 6% now, consider selling another 2% if rallies above $950
|
|
341
|
+
Redeployment: Add to underweight healthcare and financials sectors
|
|
342
|
+
Tax Strategy: Sell highest-cost-basis shares first (minimize tax impact)
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### SELL Decision
|
|
346
|
+
|
|
347
|
+
**Criteria:**
|
|
348
|
+
- ❌ Thesis: Broken or significantly impaired
|
|
349
|
+
- OR: Valuation severely overvalued with deteriorating fundamentals
|
|
350
|
+
- OR: Better opportunities + need to reduce position count
|
|
351
|
+
- OR: Risk management (stop-loss triggered, risk too high)
|
|
352
|
+
|
|
353
|
+
**Example:**
|
|
354
|
+
```
|
|
355
|
+
Position: Teladoc (TDOC)
|
|
356
|
+
Thesis: ❌ Broken (telehealth adoption slower than expected, competition intense, path to profitability unclear)
|
|
357
|
+
Valuation: ❌ Expensive vs peers despite losses (EV/Sales 2.5x vs 1.2x sector)
|
|
358
|
+
Position Size: ⚠️ 4% of portfolio (not excessive, but capital can be better deployed)
|
|
359
|
+
Opportunity: ❌ Multiple better healthcare alternatives (UNH, ELW, CVS)
|
|
360
|
+
|
|
361
|
+
Decision: SELL (exit position entirely)
|
|
362
|
+
Rationale: Investment thesis has not materialized, competitive position weakening, capital better deployed elsewhere
|
|
363
|
+
Exit Strategy: Sell entire position over 2-3 days (avoid moving market)
|
|
364
|
+
Redeployment: Reallocate to UnitedHealth Group (stronger healthcare thesis)
|
|
365
|
+
Tax Benefit: Harvest $2,000 capital loss to offset gains
|
|
366
|
+
Lesson Learned: Avoid unprofitable growth stocks in competitive industries
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Position Review Checklist
|
|
370
|
+
|
|
371
|
+
Use this checklist when reviewing each position:
|
|
372
|
+
|
|
373
|
+
### Fundamental Review
|
|
374
|
+
- [ ] Read recent earnings report and call transcript
|
|
375
|
+
- [ ] Review updated financial metrics (revenue, margins, EPS)
|
|
376
|
+
- [ ] Check for guidance changes (raised, lowered, maintained)
|
|
377
|
+
- [ ] Read recent analyst reports or news
|
|
378
|
+
- [ ] Verify competitive position (market share, new entrants)
|
|
379
|
+
|
|
380
|
+
### Valuation Review
|
|
381
|
+
- [ ] Calculate current P/E, P/B, EV/EBITDA
|
|
382
|
+
- [ ] Compare to 1Y, 3Y, 5Y historical averages
|
|
383
|
+
- [ ] Compare to peer group
|
|
384
|
+
- [ ] Calculate PEG ratio
|
|
385
|
+
- [ ] Assess if valuation justified by fundamentals
|
|
386
|
+
|
|
387
|
+
### Portfolio Fit Review
|
|
388
|
+
- [ ] Calculate current position size (% of portfolio)
|
|
389
|
+
- [ ] Assess if size matches conviction
|
|
390
|
+
- [ ] Check if position contributes to concentration risk
|
|
391
|
+
- [ ] Verify sector allocation impact
|
|
392
|
+
- [ ] Evaluate correlation with other holdings
|
|
393
|
+
|
|
394
|
+
### Risk Review
|
|
395
|
+
- [ ] Identify new risks (regulatory, competitive, macro)
|
|
396
|
+
- [ ] Assess if stop-loss should be updated
|
|
397
|
+
- [ ] Review downside scenario (what could go wrong?)
|
|
398
|
+
- [ ] Check beta and volatility (has it increased?)
|
|
399
|
+
- [ ] Evaluate if risk/reward still favorable
|
|
400
|
+
|
|
401
|
+
### Action Decision
|
|
402
|
+
- [ ] Does thesis warrant HOLD/ADD/TRIM/SELL?
|
|
403
|
+
- [ ] If change needed, what is specific action?
|
|
404
|
+
- [ ] What is timeline for action (immediate, gradual, wait for level)?
|
|
405
|
+
- [ ] What are trigger points for future action?
|
|
406
|
+
- [ ] Document decision and rationale
|
|
407
|
+
|
|
408
|
+
## Common Position Evaluation Mistakes
|
|
409
|
+
|
|
410
|
+
### Mistake 1: Anchoring to Purchase Price
|
|
411
|
+
|
|
412
|
+
**Problem:** "I bought at $100, now it's $80, I'll wait to break even before selling"
|
|
413
|
+
|
|
414
|
+
**Why wrong:** Purchase price is irrelevant to forward returns. Sunk cost fallacy.
|
|
415
|
+
|
|
416
|
+
**Correct approach:** Evaluate position based on current fundamentals and forward outlook. If thesis broken, sell now regardless of gain/loss.
|
|
417
|
+
|
|
418
|
+
### Mistake 2: Letting Winners Run Indefinitely
|
|
419
|
+
|
|
420
|
+
**Problem:** "It's my best performer, I'll never sell!"
|
|
421
|
+
|
|
422
|
+
**Why wrong:** Position becomes oversized, creates concentration risk, valuation may become stretched.
|
|
423
|
+
|
|
424
|
+
**Correct approach:** Trim winners back to target weight periodically. Take some profits. Reinvest in undervalued areas.
|
|
425
|
+
|
|
426
|
+
### Mistake 3: Selling Losers Too Quickly
|
|
427
|
+
|
|
428
|
+
**Problem:** "It's down 15%, I need to cut losses"
|
|
429
|
+
|
|
430
|
+
**Why wrong:** Volatility is normal. Selling in panic often locks in losses before recovery.
|
|
431
|
+
|
|
432
|
+
**Correct approach:** Evaluate if thesis still intact. If yes, consider adding (averaging down). If no, sell regardless of loss size.
|
|
433
|
+
|
|
434
|
+
### Mistake 4: Ignoring Valuation ("Quality at Any Price")
|
|
435
|
+
|
|
436
|
+
**Problem:** "This is a great company, valuation doesn't matter"
|
|
437
|
+
|
|
438
|
+
**Why wrong:** Even great companies can be overvalued. Future returns depend on entry price.
|
|
439
|
+
|
|
440
|
+
**Correct approach:** Great companies at fair prices. Trim when expensive, add when cheap, even for high-quality names.
|
|
441
|
+
|
|
442
|
+
### Mistake 5: Falling in Love with Stocks
|
|
443
|
+
|
|
444
|
+
**Problem:** Emotional attachment prevents objective evaluation
|
|
445
|
+
|
|
446
|
+
**Why wrong:** Stocks don't love you back. Capital allocation should be ruthlessly rational.
|
|
447
|
+
|
|
448
|
+
**Correct approach:** Treat positions as capital deployment decisions, not relationships. Be willing to sell anything if better opportunity exists.
|
|
449
|
+
|
|
450
|
+
## Summary
|
|
451
|
+
|
|
452
|
+
**Position Evaluation Framework:**
|
|
453
|
+
|
|
454
|
+
1. **Thesis Validation (40%)** - Is the story still true?
|
|
455
|
+
2. **Valuation Assessment (30%)** - Is the price right?
|
|
456
|
+
3. **Position Sizing (20%)** - Is the size appropriate?
|
|
457
|
+
4. **Relative Opportunity (10%)** - Are there better uses of capital?
|
|
458
|
+
|
|
459
|
+
**Four Actions:**
|
|
460
|
+
|
|
461
|
+
- **HOLD:** Thesis intact, fair valuation, appropriate size
|
|
462
|
+
- **ADD:** Strengthening thesis, undervalued, room to add
|
|
463
|
+
- **TRIM:** Weakening thesis OR expensive OR oversized
|
|
464
|
+
- **SELL:** Broken thesis OR severely overvalued OR much better alternatives
|
|
465
|
+
|
|
466
|
+
**Best Practices:**
|
|
467
|
+
|
|
468
|
+
- Review positions quarterly (at minimum)
|
|
469
|
+
- Document thesis at purchase
|
|
470
|
+
- Update thesis as new information emerges
|
|
471
|
+
- Be willing to admit mistakes early
|
|
472
|
+
- Trim winners to maintain diversification
|
|
473
|
+
- Average down only if thesis intact
|
|
474
|
+
- Ignore purchase price (sunk cost)
|
|
475
|
+
- Remain objective and unemotional
|
|
476
|
+
|
|
477
|
+
**Remember:** Position evaluation is both art and science. Combine quantitative metrics with qualitative judgment. When in doubt, reduce position size rather than holding full position or selling entirely.
|