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,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vcp-screener
|
|
3
|
+
description: Screen S&P 500 stocks for Mark Minervini's Volatility Contraction Pattern (VCP). Identifies Stage 2 uptrend stocks forming tight bases with contracting volatility near breakout pivot points. Use when user requests VCP screening, Minervini-style setups, tight base patterns, volatility contraction breakout candidates, or Stage 2 momentum stock scanning.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# VCP Screener - Minervini Volatility Contraction Pattern
|
|
7
|
+
|
|
8
|
+
Screen S&P 500 stocks for Mark Minervini's Volatility Contraction Pattern (VCP), identifying Stage 2 uptrend stocks with contracting volatility near breakout pivot points.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- User asks for VCP screening or Minervini-style setups
|
|
13
|
+
- User wants to find tight base / volatility contraction patterns
|
|
14
|
+
- User requests Stage 2 momentum stock scanning
|
|
15
|
+
- User asks for breakout candidates with defined risk
|
|
16
|
+
|
|
17
|
+
## Prerequisites
|
|
18
|
+
|
|
19
|
+
- FMP API key (set `FMP_API_KEY` environment variable or pass `--api-key`)
|
|
20
|
+
- Free tier (250 calls/day) is sufficient for default screening (top 100 candidates)
|
|
21
|
+
- Paid tier recommended for full S&P 500 screening (`--full-sp500`)
|
|
22
|
+
|
|
23
|
+
## Workflow
|
|
24
|
+
|
|
25
|
+
### Step 1: Prepare and Execute Screening
|
|
26
|
+
|
|
27
|
+
Run the VCP screener script:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Default: S&P 500, top 100 candidates
|
|
31
|
+
python3 skills/vcp-screener/scripts/screen_vcp.py --output-dir skills/vcp-screener/scripts
|
|
32
|
+
|
|
33
|
+
# Custom universe
|
|
34
|
+
python3 skills/vcp-screener/scripts/screen_vcp.py --universe AAPL NVDA MSFT AMZN META --output-dir skills/vcp-screener/scripts
|
|
35
|
+
|
|
36
|
+
# Full S&P 500 (paid API tier)
|
|
37
|
+
python3 skills/vcp-screener/scripts/screen_vcp.py --full-sp500 --output-dir skills/vcp-screener/scripts
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Step 2: Review Results
|
|
41
|
+
|
|
42
|
+
1. Read the generated JSON and Markdown reports
|
|
43
|
+
2. Load `references/vcp_methodology.md` for pattern interpretation context
|
|
44
|
+
3. Load `references/scoring_system.md` for score threshold guidance
|
|
45
|
+
|
|
46
|
+
### Step 3: Present Analysis
|
|
47
|
+
|
|
48
|
+
For each top candidate, present:
|
|
49
|
+
- VCP composite score and rating
|
|
50
|
+
- Contraction details (T1/T2/T3 depths and ratios)
|
|
51
|
+
- Trade setup: pivot price, stop-loss, risk percentage
|
|
52
|
+
- Volume dry-up ratio
|
|
53
|
+
- Relative strength rank
|
|
54
|
+
|
|
55
|
+
### Step 4: Provide Actionable Guidance
|
|
56
|
+
|
|
57
|
+
Based on ratings:
|
|
58
|
+
- **Textbook VCP (90+):** Buy at pivot with aggressive sizing
|
|
59
|
+
- **Strong VCP (80-89):** Buy at pivot with standard sizing
|
|
60
|
+
- **Good VCP (70-79):** Buy on volume confirmation above pivot
|
|
61
|
+
- **Developing (60-69):** Add to watchlist, wait for tighter contraction
|
|
62
|
+
- **Weak/No VCP (<60):** Monitor only or skip
|
|
63
|
+
|
|
64
|
+
## 3-Phase Pipeline
|
|
65
|
+
|
|
66
|
+
1. **Pre-Filter** - Quote-based screening (price, volume, 52w position) ~101 API calls
|
|
67
|
+
2. **Trend Template** - 7-point Stage 2 filter with 260-day histories ~100 API calls
|
|
68
|
+
3. **VCP Detection** - Pattern analysis, scoring, report generation (no additional API calls)
|
|
69
|
+
|
|
70
|
+
## Output
|
|
71
|
+
|
|
72
|
+
- `vcp_screener_YYYY-MM-DD_HHMMSS.json` - Structured results
|
|
73
|
+
- `vcp_screener_YYYY-MM-DD_HHMMSS.md` - Human-readable report
|
|
74
|
+
|
|
75
|
+
## Resources
|
|
76
|
+
|
|
77
|
+
- `references/vcp_methodology.md` - VCP theory and Trend Template explanation
|
|
78
|
+
- `references/scoring_system.md` - Scoring thresholds and component weights
|
|
79
|
+
- `references/fmp_api_endpoints.md` - API endpoints and rate limits
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# FMP API Endpoints Used by VCP Screener
|
|
2
|
+
|
|
3
|
+
## Endpoints
|
|
4
|
+
|
|
5
|
+
### 1. S&P 500 Constituents
|
|
6
|
+
- **URL:** `GET /api/v3/sp500_constituent`
|
|
7
|
+
- **Calls:** 1 (cached)
|
|
8
|
+
- **Returns:** `[{symbol, name, sector, subSector}, ...]`
|
|
9
|
+
- **Used in:** Phase 1 - Universe definition
|
|
10
|
+
|
|
11
|
+
### 2. Batch Quote
|
|
12
|
+
- **URL:** `GET /api/v3/quote/{symbols}` (comma-separated, max 5)
|
|
13
|
+
- **Calls:** ~101 (503 stocks / 5 per batch)
|
|
14
|
+
- **Returns:** `[{symbol, price, yearHigh, yearLow, avgVolume, marketCap, ...}]`
|
|
15
|
+
- **Used in:** Phase 1 - Pre-filter
|
|
16
|
+
|
|
17
|
+
### 3. Historical Prices
|
|
18
|
+
- **URL:** `GET /api/v3/historical-price-full/{symbol}?timeseries=260`
|
|
19
|
+
- **Calls:** 1 (SPY) + up to 100 (candidates)
|
|
20
|
+
- **Returns:** `{symbol, historical: [{date, open, high, low, close, adjClose, volume}, ...]}`
|
|
21
|
+
- **Used in:** Phase 2 - Trend Template, Phase 3 - VCP detection
|
|
22
|
+
|
|
23
|
+
## API Budget Summary
|
|
24
|
+
|
|
25
|
+
| Phase | Operation | API Calls |
|
|
26
|
+
|-------|-----------|-----------|
|
|
27
|
+
| 1 | S&P 500 constituents | 1 |
|
|
28
|
+
| 1 | Batch quotes (503 / 5) | ~101 |
|
|
29
|
+
| 2 | SPY 260-day history | 1 |
|
|
30
|
+
| 2 | Candidate histories (max 100) | 100 |
|
|
31
|
+
| **Total (default)** | | **~203** |
|
|
32
|
+
| **Total (--full-sp500)** | | **~350** |
|
|
33
|
+
|
|
34
|
+
## Rate Limits
|
|
35
|
+
|
|
36
|
+
- **Free tier:** 250 API calls/day - Default screening fits within this limit
|
|
37
|
+
- **Starter tier ($29.99/mo):** 750 calls/day
|
|
38
|
+
- **Rate limiting:** 0.3s delay between requests, automatic retry on 429
|
|
39
|
+
- **Caching:** In-memory session cache prevents duplicate requests
|
|
40
|
+
|
|
41
|
+
## Notes
|
|
42
|
+
|
|
43
|
+
- All historical data uses `timeseries=260` parameter (260 trading days = ~1 year)
|
|
44
|
+
- Phase 3 (VCP detection, scoring, reporting) requires NO additional API calls
|
|
45
|
+
- The `--full-sp500` flag fetches histories for all pre-filter passers (~250 stocks)
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# VCP Screener Scoring System
|
|
2
|
+
|
|
3
|
+
## 5-Component Composite Score
|
|
4
|
+
|
|
5
|
+
| Component | Weight | Source |
|
|
6
|
+
|-----------|--------|--------|
|
|
7
|
+
| Trend Template (Stage 2) | 25% | 7-point Minervini criteria |
|
|
8
|
+
| Contraction Quality | 25% | VCP pattern detection |
|
|
9
|
+
| Volume Pattern | 20% | Volume dry-up analysis |
|
|
10
|
+
| Pivot Proximity | 15% | Distance from breakout level |
|
|
11
|
+
| Relative Strength | 15% | Minervini-weighted RS vs S&P 500 |
|
|
12
|
+
|
|
13
|
+
## Component Scoring Details
|
|
14
|
+
|
|
15
|
+
### 1. Trend Template (0-100)
|
|
16
|
+
|
|
17
|
+
Each of the 7 criteria contributes 14.3 points:
|
|
18
|
+
|
|
19
|
+
| Criteria Passed | Score | Status |
|
|
20
|
+
|-----------------|-------|--------|
|
|
21
|
+
| 7/7 | 100 | Perfect Stage 2 |
|
|
22
|
+
| 6/7 | 85.8 | Pass (minimum threshold) |
|
|
23
|
+
| 5/7 | 71.5 | Borderline |
|
|
24
|
+
| <= 4/7 | <= 57 | Fail |
|
|
25
|
+
|
|
26
|
+
**Pass threshold:** Score >= 85 (6+ criteria) to proceed to VCP analysis.
|
|
27
|
+
|
|
28
|
+
### 2. Contraction Quality (0-100)
|
|
29
|
+
|
|
30
|
+
| # Contractions | Base Score |
|
|
31
|
+
|----------------|-----------|
|
|
32
|
+
| 4 | 90 |
|
|
33
|
+
| 3 | 80 |
|
|
34
|
+
| 2 | 60 |
|
|
35
|
+
| 1 or invalid | 0-40 |
|
|
36
|
+
|
|
37
|
+
**Modifiers:**
|
|
38
|
+
- Tight final contraction (< 5% depth): +10
|
|
39
|
+
- Good average contraction ratio (< 0.4 of T1): +10
|
|
40
|
+
- Deep T1 (> 30%): -10
|
|
41
|
+
|
|
42
|
+
### 3. Volume Pattern (0-100)
|
|
43
|
+
|
|
44
|
+
Based on dry-up ratio (recent 10-bar avg / 50-day avg):
|
|
45
|
+
|
|
46
|
+
| Dry-Up Ratio | Base Score |
|
|
47
|
+
|-------------|-----------|
|
|
48
|
+
| < 0.30 | 90 |
|
|
49
|
+
| 0.30-0.50 | 75 |
|
|
50
|
+
| 0.50-0.70 | 60 |
|
|
51
|
+
| 0.70-1.00 | 40 |
|
|
52
|
+
| > 1.00 | 20 |
|
|
53
|
+
|
|
54
|
+
**Modifiers:**
|
|
55
|
+
- Breakout on 1.5x+ volume: +10
|
|
56
|
+
- Net accumulation > 3 days (in 20d): +10
|
|
57
|
+
- Net distribution > 3 days (in 20d): -10
|
|
58
|
+
|
|
59
|
+
### 4. Pivot Proximity (0-100) — Distance-Priority Scoring
|
|
60
|
+
|
|
61
|
+
Scoring is distance-first. Volume confirmation adds a bonus only within 0-5% above pivot (Minervini: never chase >5% above pivot).
|
|
62
|
+
|
|
63
|
+
| Distance from Pivot | Base Score | Volume Bonus | Final Score | Trade Status |
|
|
64
|
+
|--------------------|-----------|-------------|------------|--------------|
|
|
65
|
+
| 0-3% above | 90 | +10 | 100 | BREAKOUT CONFIRMED |
|
|
66
|
+
| 3-5% above | 65 | +10 | 75 | EXTENDED - Moderate chase risk (vol confirmed) |
|
|
67
|
+
| 5-10% above | 50 | — (none) | 50 | EXTENDED - High chase risk |
|
|
68
|
+
| 10-20% above | 35 | — (none) | 35 | EXTENDED - Very high chase risk |
|
|
69
|
+
| >20% above | 20 | — (none) | 20 | OVEREXTENDED - Do not chase |
|
|
70
|
+
| 0 to -2% below | 90 | — | 90 | AT PIVOT (within 2%) |
|
|
71
|
+
| -2% to -5% | 75 | — | 75 | NEAR PIVOT |
|
|
72
|
+
| -5% to -8% | 60 | — | 60 | APPROACHING |
|
|
73
|
+
| -8% to -10% | 45 | — | 45 | DEVELOPING |
|
|
74
|
+
| -10% to -15% | 30 | — | 30 | EARLY |
|
|
75
|
+
| < -15% | 10 | — | 10 | FAR FROM PIVOT |
|
|
76
|
+
|
|
77
|
+
**Volume bonus rules:**
|
|
78
|
+
- 0-3% above pivot + volume: +10 points, status = "BREAKOUT CONFIRMED"
|
|
79
|
+
- 3-5% above pivot + volume: +10 points, "(vol confirmed)" appended to status
|
|
80
|
+
- >5% above pivot: no volume bonus (Minervini: do not chase extended breakouts)
|
|
81
|
+
- Below pivot: volume bonus not applicable
|
|
82
|
+
|
|
83
|
+
**Chase risk rule (Minervini):** Do not buy stocks >5% above their pivot point. Distance determines the base score; volume confirmation is a bonus, not an override.
|
|
84
|
+
|
|
85
|
+
### 5. Relative Strength (0-100)
|
|
86
|
+
|
|
87
|
+
Minervini weighting (emphasizes recent performance):
|
|
88
|
+
- 40%: Last 3 months (63 trading days)
|
|
89
|
+
- 20%: Last 6 months (126 trading days)
|
|
90
|
+
- 20%: Last 9 months (189 trading days)
|
|
91
|
+
- 20%: Last 12 months (252 trading days)
|
|
92
|
+
|
|
93
|
+
| Weighted RS vs S&P 500 | Score | RS Rank Estimate |
|
|
94
|
+
|-------------------------|-------|------------------|
|
|
95
|
+
| >= +50% | 100 | ~99 (top 1%) |
|
|
96
|
+
| >= +30% | 95 | ~95 (top 5%) |
|
|
97
|
+
| >= +20% | 90 | ~90 (top 10%) |
|
|
98
|
+
| >= +10% | 80 | ~80 (top 20%) |
|
|
99
|
+
| >= +5% | 70 | ~70 (top 30%) |
|
|
100
|
+
| >= 0% | 60 | ~60 (top 40%) |
|
|
101
|
+
| >= -5% | 50 | ~50 (average) |
|
|
102
|
+
| >= -10% | 40 | ~40 |
|
|
103
|
+
| >= -20% | 20 | ~25 |
|
|
104
|
+
| < -20% | 0 | ~10 |
|
|
105
|
+
|
|
106
|
+
## Rating Bands
|
|
107
|
+
|
|
108
|
+
| Composite Score | Rating | Position Sizing | Action |
|
|
109
|
+
|-----------------|--------|-----------------|--------|
|
|
110
|
+
| 90-100 | Textbook VCP | 1.5-2x normal | Buy at pivot, aggressive |
|
|
111
|
+
| 80-89 | Strong VCP | 1x normal | Buy at pivot, standard |
|
|
112
|
+
| 70-79 | Good VCP | 0.75x normal | Buy on volume confirmation |
|
|
113
|
+
| 60-69 | Developing VCP | Wait | Watchlist only |
|
|
114
|
+
| 50-59 | Weak VCP | Skip | Monitor only |
|
|
115
|
+
| < 50 | No VCP | Skip | Not actionable |
|
|
116
|
+
|
|
117
|
+
### valid_vcp Gate Rule
|
|
118
|
+
|
|
119
|
+
When the VCP pattern calculator returns `valid_vcp=false` (e.g., contraction ratios exceed 0.75, expanding contractions), the rating is capped regardless of composite score:
|
|
120
|
+
|
|
121
|
+
- If `valid_vcp=false` AND composite >= 70: rating is overridden to **"Developing VCP"** with guidance "Watchlist only - VCP pattern not validated, do not buy"
|
|
122
|
+
- If `valid_vcp=false` AND composite < 70: no override needed (already below actionable threshold)
|
|
123
|
+
|
|
124
|
+
This prevents stocks with expanding or non-contracting patterns from receiving actionable buy ratings.
|
|
125
|
+
|
|
126
|
+
## Entry Ready Conditions
|
|
127
|
+
|
|
128
|
+
A stock is classified as `entry_ready=True` when all of the following conditions are met:
|
|
129
|
+
|
|
130
|
+
| Condition | Default Threshold | CLI Override |
|
|
131
|
+
|-----------|-------------------|--------------|
|
|
132
|
+
| `valid_vcp` | `True` | `--no-require-valid-vcp` |
|
|
133
|
+
| `distance_from_pivot_pct` | -8.0% to +3.0% | `--max-above-pivot` |
|
|
134
|
+
| `dry_up_ratio` | <= 1.0 | — |
|
|
135
|
+
| `risk_pct` | <= 15.0% | `--max-risk` |
|
|
136
|
+
|
|
137
|
+
**Report sections:**
|
|
138
|
+
- **Section A: Pre-Breakout Watchlist** — `entry_ready=True` stocks, sorted by composite score
|
|
139
|
+
- **Section B: Extended / Quality VCP** — `entry_ready=False` stocks, sorted by composite score
|
|
140
|
+
|
|
141
|
+
**CLI mode:**
|
|
142
|
+
- `--mode all` (default): Shows both sections
|
|
143
|
+
- `--mode prebreakout`: Shows only entry_ready=True stocks
|
|
144
|
+
|
|
145
|
+
## Pre-Filter Criteria (Phase 1)
|
|
146
|
+
|
|
147
|
+
Quick filter using quote data only (no historical needed):
|
|
148
|
+
|
|
149
|
+
| Criterion | Threshold | Purpose |
|
|
150
|
+
|-----------|-----------|---------|
|
|
151
|
+
| Price | > $10 | Exclude penny stocks |
|
|
152
|
+
| % above 52w low | > 20% | Roughly in uptrend |
|
|
153
|
+
| % below 52w high | < 30% | Not in deep correction |
|
|
154
|
+
| Average volume | > 200,000 | Sufficient liquidity |
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# VCP Methodology - Minervini's Volatility Contraction Pattern
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Volatility Contraction Pattern (VCP) was developed by Mark Minervini, two-time U.S. Investing Championship winner. It identifies stocks in Stage 2 uptrends that are forming progressively tighter consolidation patterns before a potential breakout.
|
|
6
|
+
|
|
7
|
+
## Stage Analysis Foundation
|
|
8
|
+
|
|
9
|
+
### The 4 Stages (Stan Weinstein / Minervini)
|
|
10
|
+
|
|
11
|
+
1. **Stage 1 - Accumulation/Basing:** Stock trades sideways after a decline. Smart money accumulates.
|
|
12
|
+
2. **Stage 2 - Advancing/Uptrend:** Stock is in a confirmed uptrend. This is where VCPs form. **The only stage to buy.**
|
|
13
|
+
3. **Stage 3 - Distribution/Topping:** Stock stalls after an advance. Smart money distributes.
|
|
14
|
+
4. **Stage 4 - Declining/Downtrend:** Stock is in a confirmed downtrend. Avoid or short.
|
|
15
|
+
|
|
16
|
+
### Minervini's 7-Point Trend Template (Stage 2 Confirmation)
|
|
17
|
+
|
|
18
|
+
A stock MUST pass all (or nearly all) of these criteria to be in a confirmed Stage 2:
|
|
19
|
+
|
|
20
|
+
| # | Criterion | Purpose |
|
|
21
|
+
|---|-----------|---------|
|
|
22
|
+
| 1 | Price > 150-day SMA AND Price > 200-day SMA | Above major trend lines |
|
|
23
|
+
| 2 | 150-day SMA > 200-day SMA | Shorter MA above longer (bullish alignment) |
|
|
24
|
+
| 3 | 200-day SMA trending up for 22+ trading days | Long-term trend is up |
|
|
25
|
+
| 4 | Price > 50-day SMA | Above intermediate trend line |
|
|
26
|
+
| 5 | Price at least 25% above 52-week low | Sufficient distance from lows |
|
|
27
|
+
| 6 | Price within 25% of 52-week high | Not in a deep correction |
|
|
28
|
+
| 7 | Relative Strength rating > 70 | Outperforming most stocks |
|
|
29
|
+
|
|
30
|
+
**Pass threshold:** 6 of 7 criteria (score >= 85) to proceed to VCP detection.
|
|
31
|
+
|
|
32
|
+
## VCP Pattern Mechanics
|
|
33
|
+
|
|
34
|
+
### What is a VCP?
|
|
35
|
+
|
|
36
|
+
A VCP occurs when a stock in a Stage 2 uptrend pulls back and then rallies, but each successive pullback is **shallower** (less volatile) than the previous one. This "volatility contraction" signals that:
|
|
37
|
+
|
|
38
|
+
1. Selling pressure is being absorbed
|
|
39
|
+
2. Remaining sellers are being exhausted
|
|
40
|
+
3. Supply is drying up
|
|
41
|
+
4. A breakout becomes more probable
|
|
42
|
+
|
|
43
|
+
### Contraction Structure
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
H1 (Highest swing high)
|
|
47
|
+
/ \
|
|
48
|
+
/ \ T1 (First contraction: deepest)
|
|
49
|
+
/ \
|
|
50
|
+
/ L1
|
|
51
|
+
/ / \
|
|
52
|
+
/ / \ T2 (Second contraction: tighter)
|
|
53
|
+
H2 \
|
|
54
|
+
\ L2
|
|
55
|
+
\ / \
|
|
56
|
+
\/ \ T3 (Third contraction: tightest)
|
|
57
|
+
H3 L3
|
|
58
|
+
\ /
|
|
59
|
+
\ / ← PIVOT POINT (buy here on volume)
|
|
60
|
+
P
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Contraction Rules
|
|
64
|
+
|
|
65
|
+
- **T1 (first correction):** 8-35% depth for S&P 500 large-caps (up to 50% for small-caps)
|
|
66
|
+
- **T2:** Must be at least 25% tighter than T1 (ratio <= 0.75)
|
|
67
|
+
- **T3:** Must be at least 25% tighter than T2 (if present)
|
|
68
|
+
- **T4:** Extremely tight, often < 5% (rare, very bullish)
|
|
69
|
+
- **Minimum:** 2 contractions required
|
|
70
|
+
- **Ideal:** 3-4 contractions with progressive tightening
|
|
71
|
+
- **Duration:** 15-325 trading days for the complete pattern
|
|
72
|
+
|
|
73
|
+
### Pivot Point
|
|
74
|
+
|
|
75
|
+
The **pivot** is the high of the last contraction. This is the buy point:
|
|
76
|
+
|
|
77
|
+
- Buy when price moves above the pivot on volume 1.5x+ above the 50-day average
|
|
78
|
+
- Place stop-loss 1-2% below the last contraction low
|
|
79
|
+
- Risk per trade should be 5-8% from entry to stop
|
|
80
|
+
|
|
81
|
+
### Volume Signature
|
|
82
|
+
|
|
83
|
+
Ideal volume behavior during a VCP:
|
|
84
|
+
|
|
85
|
+
1. **During corrections:** Volume should decrease (sellers exhausting)
|
|
86
|
+
2. **Near the pivot:** Volume should "dry up" (extremely low, calm before the storm)
|
|
87
|
+
3. **On breakout:** Volume should surge to 1.5-2x the 50-day average
|
|
88
|
+
|
|
89
|
+
**Dry-up ratio** = Average volume (last 10 bars near pivot) / 50-day average volume
|
|
90
|
+
- < 0.30: Exceptional (textbook)
|
|
91
|
+
- 0.30-0.50: Strong
|
|
92
|
+
- 0.50-0.70: Adequate
|
|
93
|
+
- \> 0.70: Weak (caution)
|
|
94
|
+
|
|
95
|
+
## Historical VCP Examples
|
|
96
|
+
|
|
97
|
+
### Classic 3-Contraction VCP
|
|
98
|
+
- T1: 20% pullback over 6 weeks
|
|
99
|
+
- T2: 12% pullback over 3 weeks (40% tighter)
|
|
100
|
+
- T3: 5% pullback over 2 weeks (58% tighter)
|
|
101
|
+
- Breakout on 2x volume → 50%+ advance
|
|
102
|
+
|
|
103
|
+
### Tight 2-Contraction VCP (Large-Cap)
|
|
104
|
+
- T1: 12% pullback over 4 weeks
|
|
105
|
+
- T2: 5% pullback over 2 weeks (58% tighter)
|
|
106
|
+
- Breakout on 1.8x volume → 25-30% advance
|
|
107
|
+
|
|
108
|
+
## Common Pitfalls
|
|
109
|
+
|
|
110
|
+
1. **Buying before the pivot:** Wait for the breakout, not the setup
|
|
111
|
+
2. **Ignoring volume:** A breakout without volume often fails
|
|
112
|
+
3. **Wide stops:** Keep stops tight (below last contraction low)
|
|
113
|
+
4. **Wrong stage:** VCPs only work in Stage 2; verify with Trend Template first
|
|
114
|
+
5. **Deep T1:** If T1 > 35% for large-caps, the pattern is less reliable
|
|
115
|
+
6. **Expanding contractions:** If T2 > T1, it's NOT a VCP
|
|
116
|
+
|
|
117
|
+
## Position Sizing by VCP Quality
|
|
118
|
+
|
|
119
|
+
| Rating | Position Size | Risk Budget |
|
|
120
|
+
|--------|---------------|-------------|
|
|
121
|
+
| Textbook (90+) | 1.5-2x normal | Full |
|
|
122
|
+
| Strong (80-89) | 1x normal | Full |
|
|
123
|
+
| Good (70-79) | 0.75x normal | Standard |
|
|
124
|
+
| Developing (60-69) | Wait/Watch | Reduced |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# VCP Screener Calculators
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Pivot Proximity Calculator - Breakout Distance & Risk Analysis
|
|
4
|
+
|
|
5
|
+
Calculates how close the current price is to the VCP pivot (breakout) point
|
|
6
|
+
and computes the risk profile for a potential trade.
|
|
7
|
+
|
|
8
|
+
Distance-priority scoring (Minervini: do not chase >5% above pivot):
|
|
9
|
+
- 0-3% above pivot: 90 (+ volume bonus 10 = 100 BREAKOUT CONFIRMED)
|
|
10
|
+
- 3-5% above: 65 (+ volume bonus 10 = 75)
|
|
11
|
+
- 5-10% above: 50 (no volume bonus)
|
|
12
|
+
- 10-20% above: 35 (no volume bonus)
|
|
13
|
+
- >20% above: 20 (no volume bonus)
|
|
14
|
+
- 0 to -2% below: 90 (AT PIVOT)
|
|
15
|
+
- -2% to -5%: 75 (NEAR PIVOT)
|
|
16
|
+
- -5% to -8%: 60 (APPROACHING)
|
|
17
|
+
- -8% to -10%: 45 (DEVELOPING)
|
|
18
|
+
- -10% to -15%: 30 (EARLY)
|
|
19
|
+
- < -15%: 10 (FAR FROM PIVOT)
|
|
20
|
+
|
|
21
|
+
Also calculates:
|
|
22
|
+
- Stop-loss price (below last contraction low)
|
|
23
|
+
- Risk % per share (entry to stop distance)
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from typing import Dict, List, Optional
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def calculate_pivot_proximity(
|
|
30
|
+
current_price: float,
|
|
31
|
+
pivot_price: Optional[float],
|
|
32
|
+
last_contraction_low: Optional[float] = None,
|
|
33
|
+
breakout_volume: bool = False,
|
|
34
|
+
) -> Dict:
|
|
35
|
+
"""
|
|
36
|
+
Calculate proximity to pivot point and risk metrics.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
current_price: Current stock price
|
|
40
|
+
pivot_price: The pivot (breakout) price from VCP pattern
|
|
41
|
+
last_contraction_low: Low of the last contraction (for stop-loss)
|
|
42
|
+
breakout_volume: Whether current volume is 1.5x+ above average
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
Dict with score (0-100), distance_pct, stop_loss, risk_pct
|
|
46
|
+
"""
|
|
47
|
+
if not pivot_price or pivot_price <= 0:
|
|
48
|
+
return {
|
|
49
|
+
"score": 0,
|
|
50
|
+
"distance_from_pivot_pct": None,
|
|
51
|
+
"stop_loss_price": None,
|
|
52
|
+
"risk_pct": None,
|
|
53
|
+
"trade_status": "NO PIVOT",
|
|
54
|
+
"error": "No valid pivot price",
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if current_price <= 0:
|
|
58
|
+
return {
|
|
59
|
+
"score": 0,
|
|
60
|
+
"distance_from_pivot_pct": None,
|
|
61
|
+
"stop_loss_price": None,
|
|
62
|
+
"risk_pct": None,
|
|
63
|
+
"trade_status": "INVALID PRICE",
|
|
64
|
+
"error": "Invalid current price",
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# Distance from pivot (negative = below pivot)
|
|
68
|
+
distance_pct = (current_price - pivot_price) / pivot_price * 100
|
|
69
|
+
|
|
70
|
+
# Determine trade status and score (distance-priority)
|
|
71
|
+
if distance_pct > 20:
|
|
72
|
+
score = 20
|
|
73
|
+
trade_status = "OVEREXTENDED - Do not chase"
|
|
74
|
+
elif distance_pct > 10:
|
|
75
|
+
score = 35
|
|
76
|
+
trade_status = "EXTENDED - Very high chase risk"
|
|
77
|
+
elif distance_pct > 5:
|
|
78
|
+
score = 50
|
|
79
|
+
trade_status = "EXTENDED - High chase risk"
|
|
80
|
+
elif distance_pct > 3:
|
|
81
|
+
score = 65
|
|
82
|
+
trade_status = "EXTENDED - Moderate chase risk"
|
|
83
|
+
elif distance_pct > 0:
|
|
84
|
+
score = 90
|
|
85
|
+
trade_status = "ABOVE PIVOT (within 3%)"
|
|
86
|
+
elif distance_pct >= -2:
|
|
87
|
+
score = 90
|
|
88
|
+
trade_status = "AT PIVOT (within 2%)"
|
|
89
|
+
elif distance_pct >= -5:
|
|
90
|
+
score = 75
|
|
91
|
+
trade_status = "NEAR PIVOT (2-5% below)"
|
|
92
|
+
elif distance_pct >= -8:
|
|
93
|
+
score = 60
|
|
94
|
+
trade_status = "APPROACHING (5-8% below)"
|
|
95
|
+
elif distance_pct >= -10:
|
|
96
|
+
score = 45
|
|
97
|
+
trade_status = "DEVELOPING (8-10% below)"
|
|
98
|
+
elif distance_pct >= -15:
|
|
99
|
+
score = 30
|
|
100
|
+
trade_status = "EARLY (10-15% below)"
|
|
101
|
+
else:
|
|
102
|
+
score = 10
|
|
103
|
+
trade_status = "FAR FROM PIVOT (>15% below)"
|
|
104
|
+
|
|
105
|
+
# Volume confirmation bonus (only for 0-5% above pivot)
|
|
106
|
+
if breakout_volume and distance_pct > 0:
|
|
107
|
+
if distance_pct <= 3:
|
|
108
|
+
score += 10
|
|
109
|
+
trade_status = "BREAKOUT CONFIRMED"
|
|
110
|
+
elif distance_pct <= 5:
|
|
111
|
+
score += 10
|
|
112
|
+
trade_status += " (vol confirmed)"
|
|
113
|
+
|
|
114
|
+
# Calculate stop-loss and risk
|
|
115
|
+
stop_loss_price = None
|
|
116
|
+
risk_pct = None
|
|
117
|
+
|
|
118
|
+
if last_contraction_low and last_contraction_low > 0:
|
|
119
|
+
# Stop-loss is 1-2% below the last contraction low
|
|
120
|
+
stop_loss_price = round(last_contraction_low * 0.99, 2)
|
|
121
|
+
|
|
122
|
+
# Risk per share from current price to stop
|
|
123
|
+
if current_price > stop_loss_price:
|
|
124
|
+
risk_pct = round((current_price - stop_loss_price) / current_price * 100, 2)
|
|
125
|
+
else:
|
|
126
|
+
# Price already below stop level
|
|
127
|
+
risk_pct = 0
|
|
128
|
+
trade_status = "BELOW STOP LEVEL"
|
|
129
|
+
score = max(0, score - 20)
|
|
130
|
+
|
|
131
|
+
return {
|
|
132
|
+
"score": score,
|
|
133
|
+
"distance_from_pivot_pct": round(distance_pct, 2),
|
|
134
|
+
"pivot_price": round(pivot_price, 2),
|
|
135
|
+
"stop_loss_price": stop_loss_price,
|
|
136
|
+
"risk_pct": risk_pct,
|
|
137
|
+
"trade_status": trade_status,
|
|
138
|
+
"error": None,
|
|
139
|
+
}
|