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,219 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Uptrend Analyzer - Main Orchestrator
|
|
4
|
+
|
|
5
|
+
Analyzes market breadth using Monty's Uptrend Ratio Dashboard data.
|
|
6
|
+
Generates a 0-100 composite score from 5 components:
|
|
7
|
+
1. Market Breadth (Overall) - 30%
|
|
8
|
+
2. Sector Participation - 25%
|
|
9
|
+
3. Sector Rotation - 15%
|
|
10
|
+
4. Momentum - 20%
|
|
11
|
+
5. Historical Context - 10%
|
|
12
|
+
|
|
13
|
+
No API key required - uses free GitHub CSV data.
|
|
14
|
+
|
|
15
|
+
Usage:
|
|
16
|
+
python3 uptrend_analyzer.py
|
|
17
|
+
python3 uptrend_analyzer.py --output-dir /path/to/output
|
|
18
|
+
|
|
19
|
+
Output:
|
|
20
|
+
- JSON: uptrend_analysis_YYYY-MM-DD_HHMMSS.json
|
|
21
|
+
- Markdown: uptrend_analysis_YYYY-MM-DD_HHMMSS.md
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
import argparse
|
|
25
|
+
import os
|
|
26
|
+
import sys
|
|
27
|
+
from datetime import datetime
|
|
28
|
+
|
|
29
|
+
# Add parent directory to path for imports
|
|
30
|
+
sys.path.insert(0, os.path.dirname(__file__))
|
|
31
|
+
|
|
32
|
+
from data_fetcher import UptrendDataFetcher
|
|
33
|
+
from calculators.market_breadth_calculator import calculate_market_breadth
|
|
34
|
+
from calculators.sector_participation_calculator import calculate_sector_participation
|
|
35
|
+
from calculators.sector_rotation_calculator import calculate_sector_rotation
|
|
36
|
+
from calculators.momentum_calculator import calculate_momentum
|
|
37
|
+
from calculators.historical_context_calculator import calculate_historical_context
|
|
38
|
+
from scorer import calculate_composite_score
|
|
39
|
+
from report_generator import generate_json_report, generate_markdown_report
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def parse_arguments():
|
|
43
|
+
parser = argparse.ArgumentParser(
|
|
44
|
+
description="Uptrend Analyzer - Market Breadth Health Diagnosis"
|
|
45
|
+
)
|
|
46
|
+
parser.add_argument(
|
|
47
|
+
"--output-dir",
|
|
48
|
+
default=".",
|
|
49
|
+
help="Output directory for reports (default: current directory)"
|
|
50
|
+
)
|
|
51
|
+
return parser.parse_args()
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def main():
|
|
55
|
+
args = parse_arguments()
|
|
56
|
+
|
|
57
|
+
print("=" * 70)
|
|
58
|
+
print("Uptrend Analyzer")
|
|
59
|
+
print("Market Breadth Health Diagnosis via Monty's Uptrend Ratio Dashboard")
|
|
60
|
+
print("=" * 70)
|
|
61
|
+
print()
|
|
62
|
+
|
|
63
|
+
# ========================================================================
|
|
64
|
+
# Step 1: Fetch CSV Data
|
|
65
|
+
# ========================================================================
|
|
66
|
+
print("Step 1: Fetching CSV Data")
|
|
67
|
+
print("-" * 70)
|
|
68
|
+
|
|
69
|
+
fetcher = UptrendDataFetcher()
|
|
70
|
+
|
|
71
|
+
print(" Fetching timeseries data...", end=" ", flush=True)
|
|
72
|
+
timeseries = fetcher.fetch_timeseries()
|
|
73
|
+
if timeseries:
|
|
74
|
+
print(f"OK ({len(timeseries)} rows)")
|
|
75
|
+
else:
|
|
76
|
+
print("FAILED")
|
|
77
|
+
print("ERROR: Cannot proceed without timeseries data", file=sys.stderr)
|
|
78
|
+
sys.exit(1)
|
|
79
|
+
|
|
80
|
+
print(" Fetching sector summary...", end=" ", flush=True)
|
|
81
|
+
sector_summary = fetcher.fetch_sector_summary()
|
|
82
|
+
if sector_summary:
|
|
83
|
+
print(f"OK ({len(sector_summary)} sectors)")
|
|
84
|
+
else:
|
|
85
|
+
print("WARN - Sector summary unavailable, some components will use defaults")
|
|
86
|
+
|
|
87
|
+
# Extract key data subsets
|
|
88
|
+
all_timeseries = fetcher.get_all_timeseries()
|
|
89
|
+
latest_all = fetcher.get_latest_all()
|
|
90
|
+
sector_latest = fetcher.get_all_sector_latest()
|
|
91
|
+
|
|
92
|
+
if latest_all:
|
|
93
|
+
ratio_pct = round(latest_all["ratio"] * 100, 1) if latest_all.get("ratio") is not None else "N/A"
|
|
94
|
+
print(f" Latest data: {latest_all.get('date', 'N/A')}, "
|
|
95
|
+
f"ratio={ratio_pct}%, trend={latest_all.get('trend', 'N/A')}")
|
|
96
|
+
print()
|
|
97
|
+
|
|
98
|
+
# ========================================================================
|
|
99
|
+
# Step 2: Calculate Components
|
|
100
|
+
# ========================================================================
|
|
101
|
+
print("Step 2: Calculating Components")
|
|
102
|
+
print("-" * 70)
|
|
103
|
+
|
|
104
|
+
# Component 1: Market Breadth (30%)
|
|
105
|
+
print(" [1/5] Market Breadth (Overall)...", end=" ", flush=True)
|
|
106
|
+
comp1 = calculate_market_breadth(latest_all, all_timeseries)
|
|
107
|
+
print(f"Score: {comp1['score']} ({comp1['signal']})")
|
|
108
|
+
|
|
109
|
+
# Component 2: Sector Participation (25%)
|
|
110
|
+
print(" [2/5] Sector Participation...", end=" ", flush=True)
|
|
111
|
+
comp2 = calculate_sector_participation(sector_summary, sector_latest)
|
|
112
|
+
print(f"Score: {comp2['score']} ({comp2['signal']})")
|
|
113
|
+
|
|
114
|
+
# Component 3: Sector Rotation (15%)
|
|
115
|
+
print(" [3/5] Sector Rotation...", end=" ", flush=True)
|
|
116
|
+
comp3 = calculate_sector_rotation(sector_summary, sector_latest)
|
|
117
|
+
print(f"Score: {comp3['score']} ({comp3['signal']})")
|
|
118
|
+
|
|
119
|
+
# Component 4: Momentum (20%)
|
|
120
|
+
print(" [4/5] Momentum...", end=" ", flush=True)
|
|
121
|
+
comp4 = calculate_momentum(all_timeseries, sector_summary)
|
|
122
|
+
print(f"Score: {comp4['score']} ({comp4['signal']})")
|
|
123
|
+
|
|
124
|
+
# Component 5: Historical Context (10%)
|
|
125
|
+
print(" [5/5] Historical Context...", end=" ", flush=True)
|
|
126
|
+
comp5 = calculate_historical_context(all_timeseries)
|
|
127
|
+
print(f"Score: {comp5['score']} ({comp5['signal']})")
|
|
128
|
+
|
|
129
|
+
print()
|
|
130
|
+
|
|
131
|
+
# ========================================================================
|
|
132
|
+
# Step 3: Composite Score
|
|
133
|
+
# ========================================================================
|
|
134
|
+
print("Step 3: Calculating Composite Score")
|
|
135
|
+
print("-" * 70)
|
|
136
|
+
|
|
137
|
+
component_scores = {
|
|
138
|
+
"market_breadth": comp1["score"],
|
|
139
|
+
"sector_participation": comp2["score"],
|
|
140
|
+
"sector_rotation": comp3["score"],
|
|
141
|
+
"momentum": comp4["score"],
|
|
142
|
+
"historical_context": comp5["score"],
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
data_availability = {
|
|
146
|
+
"market_breadth": comp1.get("data_available", True),
|
|
147
|
+
"sector_participation": comp2.get("data_available", True),
|
|
148
|
+
"sector_rotation": comp3.get("data_available", True),
|
|
149
|
+
"momentum": comp4.get("data_available", True),
|
|
150
|
+
"historical_context": comp5.get("data_available", True),
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
# Collect warning flags from components
|
|
154
|
+
warning_flags = {
|
|
155
|
+
"late_cycle": comp3.get("late_cycle_flag", False),
|
|
156
|
+
"high_spread": (comp2.get("spread") is not None and comp2["spread"] > 0.40),
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
composite = calculate_composite_score(component_scores, data_availability,
|
|
160
|
+
warning_flags)
|
|
161
|
+
|
|
162
|
+
print(f" Composite Score: {composite['composite_score']}/100")
|
|
163
|
+
print(f" Zone: {composite['zone']}")
|
|
164
|
+
print(f" Exposure Guidance: {composite['exposure_guidance']}")
|
|
165
|
+
print(f" Strongest: {composite['strongest_component']['label']} "
|
|
166
|
+
f"({composite['strongest_component']['score']})")
|
|
167
|
+
print(f" Weakest: {composite['weakest_component']['label']} "
|
|
168
|
+
f"({composite['weakest_component']['score']})")
|
|
169
|
+
print()
|
|
170
|
+
|
|
171
|
+
# ========================================================================
|
|
172
|
+
# Step 4: Generate Reports
|
|
173
|
+
# ========================================================================
|
|
174
|
+
print("Step 4: Generating Reports")
|
|
175
|
+
print("-" * 70)
|
|
176
|
+
|
|
177
|
+
os.makedirs(args.output_dir, exist_ok=True)
|
|
178
|
+
|
|
179
|
+
# Build full analysis
|
|
180
|
+
analysis = {
|
|
181
|
+
"metadata": {
|
|
182
|
+
"generated_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
|
183
|
+
"data_source": "Monty's Uptrend Ratio Dashboard (GitHub CSV)",
|
|
184
|
+
"api_key_required": False,
|
|
185
|
+
"latest_data_date": latest_all.get("date", "N/A") if latest_all else "N/A",
|
|
186
|
+
"timeseries_rows": len(timeseries),
|
|
187
|
+
"sectors_available": len(sector_summary),
|
|
188
|
+
},
|
|
189
|
+
"composite": composite,
|
|
190
|
+
"components": {
|
|
191
|
+
"market_breadth": comp1,
|
|
192
|
+
"sector_participation": comp2,
|
|
193
|
+
"sector_rotation": comp3,
|
|
194
|
+
"momentum": comp4,
|
|
195
|
+
"historical_context": comp5,
|
|
196
|
+
},
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
timestamp = datetime.now().strftime("%Y-%m-%d_%H%M%S")
|
|
200
|
+
json_file = os.path.join(args.output_dir, f"uptrend_analysis_{timestamp}.json")
|
|
201
|
+
md_file = os.path.join(args.output_dir, f"uptrend_analysis_{timestamp}.md")
|
|
202
|
+
|
|
203
|
+
generate_json_report(analysis, json_file)
|
|
204
|
+
generate_markdown_report(analysis, md_file)
|
|
205
|
+
|
|
206
|
+
print()
|
|
207
|
+
print("=" * 70)
|
|
208
|
+
print("Uptrend Analysis Complete")
|
|
209
|
+
print("=" * 70)
|
|
210
|
+
print(f" Composite Score: {composite['composite_score']}/100")
|
|
211
|
+
print(f" Zone: {composite['zone']}")
|
|
212
|
+
print(f" Exposure Guidance: {composite['exposure_guidance']}")
|
|
213
|
+
print(f" JSON Report: {json_file}")
|
|
214
|
+
print(f" Markdown Report: {md_file}")
|
|
215
|
+
print()
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
if __name__ == "__main__":
|
|
219
|
+
main()
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# US Market Bubble Detector - Changelog
|
|
2
|
+
|
|
3
|
+
## Version 2.1 (November 3, 2025)
|
|
4
|
+
|
|
5
|
+
### Critical Issue Fixed
|
|
6
|
+
**Problem Identified:** v2.0 allowed excessive qualitative adjustments based on unmeasured "narratives" and subjective impressions, leading to inflated bubble risk scores.
|
|
7
|
+
|
|
8
|
+
**Example Case (Nov 3, 2025):**
|
|
9
|
+
- Quantitative Score (Phase 2): 9 points (objective, data-driven)
|
|
10
|
+
- Qualitative Adjustment (v2.0): +2 points
|
|
11
|
+
- Media Narrative: +1 (based on "elevated AI narrative" - NO DATA)
|
|
12
|
+
- Valuation: +1 (P/E 30.8 - DOUBLE COUNTED, ignored fundamental backing)
|
|
13
|
+
- **Result**: 11/16 points → Euphoria phase → 40% risk budget (overly defensive)
|
|
14
|
+
|
|
15
|
+
**Root Cause:** Confirmation bias - analyst had bearish conclusion first, then adjusted qualitative points to match expectation.
|
|
16
|
+
|
|
17
|
+
### Changes in v2.1
|
|
18
|
+
|
|
19
|
+
#### 1. Stricter Qualitative Criteria (MAX +3, down from +5)
|
|
20
|
+
|
|
21
|
+
**A. Social Penetration (0-1 points)**
|
|
22
|
+
- **v2.0**: Loose criteria, "general awareness" acceptable
|
|
23
|
+
- **v2.1**: ALL three required:
|
|
24
|
+
- Direct user report of non-investor recommendations
|
|
25
|
+
- Specific examples with dates/names
|
|
26
|
+
- Multiple independent sources (minimum 3)
|
|
27
|
+
|
|
28
|
+
**B. Media/Search Trends (0-1 points)**
|
|
29
|
+
- **v2.0**: Subjective "many reports" acceptable
|
|
30
|
+
- **v2.1**: BOTH required:
|
|
31
|
+
- Google Trends 5x+ YoY (measured data)
|
|
32
|
+
- Mainstream coverage confirmed (Time covers, TV specials with dates)
|
|
33
|
+
- **Critical**: "Elevated narrative" without data = 0 points
|
|
34
|
+
|
|
35
|
+
**C. Valuation Disconnect (0-1 points)**
|
|
36
|
+
- **v2.0**: P/E >25 alone sufficient
|
|
37
|
+
- **v2.1**: ALL required AND avoid double-counting:
|
|
38
|
+
- P/E >25 (if NOT in Phase 2)
|
|
39
|
+
- Fundamentals explicitly ignored in discourse
|
|
40
|
+
- "This time is different" documented in major media
|
|
41
|
+
- **Self-check**: If companies have real earnings supporting valuations → 0 points
|
|
42
|
+
|
|
43
|
+
#### 2. Confirmation Bias Prevention
|
|
44
|
+
|
|
45
|
+
New mandatory checklist before adding ANY qualitative points:
|
|
46
|
+
```
|
|
47
|
+
□ Do I have concrete, measurable data? (not impressions)
|
|
48
|
+
□ Would an independent observer reach the same conclusion?
|
|
49
|
+
□ Am I avoiding double-counting with Phase 2 scores?
|
|
50
|
+
□ Have I documented specific evidence with sources?
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
#### 3. Granular Risk Phases
|
|
54
|
+
|
|
55
|
+
**New "Elevated Risk" Phase (8-9 points)**
|
|
56
|
+
- **v2.0**: 9 points = Euphoria = 40% risk budget (extreme defensive)
|
|
57
|
+
- **v2.1**: 9 points = Elevated Risk = 50-70% risk budget (balanced caution)
|
|
58
|
+
|
|
59
|
+
**Updated Risk Budget Matrix:**
|
|
60
|
+
| Score | Phase | v2.0 Risk Budget | v2.1 Risk Budget | Change |
|
|
61
|
+
|-------|-------|------------------|------------------|--------|
|
|
62
|
+
| 0-4 | Normal | 100% | 100% | - |
|
|
63
|
+
| 5-7 | Caution | 70% | 70-80% | More flexible |
|
|
64
|
+
| 8-9 | Elevated Risk | 40% (Euphoria) | 50-70% | **NEW PHASE** |
|
|
65
|
+
| 10-12 | Euphoria | 40% | 40-50% | More balanced |
|
|
66
|
+
| 13-15 | Critical | 20% | 20-30% | Reduced max |
|
|
67
|
+
|
|
68
|
+
#### 4. Maximum Score Reduction
|
|
69
|
+
|
|
70
|
+
- **v2.0**: 0-16 points (Phase 2: 12, Phase 3: -1 to +5)
|
|
71
|
+
- **v2.1**: 0-15 points (Phase 2: 12, Phase 3: 0 to +3)
|
|
72
|
+
|
|
73
|
+
### Impact on Nov 3, 2025 Analysis
|
|
74
|
+
|
|
75
|
+
**Under v2.0:**
|
|
76
|
+
- Score: 11/16 → Euphoria phase
|
|
77
|
+
- Risk Budget: 40%
|
|
78
|
+
- Positioning: Extreme defensive
|
|
79
|
+
|
|
80
|
+
**Under v2.1 (corrected):**
|
|
81
|
+
- Quantitative: 9/12 (unchanged, data-driven)
|
|
82
|
+
- Qualitative:
|
|
83
|
+
- Media Narrative: 0 points (no Google Trends data)
|
|
84
|
+
- Valuation: 0 points (AI has fundamental backing, double-counting)
|
|
85
|
+
- **Score: 9/15 → Elevated Risk phase**
|
|
86
|
+
- **Risk Budget: 50-70%**
|
|
87
|
+
- **Positioning: Cautious but not extreme**
|
|
88
|
+
|
|
89
|
+
### Key Learnings
|
|
90
|
+
|
|
91
|
+
1. **Data > Impressions**: "Elevated narrative" is not measurable evidence
|
|
92
|
+
2. **Avoid Double-Counting**: Valuation in Phase 2 quantitative ≠ add again in Phase 3
|
|
93
|
+
3. **Check Internal Consistency**: If report admits "AI has fundamental backing," then valuation disconnect score must be 0
|
|
94
|
+
4. **Independent Verification**: All qualitative points must be verifiable by independent observers
|
|
95
|
+
|
|
96
|
+
### Documentation Updates
|
|
97
|
+
|
|
98
|
+
- `SKILL.md`: Updated to v2.1 with strict criteria
|
|
99
|
+
- `references/implementation_guide.md`: Enhanced Phase 3 with bias prevention checklist
|
|
100
|
+
- `references/quick_reference.md`: Updated action matrix with new Elevated Risk phase
|
|
101
|
+
- `references/bubble_framework.md`: Updated risk budget table
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Version 2.0 (October 27, 2025)
|
|
106
|
+
|
|
107
|
+
### Initial Major Revision
|
|
108
|
+
- Introduced mandatory quantitative data collection
|
|
109
|
+
- Eliminated reliance on impressions and speculation
|
|
110
|
+
- Established clear threshold settings for each indicator
|
|
111
|
+
- Two-phase evaluation process: Quantitative → Qualitative
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
**Version Control:**
|
|
116
|
+
- v1.x: Original framework (deprecated)
|
|
117
|
+
- v2.0: Data-driven quantitative focus
|
|
118
|
+
- v2.1: Strict qualitative criteria + confirmation bias prevention
|