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,348 @@
|
|
|
1
|
+
# Financial Modeling Prep (FMP) API Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Financial Modeling Prep provides comprehensive financial data APIs for stocks, forex, cryptocurrencies, and more. This guide focuses on endpoints used for dividend stock screening.
|
|
6
|
+
|
|
7
|
+
## API Key Setup
|
|
8
|
+
|
|
9
|
+
### Obtaining an API Key
|
|
10
|
+
|
|
11
|
+
1. Visit https://financialmodelingprep.com/developer/docs
|
|
12
|
+
2. Sign up for a free account
|
|
13
|
+
3. Navigate to Dashboard → API Keys
|
|
14
|
+
4. Copy your API key
|
|
15
|
+
|
|
16
|
+
### Free Tier Limits
|
|
17
|
+
|
|
18
|
+
- **250 requests per day**
|
|
19
|
+
- **Rate limit**: ~5 requests per second
|
|
20
|
+
- **No credit card required**
|
|
21
|
+
- Sufficient for daily/weekly screening runs
|
|
22
|
+
|
|
23
|
+
### Paid Tiers (Optional)
|
|
24
|
+
|
|
25
|
+
- **Starter ($14/month)**: 500 requests/day
|
|
26
|
+
- **Professional ($29/month)**: 1,000 requests/day
|
|
27
|
+
- **Enterprise ($99/month)**: 10,000 requests/day
|
|
28
|
+
|
|
29
|
+
## Setting API Key
|
|
30
|
+
|
|
31
|
+
### Method 1: Environment Variable (Recommended)
|
|
32
|
+
|
|
33
|
+
**Linux/macOS:**
|
|
34
|
+
```bash
|
|
35
|
+
export FMP_API_KEY=your_api_key_here
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Windows (Command Prompt):**
|
|
39
|
+
```cmd
|
|
40
|
+
set FMP_API_KEY=your_api_key_here
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Windows (PowerShell):**
|
|
44
|
+
```powershell
|
|
45
|
+
$env:FMP_API_KEY="your_api_key_here"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Persistent (add to shell profile):**
|
|
49
|
+
```bash
|
|
50
|
+
# Add to ~/.bashrc or ~/.zshrc
|
|
51
|
+
echo 'export FMP_API_KEY=your_api_key_here' >> ~/.bashrc
|
|
52
|
+
source ~/.bashrc
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Method 2: Command-Line Argument
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python3 scripts/screen_dividend_stocks.py --api-key your_api_key_here
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Key Endpoints Used
|
|
62
|
+
|
|
63
|
+
### 1. Stock Screener
|
|
64
|
+
|
|
65
|
+
**Endpoint:** `/v3/stock-screener`
|
|
66
|
+
|
|
67
|
+
**Purpose:** Initial filtering by dividend yield, P/E, P/B, market cap
|
|
68
|
+
|
|
69
|
+
**Parameters:**
|
|
70
|
+
- `dividendYieldMoreThan`: Minimum dividend yield (e.g., 3.5)
|
|
71
|
+
- `priceEarningRatioLowerThan`: Maximum P/E ratio (e.g., 20)
|
|
72
|
+
- `priceToBookRatioLowerThan`: Maximum P/B ratio (e.g., 2)
|
|
73
|
+
- `marketCapMoreThan`: Minimum market cap (e.g., 2000000000 = $2B)
|
|
74
|
+
- `exchange`: Exchanges to include (e.g., "NASDAQ,NYSE")
|
|
75
|
+
- `limit`: Max results (default: 1000)
|
|
76
|
+
|
|
77
|
+
**Example Request:**
|
|
78
|
+
```
|
|
79
|
+
https://financialmodelingprep.com/api/v3/stock-screener?
|
|
80
|
+
dividendYieldMoreThan=3.5&
|
|
81
|
+
priceEarningRatioLowerThan=20&
|
|
82
|
+
priceToBookRatioLowerThan=2&
|
|
83
|
+
marketCapMoreThan=2000000000&
|
|
84
|
+
exchange=NASDAQ,NYSE&
|
|
85
|
+
limit=1000&
|
|
86
|
+
apikey=YOUR_API_KEY
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Response Format:**
|
|
90
|
+
```json
|
|
91
|
+
[
|
|
92
|
+
{
|
|
93
|
+
"symbol": "T",
|
|
94
|
+
"companyName": "AT&T Inc.",
|
|
95
|
+
"marketCap": 150000000000,
|
|
96
|
+
"sector": "Communication Services",
|
|
97
|
+
"industry": "Telecom Services",
|
|
98
|
+
"beta": 0.65,
|
|
99
|
+
"price": 20.50,
|
|
100
|
+
"lastAnnualDividend": 1.11,
|
|
101
|
+
"volume": 35000000,
|
|
102
|
+
"exchange": "NYSE",
|
|
103
|
+
"exchangeShortName": "NYSE",
|
|
104
|
+
"country": "US",
|
|
105
|
+
"isEtf": false,
|
|
106
|
+
"isActivelyTrading": true,
|
|
107
|
+
"dividendYield": 0.0541,
|
|
108
|
+
"pe": 7.5,
|
|
109
|
+
"priceToBook": 1.2
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 2. Income Statement
|
|
115
|
+
|
|
116
|
+
**Endpoint:** `/v3/income-statement/{symbol}`
|
|
117
|
+
|
|
118
|
+
**Purpose:** Revenue, EPS, net income analysis
|
|
119
|
+
|
|
120
|
+
**Parameters:**
|
|
121
|
+
- `symbol`: Stock ticker (e.g., "AAPL")
|
|
122
|
+
- `limit`: Number of periods (e.g., 5 for 5 years)
|
|
123
|
+
- `period`: "annual" or "quarter"
|
|
124
|
+
|
|
125
|
+
**Example Request:**
|
|
126
|
+
```
|
|
127
|
+
https://financialmodelingprep.com/api/v3/income-statement/AAPL?
|
|
128
|
+
limit=5&
|
|
129
|
+
apikey=YOUR_API_KEY
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Key Fields Used:**
|
|
133
|
+
- `revenue`: Total revenue
|
|
134
|
+
- `eps`: Earnings per share
|
|
135
|
+
- `netIncome`: Net income
|
|
136
|
+
- `date`: Fiscal period end date
|
|
137
|
+
|
|
138
|
+
### 3. Balance Sheet Statement
|
|
139
|
+
|
|
140
|
+
**Endpoint:** `/v3/balance-sheet-statement/{symbol}`
|
|
141
|
+
|
|
142
|
+
**Purpose:** Debt, equity, liquidity analysis
|
|
143
|
+
|
|
144
|
+
**Parameters:**
|
|
145
|
+
- `symbol`: Stock ticker
|
|
146
|
+
- `limit`: Number of periods
|
|
147
|
+
|
|
148
|
+
**Key Fields Used:**
|
|
149
|
+
- `totalDebt`: Total debt (short-term + long-term)
|
|
150
|
+
- `totalStockholdersEquity`: Shareholders' equity
|
|
151
|
+
- `totalCurrentAssets`: Current assets
|
|
152
|
+
- `totalCurrentLiabilities`: Current liabilities
|
|
153
|
+
|
|
154
|
+
### 4. Cash Flow Statement
|
|
155
|
+
|
|
156
|
+
**Endpoint:** `/v3/cash-flow-statement/{symbol}`
|
|
157
|
+
|
|
158
|
+
**Purpose:** Free cash flow, dividends paid analysis
|
|
159
|
+
|
|
160
|
+
**Parameters:**
|
|
161
|
+
- `symbol`: Stock ticker
|
|
162
|
+
- `limit`: Number of periods
|
|
163
|
+
|
|
164
|
+
**Key Fields Used:**
|
|
165
|
+
- `operatingCashFlow`: Cash from operations
|
|
166
|
+
- `capitalExpenditure`: Capex (negative value)
|
|
167
|
+
- `dividendsPaid`: Dividends paid (negative value)
|
|
168
|
+
- `freeCashFlow`: OCF - Capex
|
|
169
|
+
|
|
170
|
+
### 5. Key Metrics
|
|
171
|
+
|
|
172
|
+
**Endpoint:** `/v3/key-metrics/{symbol}`
|
|
173
|
+
|
|
174
|
+
**Purpose:** ROE, ROA, and other quality metrics
|
|
175
|
+
|
|
176
|
+
**Parameters:**
|
|
177
|
+
- `symbol`: Stock ticker
|
|
178
|
+
- `limit`: Number of periods
|
|
179
|
+
|
|
180
|
+
**Key Fields Used:**
|
|
181
|
+
- `roe`: Return on Equity (decimal, e.g., 0.15 = 15%)
|
|
182
|
+
- `roa`: Return on Assets
|
|
183
|
+
- `roic`: Return on Invested Capital
|
|
184
|
+
- `debtToEquity`: Debt-to-equity ratio
|
|
185
|
+
- `currentRatio`: Current ratio
|
|
186
|
+
|
|
187
|
+
### 6. Historical Dividend
|
|
188
|
+
|
|
189
|
+
**Endpoint:** `/v3/historical-price-full/stock_dividend/{symbol}`
|
|
190
|
+
|
|
191
|
+
**Purpose:** Dividend history for growth rate calculation
|
|
192
|
+
|
|
193
|
+
**Example Request:**
|
|
194
|
+
```
|
|
195
|
+
https://financialmodelingprep.com/api/v3/historical-price-full/stock_dividend/AAPL?
|
|
196
|
+
apikey=YOUR_API_KEY
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Response Format:**
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"symbol": "AAPL",
|
|
203
|
+
"historical": [
|
|
204
|
+
{
|
|
205
|
+
"date": "2024-11-08",
|
|
206
|
+
"label": "November 08, 24",
|
|
207
|
+
"adjDividend": 0.25,
|
|
208
|
+
"dividend": 0.25,
|
|
209
|
+
"recordDate": "2024-11-11",
|
|
210
|
+
"paymentDate": "2024-11-14",
|
|
211
|
+
"declarationDate": "2024-10-31"
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Rate Limiting Strategy
|
|
218
|
+
|
|
219
|
+
### Built-in Protection
|
|
220
|
+
|
|
221
|
+
The screening script includes rate limiting:
|
|
222
|
+
- **0.3 second delay** between requests (~3 requests/second)
|
|
223
|
+
- **Automatic retry** on 429 (rate limit exceeded) with 60-second backoff
|
|
224
|
+
- **Timeout**: 30 seconds per request
|
|
225
|
+
|
|
226
|
+
### Managing Request Budget
|
|
227
|
+
|
|
228
|
+
For free tier (250 requests/day):
|
|
229
|
+
|
|
230
|
+
**Requests per stock analyzed:**
|
|
231
|
+
- Stock Screener: 1 request (returns 100-1000 stocks)
|
|
232
|
+
- Income Statement: 1 request per symbol
|
|
233
|
+
- Balance Sheet: 1 request per symbol
|
|
234
|
+
- Cash Flow: 1 request per symbol
|
|
235
|
+
- Key Metrics: 1 request per symbol
|
|
236
|
+
- Dividend History: 1 request per symbol
|
|
237
|
+
|
|
238
|
+
**Total: 5 requests per symbol + 1 screener request**
|
|
239
|
+
|
|
240
|
+
**Budget allocation:**
|
|
241
|
+
- Initial screener: 1 request
|
|
242
|
+
- Detailed analysis: 5 × N stocks = 5N requests
|
|
243
|
+
- **Maximum stocks per run**: (250 - 1) / 5 = ~49 stocks
|
|
244
|
+
|
|
245
|
+
**Script default**: Analyzes first 100 candidates but typically finds ~20-30 that pass all criteria
|
|
246
|
+
|
|
247
|
+
### Best Practices
|
|
248
|
+
|
|
249
|
+
1. **Run during off-peak hours**: Lower chance of rate limits
|
|
250
|
+
2. **Space out runs**: Once daily or weekly, not multiple times per hour
|
|
251
|
+
3. **Cache results**: Save JSON output and analyze locally
|
|
252
|
+
4. **Upgrade if needed**: If screening large universes frequently, consider paid tier
|
|
253
|
+
|
|
254
|
+
## Error Handling
|
|
255
|
+
|
|
256
|
+
### Common Errors
|
|
257
|
+
|
|
258
|
+
**1. Invalid API Key**
|
|
259
|
+
```json
|
|
260
|
+
{
|
|
261
|
+
"Error Message": "Invalid API KEY. Please retry or visit our documentation."
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
**Solution**: Check API key, verify it's active in FMP dashboard
|
|
265
|
+
|
|
266
|
+
**2. Rate Limit Exceeded (429)**
|
|
267
|
+
```json
|
|
268
|
+
{
|
|
269
|
+
"Error Message": "You have exceeded the rate limit. Please wait."
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
**Solution**: Script automatically retries after 60 seconds
|
|
273
|
+
|
|
274
|
+
**3. Symbol Not Found**
|
|
275
|
+
```json
|
|
276
|
+
{
|
|
277
|
+
"Error Message": "Invalid ticker symbol"
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
**Solution**: Script skips symbol and continues (expected for delisted/invalid tickers)
|
|
281
|
+
|
|
282
|
+
**4. Insufficient Data**
|
|
283
|
+
- Empty array returned for financial statements
|
|
284
|
+
**Solution**: Script skips symbol (common for newly listed stocks or incomplete data)
|
|
285
|
+
|
|
286
|
+
### Debugging
|
|
287
|
+
|
|
288
|
+
**Check request count:**
|
|
289
|
+
```bash
|
|
290
|
+
# Count API calls in script output
|
|
291
|
+
python3 scripts/screen_dividend_stocks.py 2>&1 | grep "Analyzing" | wc -l
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Verbose mode (add to script if needed):**
|
|
295
|
+
```python
|
|
296
|
+
import logging
|
|
297
|
+
logging.basicConfig(level=logging.DEBUG)
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## Data Quality Considerations
|
|
301
|
+
|
|
302
|
+
### Data Freshness
|
|
303
|
+
|
|
304
|
+
- **Annual statements**: Updated after fiscal year end (delays possible)
|
|
305
|
+
- **Quarterly data**: Available ~1-2 months after quarter end
|
|
306
|
+
- **Real-time prices**: Updated during market hours
|
|
307
|
+
- **Dividend history**: Updated after declaration/payment
|
|
308
|
+
|
|
309
|
+
### Data Gaps
|
|
310
|
+
|
|
311
|
+
Some stocks may have:
|
|
312
|
+
- **Incomplete history**: < 4 years of data (newly public companies)
|
|
313
|
+
- **Missing dividends**: Not all dividend-paying stocks report via API
|
|
314
|
+
- **Inconsistent metrics**: Different accounting standards, restatements
|
|
315
|
+
|
|
316
|
+
**Script behavior**: Skips stocks with insufficient data (requires 4+ years)
|
|
317
|
+
|
|
318
|
+
### Data Accuracy
|
|
319
|
+
|
|
320
|
+
FMP sources data from:
|
|
321
|
+
- SEC EDGAR filings (US companies)
|
|
322
|
+
- Company investor relations
|
|
323
|
+
- Exchange data feeds
|
|
324
|
+
|
|
325
|
+
**Note**: Always verify critical investment decisions with company filings (10-K, 10-Q)
|
|
326
|
+
|
|
327
|
+
## API Documentation
|
|
328
|
+
|
|
329
|
+
**Official Docs**: https://financialmodelingprep.com/developer/docs
|
|
330
|
+
|
|
331
|
+
**Key Sections:**
|
|
332
|
+
- Stock Fundamentals API
|
|
333
|
+
- Stock Screener API
|
|
334
|
+
- Historical Dividend API
|
|
335
|
+
- Ratios API
|
|
336
|
+
|
|
337
|
+
**Support**: support@financialmodelingprep.com
|
|
338
|
+
|
|
339
|
+
## Alternative Data Sources
|
|
340
|
+
|
|
341
|
+
If FMP limits are restrictive:
|
|
342
|
+
|
|
343
|
+
1. **Alpha Vantage**: Free tier, 500 requests/day
|
|
344
|
+
2. **Yahoo Finance (yfinance)**: Free, unlimited (but less reliable)
|
|
345
|
+
3. **Quandl/Nasdaq Data Link**: Free tier available
|
|
346
|
+
4. **IEX Cloud**: Free tier, 50k messages/month
|
|
347
|
+
|
|
348
|
+
**Note**: Alternative sources may require script modifications for different data formats.
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
# Value Dividend Stock Screening Methodology
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This screening methodology identifies high-quality dividend stocks that combine:
|
|
6
|
+
- **Value characteristics**: Reasonable valuations (low P/E, P/B)
|
|
7
|
+
- **Income generation**: Attractive dividend yields (>=3.5%)
|
|
8
|
+
- **Growth profile**: Consistent dividend, revenue, and EPS growth
|
|
9
|
+
- **Quality metrics**: Strong profitability, financial health, and dividend sustainability
|
|
10
|
+
|
|
11
|
+
## Screening Criteria
|
|
12
|
+
|
|
13
|
+
### Phase 1: Initial Quantitative Filters
|
|
14
|
+
|
|
15
|
+
#### 1. Dividend Yield >= 3.5%
|
|
16
|
+
**Rationale**: Provides meaningful income above typical market yields (S&P 500 average: ~1.5-2%)
|
|
17
|
+
|
|
18
|
+
**Calculation**:
|
|
19
|
+
```
|
|
20
|
+
Dividend Yield = (Annual Dividends per Share / Current Stock Price) × 100
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Threshold Logic**:
|
|
24
|
+
- 3.5%+ provides attractive income
|
|
25
|
+
- Not so high as to signal dividend risk (>8% often unsustainable)
|
|
26
|
+
- Balances income and growth potential
|
|
27
|
+
|
|
28
|
+
#### 2. P/E Ratio <= 20
|
|
29
|
+
**Rationale**: Identifies stocks trading at reasonable multiples relative to earnings
|
|
30
|
+
|
|
31
|
+
**Calculation**:
|
|
32
|
+
```
|
|
33
|
+
P/E Ratio = Market Price per Share / Earnings per Share (TTM)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Threshold Logic**:
|
|
37
|
+
- S&P 500 historical average: ~15-18x
|
|
38
|
+
- P/E <= 20 indicates value territory
|
|
39
|
+
- Excludes overvalued growth stocks
|
|
40
|
+
- Focuses on mature, profitable companies
|
|
41
|
+
|
|
42
|
+
#### 3. P/B Ratio <= 2.0
|
|
43
|
+
**Rationale**: Ensures stock price is reasonable relative to book value
|
|
44
|
+
|
|
45
|
+
**Calculation**:
|
|
46
|
+
```
|
|
47
|
+
P/B Ratio = Market Price per Share / Book Value per Share
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Threshold Logic**:
|
|
51
|
+
- P/B <= 2.0 suggests reasonable valuation
|
|
52
|
+
- Avoids paying excessive premium over net assets
|
|
53
|
+
- Particularly relevant for asset-heavy businesses
|
|
54
|
+
|
|
55
|
+
### Phase 2: Growth Quality Filters
|
|
56
|
+
|
|
57
|
+
#### 4. Dividend Growth: 3-Year CAGR >= 5%
|
|
58
|
+
**Rationale**: Identifies companies with consistent dividend-raising track record
|
|
59
|
+
|
|
60
|
+
**Calculation**:
|
|
61
|
+
```
|
|
62
|
+
Dividend CAGR = [(End Dividend / Start Dividend)^(1/3) - 1] × 100
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Threshold Logic**:
|
|
66
|
+
- 5% annual growth compounds meaningfully over time
|
|
67
|
+
- Demonstrates management confidence in cash flows
|
|
68
|
+
- Protects against inflation (long-term average: 2-3%)
|
|
69
|
+
- Signals business health and shareholder commitment
|
|
70
|
+
|
|
71
|
+
**Consistency Check**:
|
|
72
|
+
- No dividend cuts in the period
|
|
73
|
+
- Allows one year of flat dividends (economic cycles)
|
|
74
|
+
- Cuts signal financial stress or strategy changes
|
|
75
|
+
|
|
76
|
+
#### 5. Revenue Growth: Positive 3-Year Trend
|
|
77
|
+
**Rationale**: Confirms top-line growth supports dividend sustainability
|
|
78
|
+
|
|
79
|
+
**Evaluation**:
|
|
80
|
+
- Revenue in Year 3 > Revenue in Year 1
|
|
81
|
+
- Allows one year of decline (cyclical businesses, one-time events)
|
|
82
|
+
- Overall upward trajectory required
|
|
83
|
+
|
|
84
|
+
**Why Not a Fixed %**:
|
|
85
|
+
- Different industries have different growth rates
|
|
86
|
+
- Mature dividend stocks may have modest but stable growth
|
|
87
|
+
- Focus is on **trend direction** rather than absolute rate
|
|
88
|
+
|
|
89
|
+
#### 6. EPS Growth: Positive 3-Year Trend
|
|
90
|
+
**Rationale**: Ensures earnings power is expanding, not eroding
|
|
91
|
+
|
|
92
|
+
**Evaluation**:
|
|
93
|
+
- EPS in Year 3 > EPS in Year 1
|
|
94
|
+
- Allows one year of decline
|
|
95
|
+
- Overall upward trajectory required
|
|
96
|
+
|
|
97
|
+
**Significance**:
|
|
98
|
+
- Earnings fund dividends
|
|
99
|
+
- EPS growth = potential for future dividend increases
|
|
100
|
+
- Distinguishes quality companies from dividend traps
|
|
101
|
+
|
|
102
|
+
### Phase 3: Quality & Sustainability Analysis
|
|
103
|
+
|
|
104
|
+
#### 7. Dividend Sustainability Metrics
|
|
105
|
+
|
|
106
|
+
**A. Payout Ratio**
|
|
107
|
+
```
|
|
108
|
+
Payout Ratio = (Dividends Paid / Net Income) × 100
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Healthy Range**: 30-70%
|
|
112
|
+
- < 30%: Conservative, room for growth
|
|
113
|
+
- 30-70%: Balanced, sustainable
|
|
114
|
+
- > 80%: Caution, limited flexibility
|
|
115
|
+
|
|
116
|
+
**B. Free Cash Flow Payout Ratio**
|
|
117
|
+
```
|
|
118
|
+
FCF Payout Ratio = (Dividends Paid / Free Cash Flow) × 100
|
|
119
|
+
where FCF = Operating Cash Flow - Capital Expenditures
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Healthy Range**: < 100%
|
|
123
|
+
- FCF is the true source of sustainable dividends
|
|
124
|
+
- < 100%: Dividends covered by actual cash generation
|
|
125
|
+
- > 100%: Unsustainable, funded by debt or asset sales
|
|
126
|
+
|
|
127
|
+
**Sustainability Flag**: ✅ if Payout Ratio < 80% AND FCF Payout Ratio < 100%
|
|
128
|
+
|
|
129
|
+
#### 8. Financial Health Metrics
|
|
130
|
+
|
|
131
|
+
**A. Debt-to-Equity Ratio**
|
|
132
|
+
```
|
|
133
|
+
D/E Ratio = Total Debt / Shareholders' Equity
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Healthy Range**: < 2.0
|
|
137
|
+
- Lower is generally better
|
|
138
|
+
- Varies by industry (utilities typically higher)
|
|
139
|
+
- < 2.0: Reasonable leverage, not overleveraged
|
|
140
|
+
|
|
141
|
+
**B. Current Ratio**
|
|
142
|
+
```
|
|
143
|
+
Current Ratio = Current Assets / Current Liabilities
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Healthy Range**: > 1.0 (ideally > 1.5)
|
|
147
|
+
- > 1.0: Can cover short-term obligations
|
|
148
|
+
- > 1.5: Strong liquidity cushion
|
|
149
|
+
- < 1.0: Liquidity risk
|
|
150
|
+
|
|
151
|
+
**Health Flag**: ✅ if D/E < 2.0 AND Current Ratio > 1.0
|
|
152
|
+
|
|
153
|
+
#### 9. Quality Score (0-100)
|
|
154
|
+
|
|
155
|
+
**Components**:
|
|
156
|
+
|
|
157
|
+
**A. Return on Equity (ROE)** - Max 50 points
|
|
158
|
+
```
|
|
159
|
+
ROE = Net Income / Shareholders' Equity
|
|
160
|
+
|
|
161
|
+
Points = min((ROE% / 20%) × 50, 50)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
- 20%+ ROE = 50 points (excellent capital efficiency)
|
|
165
|
+
- 10% ROE = 25 points (average)
|
|
166
|
+
- < 5% ROE = poor capital returns
|
|
167
|
+
|
|
168
|
+
**B. Net Profit Margin** - Max 50 points
|
|
169
|
+
```
|
|
170
|
+
Profit Margin = (Net Income / Revenue) × 100
|
|
171
|
+
|
|
172
|
+
Points = min((Margin% / 15%) × 50, 50)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
- 15%+ margin = 50 points (highly profitable)
|
|
176
|
+
- 7.5% margin = 25 points (average)
|
|
177
|
+
- < 3% margin = low profitability
|
|
178
|
+
|
|
179
|
+
**Quality Score Interpretation**:
|
|
180
|
+
- 80-100: Excellent quality (high profitability, efficiency)
|
|
181
|
+
- 60-79: Good quality
|
|
182
|
+
- 40-59: Average quality
|
|
183
|
+
- < 40: Below average quality
|
|
184
|
+
|
|
185
|
+
## Composite Scoring System
|
|
186
|
+
|
|
187
|
+
### Purpose
|
|
188
|
+
Rank stocks by overall attractiveness, balancing value, growth, and quality.
|
|
189
|
+
|
|
190
|
+
### Score Components (Total: 100 points)
|
|
191
|
+
|
|
192
|
+
1. **Dividend Growth** (Max 20 points)
|
|
193
|
+
- 10%+ CAGR = 20 points
|
|
194
|
+
- 5% CAGR = 10 points
|
|
195
|
+
- Linear scaling
|
|
196
|
+
|
|
197
|
+
2. **Revenue Growth** (Max 15 points)
|
|
198
|
+
- 10%+ CAGR = 15 points
|
|
199
|
+
- 5% CAGR = 7.5 points
|
|
200
|
+
- Linear scaling
|
|
201
|
+
|
|
202
|
+
3. **EPS Growth** (Max 15 points)
|
|
203
|
+
- 15%+ CAGR = 15 points
|
|
204
|
+
- 7.5% CAGR = 7.5 points
|
|
205
|
+
- Linear scaling
|
|
206
|
+
|
|
207
|
+
4. **Dividend Sustainability** (10 points)
|
|
208
|
+
- Pass (sustainable) = 10 points
|
|
209
|
+
- Fail = 0 points
|
|
210
|
+
|
|
211
|
+
5. **Financial Health** (10 points)
|
|
212
|
+
- Pass (healthy) = 10 points
|
|
213
|
+
- Fail = 0 points
|
|
214
|
+
|
|
215
|
+
6. **Quality Score** (Max 30 points)
|
|
216
|
+
- Quality Score × 0.3
|
|
217
|
+
- 100 quality = 30 points
|
|
218
|
+
- 50 quality = 15 points
|
|
219
|
+
|
|
220
|
+
### Interpretation
|
|
221
|
+
|
|
222
|
+
- **80-100**: Exceptional (high growth, quality, sustainability)
|
|
223
|
+
- **60-79**: Strong (solid all-around profile)
|
|
224
|
+
- **40-59**: Good (meets criteria, some trade-offs)
|
|
225
|
+
- **20-39**: Acceptable (passes filters but lower quality)
|
|
226
|
+
- **< 20**: Marginal (barely meets criteria)
|
|
227
|
+
|
|
228
|
+
## Investment Philosophy
|
|
229
|
+
|
|
230
|
+
### Why This Approach Works
|
|
231
|
+
|
|
232
|
+
1. **Value + Growth + Quality**: Combines three proven factor premiums
|
|
233
|
+
2. **Dividend Focus**: Signals management discipline and cash generation
|
|
234
|
+
3. **Sustainability Screen**: Avoids dividend traps and value traps
|
|
235
|
+
4. **Growth Requirements**: Ensures businesses are healthy, not declining
|
|
236
|
+
5. **Quality Filters**: Identifies durable competitive advantages
|
|
237
|
+
|
|
238
|
+
### What This Strategy Avoids
|
|
239
|
+
|
|
240
|
+
1. **Dividend Traps**: High yields from struggling companies (growth filters catch these)
|
|
241
|
+
2. **Value Traps**: Cheap stocks that stay cheap (quality metrics catch these)
|
|
242
|
+
3. **Overvaluation**: Growth stocks trading at expensive multiples (P/E, P/B filters)
|
|
243
|
+
4. **Financial Risk**: Overleveraged or illiquid companies (health metrics)
|
|
244
|
+
|
|
245
|
+
### Ideal Candidate Profile
|
|
246
|
+
|
|
247
|
+
A stock scoring highly in this screen typically:
|
|
248
|
+
- Operates in stable, mature industry
|
|
249
|
+
- Has sustainable competitive advantage (moat)
|
|
250
|
+
- Generates consistent free cash flow
|
|
251
|
+
- Committed to shareholder returns (dividends)
|
|
252
|
+
- Trades at reasonable valuation (not hyped)
|
|
253
|
+
- Growing modestly but consistently
|
|
254
|
+
- Strong balance sheet and profitability
|
|
255
|
+
|
|
256
|
+
Examples: Dividend Aristocrats, quality REITs (if included), stable utilities, consumer staples leaders
|
|
257
|
+
|
|
258
|
+
## Usage Notes
|
|
259
|
+
|
|
260
|
+
### Limitations
|
|
261
|
+
|
|
262
|
+
1. **Market Cap Bias**: Typically finds large/mid-cap stocks (small-caps less likely to meet all criteria)
|
|
263
|
+
2. **Sector Bias**: May overweight certain sectors (utilities, consumer staples, REITs)
|
|
264
|
+
3. **Excludes High Growth**: Tech and growth stocks generally won't qualify (by design)
|
|
265
|
+
4. **Historical Performance**: Past growth doesn't guarantee future results
|
|
266
|
+
5. **Economic Sensitivity**: Some qualified stocks may be cyclical
|
|
267
|
+
|
|
268
|
+
### Best Practices
|
|
269
|
+
|
|
270
|
+
1. **Diversification**: Don't concentrate in top 5; spread across top 20
|
|
271
|
+
2. **Sector Balance**: Monitor sector exposure, avoid overconcentration
|
|
272
|
+
3. **Rescreen Regularly**: Quarterly or semi-annually; fundamentals change
|
|
273
|
+
4. **Valuation Check**: Just because it passed doesn't mean buy at any price
|
|
274
|
+
5. **Dividend Safety**: Monitor payout ratios and cash flows quarterly
|
|
275
|
+
6. **Hold for Long Term**: This is a quality dividend growth strategy, not trading
|
|
276
|
+
|
|
277
|
+
### When to Sell
|
|
278
|
+
|
|
279
|
+
1. **Dividend Cut**: Immediate red flag; review business health
|
|
280
|
+
2. **Deteriorating Fundamentals**: Revenue/EPS declining multiple quarters
|
|
281
|
+
3. **Payout Ratio > 100%**: Dividend unsustainable
|
|
282
|
+
4. **Debt Spike**: Leverage increasing significantly without clear reason
|
|
283
|
+
5. **Better Opportunities**: Capital allocation to higher-scoring stocks
|
|
284
|
+
6. **Valuation Extreme**: Stock becomes significantly overvalued (P/E > 30, for example)
|
|
285
|
+
|
|
286
|
+
## Historical Context
|
|
287
|
+
|
|
288
|
+
### Why 3.5% Yield Threshold?
|
|
289
|
+
|
|
290
|
+
- **US 10-Year Treasury**: Historically 2-4%
|
|
291
|
+
- **S&P 500 Dividend Yield**: 1.5-2%
|
|
292
|
+
- **Equity Risk Premium**: 3.5% provides ~1.5-2% premium over Treasuries
|
|
293
|
+
- **Tax Efficiency**: Qualified dividends taxed favorably vs. bonds
|
|
294
|
+
|
|
295
|
+
### Why P/E <= 20?
|
|
296
|
+
|
|
297
|
+
- **S&P 500 Historical Average**: ~15-18x
|
|
298
|
+
- **Fair Value Range**: 15-20x for mature, stable businesses
|
|
299
|
+
- **Margin of Safety**: Leaves room for multiple compression
|
|
300
|
+
- **Cyclically Adjusted**: Not overpaying at peak earnings
|
|
301
|
+
|
|
302
|
+
### Why 5% Dividend CAGR?
|
|
303
|
+
|
|
304
|
+
- **Inflation Protection**: Beats long-term inflation (2-3%)
|
|
305
|
+
- **Real Income Growth**: Provides rising purchasing power
|
|
306
|
+
- **Achievable**: Sustainable for quality companies
|
|
307
|
+
- **Compound Power**: 5% doubles in 14.4 years
|
|
308
|
+
|
|
309
|
+
## References
|
|
310
|
+
|
|
311
|
+
- Benjamin Graham: "The Intelligent Investor" (value investing principles)
|
|
312
|
+
- Jeremy Siegel: "The Future for Investors" (dividend growth research)
|
|
313
|
+
- CFA Institute: Equity Valuation standards
|
|
314
|
+
- S&P Dow Jones Indices: Dividend Aristocrats methodology
|
|
315
|
+
- Morningstar: Dividend Sustainability Research
|