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,707 @@
|
|
|
1
|
+
# FMP API Endpoints - CANSLIM Screener Phase 1 MVP
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document specifies the Financial Modeling Prep (FMP) API endpoints required for the CANSLIM screener Phase 1 MVP implementation (C, A, N, M components).
|
|
6
|
+
|
|
7
|
+
**Base URL**: `https://financialmodelingprep.com/api/v3`
|
|
8
|
+
|
|
9
|
+
**Authentication**: All requests require `apikey` parameter
|
|
10
|
+
|
|
11
|
+
**Rate Limiting**:
|
|
12
|
+
- Free tier: 250 requests/day
|
|
13
|
+
- Recommended delay: 0.3 seconds between requests (200 requests/minute max)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## C Component - Current Quarterly Earnings
|
|
18
|
+
|
|
19
|
+
### Endpoint: Income Statement (Quarterly)
|
|
20
|
+
|
|
21
|
+
**URL**: `/income-statement/{symbol}?period=quarter&limit=8`
|
|
22
|
+
|
|
23
|
+
**Method**: GET
|
|
24
|
+
|
|
25
|
+
**Parameters**:
|
|
26
|
+
- `symbol`: Stock ticker (e.g., "AAPL")
|
|
27
|
+
- `period`: "quarter" (quarterly data)
|
|
28
|
+
- `limit`: 8 (fetch last 8 quarters = 2 years)
|
|
29
|
+
- `apikey`: Your FMP API key
|
|
30
|
+
|
|
31
|
+
**Example Request**:
|
|
32
|
+
```bash
|
|
33
|
+
curl "https://financialmodelingprep.com/api/v3/income-statement/AAPL?period=quarter&limit=8&apikey=YOUR_KEY"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Response Fields Used**:
|
|
37
|
+
```json
|
|
38
|
+
[
|
|
39
|
+
{
|
|
40
|
+
"date": "2023-09-30", # Quarter end date
|
|
41
|
+
"symbol": "AAPL",
|
|
42
|
+
"reportedCurrency": "USD",
|
|
43
|
+
"fillingDate": "2023-11-02",
|
|
44
|
+
"eps": 1.46, # Diluted EPS ← KEY
|
|
45
|
+
"epsdiلuted": 1.46, # Alternative field
|
|
46
|
+
"revenue": 89498000000, # Total revenue ← KEY
|
|
47
|
+
"grossProfit": 41104000000,
|
|
48
|
+
"operatingIncome": 26982000000,
|
|
49
|
+
"netIncome": 22956000000
|
|
50
|
+
},
|
|
51
|
+
# ... 7 more quarters
|
|
52
|
+
]
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Usage**:
|
|
56
|
+
- Compare `eps` from most recent quarter to quarter 4 positions back (YoY comparison)
|
|
57
|
+
- Compare `revenue` same way
|
|
58
|
+
- Calculate YoY growth percentage
|
|
59
|
+
|
|
60
|
+
**API Calls**: 1 per stock
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## A Component - Annual EPS Growth
|
|
65
|
+
|
|
66
|
+
### Endpoint: Income Statement (Annual)
|
|
67
|
+
|
|
68
|
+
**URL**: `/income-statement/{symbol}?period=annual&limit=5`
|
|
69
|
+
|
|
70
|
+
**Method**: GET
|
|
71
|
+
|
|
72
|
+
**Parameters**:
|
|
73
|
+
- `symbol`: Stock ticker
|
|
74
|
+
- `period`: "annual" (annual data)
|
|
75
|
+
- `limit`: 5 (fetch last 5 years for 4-year CAGR calculation)
|
|
76
|
+
- `apikey`: Your FMP API key
|
|
77
|
+
|
|
78
|
+
**Example Request**:
|
|
79
|
+
```bash
|
|
80
|
+
curl "https://financialmodelingprep.com/api/v3/income-statement/AAPL?period=annual&limit=5&apikey=YOUR_KEY"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Response Fields Used**:
|
|
84
|
+
```json
|
|
85
|
+
[
|
|
86
|
+
{
|
|
87
|
+
"date": "2023-09-30", # Fiscal year end
|
|
88
|
+
"symbol": "AAPL",
|
|
89
|
+
"eps": 6.13, # Annual diluted EPS ← KEY
|
|
90
|
+
"revenue": 383285000000, # Annual revenue ← KEY
|
|
91
|
+
"netIncome": 96995000000
|
|
92
|
+
},
|
|
93
|
+
# ... 4 more years
|
|
94
|
+
]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Usage**:
|
|
98
|
+
- Use 4 most recent years to calculate 3-year CAGR
|
|
99
|
+
- CAGR = ((EPS_current / EPS_3years_ago) ^ (1/3)) - 1
|
|
100
|
+
- Check for stability (no down years)
|
|
101
|
+
- Validate with revenue CAGR
|
|
102
|
+
|
|
103
|
+
**API Calls**: 1 per stock
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## N Component - Newness / New Highs
|
|
108
|
+
|
|
109
|
+
### Endpoint 1: Historical Prices (Daily)
|
|
110
|
+
|
|
111
|
+
**URL**: `/historical-price-full/{symbol}?timeseries=365`
|
|
112
|
+
|
|
113
|
+
**Method**: GET
|
|
114
|
+
|
|
115
|
+
**Parameters**:
|
|
116
|
+
- `symbol`: Stock ticker
|
|
117
|
+
- `timeseries`: 365 (fetch last 365 days)
|
|
118
|
+
- `apikey`: Your FMP API key
|
|
119
|
+
|
|
120
|
+
**Example Request**:
|
|
121
|
+
```bash
|
|
122
|
+
curl "https://financialmodelingprep.com/api/v3/historical-price-full/AAPL?timeseries=365&apikey=YOUR_KEY"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Response Fields Used**:
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"symbol": "AAPL",
|
|
129
|
+
"historical": [
|
|
130
|
+
{
|
|
131
|
+
"date": "2024-01-10",
|
|
132
|
+
"open": 185.16,
|
|
133
|
+
"high": 186.40, # Daily high ← KEY
|
|
134
|
+
"low": 184.00, # Daily low ← KEY
|
|
135
|
+
"close": 185.92, # Close price ← KEY
|
|
136
|
+
"volume": 50123456 # Daily volume ← KEY
|
|
137
|
+
},
|
|
138
|
+
# ... 364 more days
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Usage**:
|
|
144
|
+
- Calculate 52-week high: `max(historical[0:252].high)`
|
|
145
|
+
- Calculate 52-week low: `min(historical[0:252].low)`
|
|
146
|
+
- Current price: `historical[0].close`
|
|
147
|
+
- Distance from high: `(current / 52wk_high - 1) * 100`
|
|
148
|
+
- Detect breakout: Check if recent high >= 52wk_high with elevated volume
|
|
149
|
+
|
|
150
|
+
**API Calls**: 1 per stock
|
|
151
|
+
|
|
152
|
+
### Endpoint 2: Quote (Real-Time Price)
|
|
153
|
+
|
|
154
|
+
**URL**: `/quote/{symbol}`
|
|
155
|
+
|
|
156
|
+
**Method**: GET
|
|
157
|
+
|
|
158
|
+
**Parameters**:
|
|
159
|
+
- `symbol`: Stock ticker (can be comma-separated for batch)
|
|
160
|
+
- `apikey`: Your FMP API key
|
|
161
|
+
|
|
162
|
+
**Example Request**:
|
|
163
|
+
```bash
|
|
164
|
+
curl "https://financialmodelingprep.com/api/v3/quote/AAPL?apikey=YOUR_KEY"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Response Fields Used**:
|
|
168
|
+
```json
|
|
169
|
+
[
|
|
170
|
+
{
|
|
171
|
+
"symbol": "AAPL",
|
|
172
|
+
"name": "Apple Inc.",
|
|
173
|
+
"price": 185.92, # Current price ← KEY
|
|
174
|
+
"changesPercentage": 1.23,
|
|
175
|
+
"change": 2.25,
|
|
176
|
+
"dayLow": 184.00,
|
|
177
|
+
"dayHigh": 186.40,
|
|
178
|
+
"yearHigh": 198.23, # 52-week high ← KEY
|
|
179
|
+
"yearLow": 164.08, # 52-week low ← KEY
|
|
180
|
+
"marketCap": 2913000000000,
|
|
181
|
+
"volume": 50123456,
|
|
182
|
+
"avgVolume": 48000000, # Average volume ← KEY
|
|
183
|
+
"exchange": "NASDAQ",
|
|
184
|
+
"sector": "Technology"
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Usage**:
|
|
190
|
+
- Alternative to historical prices for 52-week high/low
|
|
191
|
+
- Faster (1 call vs historical prices) but less granular
|
|
192
|
+
- Use for quick screening; historical prices for detailed analysis
|
|
193
|
+
|
|
194
|
+
**API Calls**: 1 per stock (or batch multiple)
|
|
195
|
+
|
|
196
|
+
### Endpoint 3: Stock News (Optional - New Product Detection)
|
|
197
|
+
|
|
198
|
+
**URL**: `/stock_news?tickers={symbol}&limit=50`
|
|
199
|
+
|
|
200
|
+
**Method**: GET
|
|
201
|
+
|
|
202
|
+
**Parameters**:
|
|
203
|
+
- `tickers`: Stock ticker (comma-separated for multiple)
|
|
204
|
+
- `limit`: 50 (recent news articles)
|
|
205
|
+
- `apikey`: Your FMP API key
|
|
206
|
+
|
|
207
|
+
**Example Request**:
|
|
208
|
+
```bash
|
|
209
|
+
curl "https://financialmodelingprep.com/api/v3/stock_news?tickers=AAPL&limit=50&apikey=YOUR_KEY"
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Response Fields Used**:
|
|
213
|
+
```json
|
|
214
|
+
[
|
|
215
|
+
{
|
|
216
|
+
"symbol": "AAPL",
|
|
217
|
+
"publishedDate": "2024-01-10T14:30:00.000Z",
|
|
218
|
+
"title": "Apple Launches Revolutionary AI Chip", # ← KEY (keyword search)
|
|
219
|
+
"image": "https://...",
|
|
220
|
+
"site": "Reuters",
|
|
221
|
+
"text": "Apple Inc announced today...",
|
|
222
|
+
"url": "https://..."
|
|
223
|
+
},
|
|
224
|
+
# ... 49 more articles
|
|
225
|
+
]
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Usage**:
|
|
229
|
+
- Search `title` field for keywords:
|
|
230
|
+
- High impact: "FDA approval", "patent granted", "breakthrough"
|
|
231
|
+
- Moderate: "new product", "product launch", "acquisition"
|
|
232
|
+
- Bonus points for N component if catalyst detected
|
|
233
|
+
- **Optional**: Can skip to reduce API calls (N component primarily uses price action)
|
|
234
|
+
|
|
235
|
+
**API Calls**: 1 per stock (optional, can be skipped to save quota)
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## M Component - Market Direction
|
|
240
|
+
|
|
241
|
+
### Endpoint 1: Quote (Major Indices)
|
|
242
|
+
|
|
243
|
+
**URL**: `/quote/^GSPC,^IXIC,^DJI`
|
|
244
|
+
|
|
245
|
+
**Method**: GET
|
|
246
|
+
|
|
247
|
+
**Parameters**:
|
|
248
|
+
- Symbol: `^GSPC` (S&P 500), `^IXIC` (Nasdaq), `^DJI` (Dow Jones)
|
|
249
|
+
- Can batch multiple indices in single call
|
|
250
|
+
- `apikey`: Your FMP API key
|
|
251
|
+
|
|
252
|
+
**Example Request**:
|
|
253
|
+
```bash
|
|
254
|
+
curl "https://financialmodelingprep.com/api/v3/quote/%5EGSPC,%5EIXIC,%5EDJI?apikey=YOUR_KEY"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Response Fields Used**:
|
|
258
|
+
```json
|
|
259
|
+
[
|
|
260
|
+
{
|
|
261
|
+
"symbol": "^GSPC",
|
|
262
|
+
"name": "S&P 500",
|
|
263
|
+
"price": 4783.45, # Current level ← KEY
|
|
264
|
+
"changesPercentage": 0.85,
|
|
265
|
+
"change": 40.25,
|
|
266
|
+
"dayLow": 4750.20,
|
|
267
|
+
"dayHigh": 4790.10,
|
|
268
|
+
"yearHigh": 4818.62,
|
|
269
|
+
"yearLow": 4103.78,
|
|
270
|
+
"marketCap": null,
|
|
271
|
+
"volume": null,
|
|
272
|
+
"avgVolume": null
|
|
273
|
+
},
|
|
274
|
+
# IXIC, DJI...
|
|
275
|
+
]
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Usage**:
|
|
279
|
+
- Get current S&P 500 price for trend analysis
|
|
280
|
+
- Compare to 50-day EMA (from separate call or calculated locally)
|
|
281
|
+
|
|
282
|
+
**API Calls**: 1 (batch call for all indices)
|
|
283
|
+
|
|
284
|
+
### Endpoint 2: Historical Prices (S&P 500 for EMA Calculation)
|
|
285
|
+
|
|
286
|
+
**URL**: `/historical-price-full/^GSPC?timeseries=60`
|
|
287
|
+
|
|
288
|
+
**Method**: GET
|
|
289
|
+
|
|
290
|
+
**Parameters**:
|
|
291
|
+
- Symbol: `^GSPC` (S&P 500)
|
|
292
|
+
- `timeseries`: 60 (fetch 60 days for 50-day EMA calculation)
|
|
293
|
+
- `apikey`: Your FMP API key
|
|
294
|
+
|
|
295
|
+
**Example Request**:
|
|
296
|
+
```bash
|
|
297
|
+
curl "https://financialmodelingprep.com/api/v3/historical-price-full/%5EGSPC?timeseries=60&apikey=YOUR_KEY"
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Response Fields Used**:
|
|
301
|
+
```json
|
|
302
|
+
{
|
|
303
|
+
"symbol": "^GSPC",
|
|
304
|
+
"historical": [
|
|
305
|
+
{
|
|
306
|
+
"date": "2024-01-10",
|
|
307
|
+
"close": 4783.45 # ← KEY (for EMA calculation)
|
|
308
|
+
},
|
|
309
|
+
# ... 59 more days
|
|
310
|
+
]
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**Usage**:
|
|
315
|
+
- Calculate 50-day EMA from closing prices
|
|
316
|
+
- EMA formula: `EMA_today = (Price_today * k) + (EMA_yesterday * (1 - k))` where `k = 2/(50+1)`
|
|
317
|
+
- Alternative: Use simple moving average (SMA) for simplicity
|
|
318
|
+
|
|
319
|
+
**API Calls**: 1 (reused for all stocks)
|
|
320
|
+
|
|
321
|
+
### Endpoint 3: VIX (Fear Gauge)
|
|
322
|
+
|
|
323
|
+
**URL**: `/quote/^VIX`
|
|
324
|
+
|
|
325
|
+
**Method**: GET
|
|
326
|
+
|
|
327
|
+
**Parameters**:
|
|
328
|
+
- Symbol: `^VIX` (CBOE Volatility Index)
|
|
329
|
+
- `apikey`: Your FMP API key
|
|
330
|
+
|
|
331
|
+
**Example Request**:
|
|
332
|
+
```bash
|
|
333
|
+
curl "https://financialmodelingprep.com/api/v3/quote/%5EVIX?apikey=YOUR_KEY"
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**Response Fields Used**:
|
|
337
|
+
```json
|
|
338
|
+
[
|
|
339
|
+
{
|
|
340
|
+
"symbol": "^VIX",
|
|
341
|
+
"name": "CBOE Volatility Index",
|
|
342
|
+
"price": 13.24, # Current VIX level ← KEY
|
|
343
|
+
"changesPercentage": -2.15,
|
|
344
|
+
"change": -0.29
|
|
345
|
+
}
|
|
346
|
+
]
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**Usage**:
|
|
350
|
+
- VIX < 15: Low fear (bullish environment)
|
|
351
|
+
- VIX 15-20: Normal (healthy market)
|
|
352
|
+
- VIX 20-30: Elevated (caution)
|
|
353
|
+
- VIX > 30: Panic (bear market signal)
|
|
354
|
+
|
|
355
|
+
**API Calls**: 1 (reused for all stocks)
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## S Component - Supply and Demand (Phase 2)
|
|
360
|
+
|
|
361
|
+
### Endpoint: Historical Prices (Already Fetched for N Component)
|
|
362
|
+
|
|
363
|
+
**URL**: `/v3/historical-price-full/{symbol}?timeseries=90`
|
|
364
|
+
|
|
365
|
+
**Purpose**: Volume-based accumulation/distribution analysis
|
|
366
|
+
|
|
367
|
+
**Data Reuse**: S component uses the same historical_prices data already fetched for N component (52-week high calculation). **No additional API calls required.**
|
|
368
|
+
|
|
369
|
+
**Algorithm**:
|
|
370
|
+
```python
|
|
371
|
+
# Classify last 60 days into up-days and down-days
|
|
372
|
+
for day in last_60_days:
|
|
373
|
+
if close > previous_close:
|
|
374
|
+
up_days.append(volume)
|
|
375
|
+
elif close < previous_close:
|
|
376
|
+
down_days.append(volume)
|
|
377
|
+
|
|
378
|
+
# Calculate accumulation/distribution ratio
|
|
379
|
+
avg_up_volume = sum(up_days) / len(up_days)
|
|
380
|
+
avg_down_volume = sum(down_days) / len(down_days)
|
|
381
|
+
ratio = avg_up_volume / avg_down_volume
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**Scoring**:
|
|
385
|
+
- Ratio ≥ 2.0: 100 points (Strong Accumulation)
|
|
386
|
+
- Ratio 1.5-2.0: 80 points (Accumulation)
|
|
387
|
+
- Ratio 1.0-1.5: 60 points (Neutral/Weak Accumulation)
|
|
388
|
+
- Ratio 0.7-1.0: 40 points (Neutral/Weak Distribution)
|
|
389
|
+
- Ratio 0.5-0.7: 20 points (Distribution)
|
|
390
|
+
- Ratio < 0.5: 0 points (Strong Distribution)
|
|
391
|
+
|
|
392
|
+
**API Calls**: 0 (data already fetched)
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## I Component - Institutional Sponsorship (Phase 2)
|
|
397
|
+
|
|
398
|
+
### Endpoint: Institutional Holders
|
|
399
|
+
|
|
400
|
+
**URL**: `/v3/institutional-holder/{symbol}`
|
|
401
|
+
|
|
402
|
+
**Purpose**: Analyze institutional holder count and ownership percentage
|
|
403
|
+
|
|
404
|
+
**Authentication**: Requires FMP API key (available on free tier)
|
|
405
|
+
|
|
406
|
+
**Request**:
|
|
407
|
+
```bash
|
|
408
|
+
curl "https://financialmodelingprep.com/api/v3/institutional-holder/AAPL?apikey=YOUR_KEY"
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**Response Structure**:
|
|
412
|
+
```json
|
|
413
|
+
[
|
|
414
|
+
{
|
|
415
|
+
"holder": "Vanguard Group Inc",
|
|
416
|
+
"shares": 1295611697,
|
|
417
|
+
"dateReported": "2024-09-30",
|
|
418
|
+
"change": 12500000,
|
|
419
|
+
"changePercent": 0.0097
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"holder": "Blackrock Inc.",
|
|
423
|
+
"shares": 1042156037,
|
|
424
|
+
"dateReported": "2024-09-30",
|
|
425
|
+
"change": -5234567,
|
|
426
|
+
"changePercent": -0.0050
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"holder": "Berkshire Hathaway Inc",
|
|
430
|
+
"shares": 915560382,
|
|
431
|
+
"dateReported": "2024-09-30",
|
|
432
|
+
"change": 0,
|
|
433
|
+
"changePercent": 0.0000
|
|
434
|
+
}
|
|
435
|
+
// ... hundreds more holders ...
|
|
436
|
+
]
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
**Key Fields**:
|
|
440
|
+
- `holder`: Institution name (string)
|
|
441
|
+
- `shares`: Number of shares held (int)
|
|
442
|
+
- `dateReported`: 13F filing date (string, YYYY-MM-DD)
|
|
443
|
+
- `change`: Change in shares from previous quarter (int)
|
|
444
|
+
- `changePercent`: Percentage change (float)
|
|
445
|
+
|
|
446
|
+
**Typical Response Size**: 100-7,000 holders per stock (AAPL has ~7,111 holders)
|
|
447
|
+
|
|
448
|
+
**Free Tier Availability**: ✅ Available (tested with AAPL on 2026-01-12)
|
|
449
|
+
|
|
450
|
+
**Usage**:
|
|
451
|
+
```python
|
|
452
|
+
# Calculate total institutional ownership
|
|
453
|
+
total_shares_held = sum(holder['shares'] for holder in institutional_holders)
|
|
454
|
+
ownership_pct = (total_shares_held / shares_outstanding) * 100
|
|
455
|
+
|
|
456
|
+
# Count unique holders
|
|
457
|
+
num_holders = len(institutional_holders)
|
|
458
|
+
|
|
459
|
+
# Detect superinvestors
|
|
460
|
+
SUPERINVESTORS = [
|
|
461
|
+
"BERKSHIRE HATHAWAY",
|
|
462
|
+
"BAUPOST GROUP",
|
|
463
|
+
"PERSHING SQUARE",
|
|
464
|
+
# ...
|
|
465
|
+
]
|
|
466
|
+
superinvestor_present = any(
|
|
467
|
+
superinvestor in holder['holder'].upper()
|
|
468
|
+
for holder in institutional_holders
|
|
469
|
+
for superinvestor in SUPERINVESTORS
|
|
470
|
+
)
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
**Scoring** (O'Neil's Criteria):
|
|
474
|
+
- 50-100 holders + 30-60% ownership: 100 points (Sweet spot)
|
|
475
|
+
- Superinvestor present + good holder count: 90 points
|
|
476
|
+
- 30-50 holders + 20-40% ownership: 80 points
|
|
477
|
+
- Acceptable ranges: 60 points
|
|
478
|
+
- Suboptimal (< 20% or > 80% ownership): 40 points
|
|
479
|
+
- Extreme (< 10% or > 90% ownership): 20 points
|
|
480
|
+
|
|
481
|
+
**API Calls**: 1 per stock
|
|
482
|
+
|
|
483
|
+
**Data Freshness**: Updated quarterly (13F filings due 45 days after quarter-end)
|
|
484
|
+
|
|
485
|
+
**Quality Notes**:
|
|
486
|
+
- Large-cap stocks (AAPL, MSFT): 5,000-10,000 holders
|
|
487
|
+
- Mid-cap stocks: 500-2,000 holders
|
|
488
|
+
- Small-cap stocks: 50-500 holders
|
|
489
|
+
- Micro-cap stocks: < 50 holders (may lack institutional interest)
|
|
490
|
+
|
|
491
|
+
---
|
|
492
|
+
|
|
493
|
+
## API Call Summary (Per Stock)
|
|
494
|
+
|
|
495
|
+
### Phase 1 MVP (C, A, N, M Components)
|
|
496
|
+
|
|
497
|
+
**Per-Stock Calls**:
|
|
498
|
+
1. Income Statement (Quarterly): 1 call
|
|
499
|
+
2. Income Statement (Annual): 1 call
|
|
500
|
+
3. Historical Prices (365 days): 1 call OR Quote: 1 call
|
|
501
|
+
4. Stock News (Optional): 1 call
|
|
502
|
+
|
|
503
|
+
**Per-Stock Total**: 3-4 calls
|
|
504
|
+
|
|
505
|
+
**Market Data Calls** (One-Time per Session):
|
|
506
|
+
1. S&P 500 Quote: 1 call (shared)
|
|
507
|
+
2. S&P 500 Historical (60 days): 1 call (shared)
|
|
508
|
+
3. VIX Quote: 1 call (shared)
|
|
509
|
+
|
|
510
|
+
**Market Data Total**: 3 calls
|
|
511
|
+
|
|
512
|
+
**Total for 40 Stocks**:
|
|
513
|
+
- Per-stock: 40 stocks × 3 calls = 120 calls
|
|
514
|
+
- Market data: 3 calls
|
|
515
|
+
- **Grand Total: 123 calls** (well within 250 free tier limit)
|
|
516
|
+
|
|
517
|
+
**With Optional News**:
|
|
518
|
+
- Per-stock: 40 stocks × 4 calls = 160 calls
|
|
519
|
+
- Market data: 3 calls
|
|
520
|
+
- **Grand Total: 163 calls** (still within free tier)
|
|
521
|
+
|
|
522
|
+
### Phase 2 (C, A, N, S, I, M Components)
|
|
523
|
+
|
|
524
|
+
**Per-Stock Calls**:
|
|
525
|
+
1. Profile (for company info): 1 call
|
|
526
|
+
2. Quote (for current price): 1 call
|
|
527
|
+
3. Income Statement (Quarterly): 1 call
|
|
528
|
+
4. Income Statement (Annual): 1 call (after filtering)
|
|
529
|
+
5. Historical Prices (90 days): 1 call (reused for N and S)
|
|
530
|
+
6. Institutional Holders: 1 call (NEW in Phase 2)
|
|
531
|
+
|
|
532
|
+
**Per-Stock Total**: 5-6 calls (depending on filtering)
|
|
533
|
+
|
|
534
|
+
**Market Data Calls** (One-Time per Session):
|
|
535
|
+
1. S&P 500 Quote: 1 call (shared)
|
|
536
|
+
2. S&P 500 Historical (60 days): 1 call (shared)
|
|
537
|
+
3. VIX Quote: 1 call (shared)
|
|
538
|
+
|
|
539
|
+
**Market Data Total**: 3 calls
|
|
540
|
+
|
|
541
|
+
**Total for 40 Stocks**:
|
|
542
|
+
- Per-stock: 40 stocks × 5 calls (avg) = 200 calls
|
|
543
|
+
- Market data: 3 calls
|
|
544
|
+
- **Grand Total: ~203 calls (81% of 250 free tier limit)** ✅
|
|
545
|
+
|
|
546
|
+
**Key Efficiency**:
|
|
547
|
+
- S component: 0 extra calls (reuses historical_prices from N component)
|
|
548
|
+
- I component: +1 call per stock (institutional-holder endpoint)
|
|
549
|
+
- **Phase 2 adds only ~70 calls over Phase 1 (140 calls)**
|
|
550
|
+
|
|
551
|
+
**Free Tier Status**: ✅ Comfortably within limits (47 calls headroom)
|
|
552
|
+
|
|
553
|
+
---
|
|
554
|
+
|
|
555
|
+
## Rate Limiting Strategy
|
|
556
|
+
|
|
557
|
+
### Implementation
|
|
558
|
+
|
|
559
|
+
```python
|
|
560
|
+
import time
|
|
561
|
+
|
|
562
|
+
def rate_limited_get(url, params):
|
|
563
|
+
"""Enforce 0.3s delay between requests (200 requests/minute max)"""
|
|
564
|
+
response = requests.get(url, params=params)
|
|
565
|
+
time.sleep(0.3) # 300ms delay
|
|
566
|
+
return response
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
### Handling 429 Errors (Rate Limit Exceeded)
|
|
570
|
+
|
|
571
|
+
```python
|
|
572
|
+
def handle_rate_limit(response):
|
|
573
|
+
"""Retry once with 60-second wait if rate limit hit"""
|
|
574
|
+
if response.status_code == 429:
|
|
575
|
+
print("WARNING: Rate limit exceeded. Waiting 60 seconds...")
|
|
576
|
+
time.sleep(60)
|
|
577
|
+
return True # Signal to retry
|
|
578
|
+
return False # No retry needed
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
### Free Tier Management
|
|
582
|
+
|
|
583
|
+
**Daily Quota**: 250 requests/day
|
|
584
|
+
|
|
585
|
+
**Strategies to Stay Within Limits**:
|
|
586
|
+
1. **Batch calls where possible**: Use comma-separated symbols in quote endpoint
|
|
587
|
+
2. **Cache market data**: Fetch S&P 500/VIX once, reuse for all stocks
|
|
588
|
+
3. **Skip optional calls**: News endpoint can be omitted to save 40 calls
|
|
589
|
+
4. **Limit universe**: Analyze top 40 stocks by volume/market cap (Phase 1 default)
|
|
590
|
+
5. **Progressive filtering**: Apply cheap filters first (market cap, sector) before expensive API calls
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
## Error Handling
|
|
595
|
+
|
|
596
|
+
### Common Errors
|
|
597
|
+
|
|
598
|
+
**401 Unauthorized**:
|
|
599
|
+
- Cause: Invalid or missing API key
|
|
600
|
+
- Solution: Verify `apikey` parameter, check environment variable
|
|
601
|
+
|
|
602
|
+
**404 Not Found**:
|
|
603
|
+
- Cause: Invalid symbol or endpoint
|
|
604
|
+
- Solution: Verify ticker symbol exists, check endpoint URL
|
|
605
|
+
|
|
606
|
+
**429 Too Many Requests**:
|
|
607
|
+
- Cause: Exceeded daily/minute rate limit
|
|
608
|
+
- Solution: Wait 60 seconds (minute limit) or 24 hours (daily limit)
|
|
609
|
+
|
|
610
|
+
**500 Internal Server Error**:
|
|
611
|
+
- Cause: FMP server issue
|
|
612
|
+
- Solution: Retry after 5 seconds, skip stock if persistent
|
|
613
|
+
|
|
614
|
+
**Empty Response `[]`**:
|
|
615
|
+
- Cause: Symbol exists but no data available (e.g., recent IPO, delisted stock)
|
|
616
|
+
- Solution: Skip stock, log warning
|
|
617
|
+
|
|
618
|
+
### Retry Logic
|
|
619
|
+
|
|
620
|
+
```python
|
|
621
|
+
MAX_RETRIES = 1
|
|
622
|
+
retry_count = 0
|
|
623
|
+
|
|
624
|
+
while retry_count <= MAX_RETRIES:
|
|
625
|
+
response = make_request()
|
|
626
|
+
if response.status_code == 200:
|
|
627
|
+
return response.json()
|
|
628
|
+
elif response.status_code == 429:
|
|
629
|
+
time.sleep(60)
|
|
630
|
+
retry_count += 1
|
|
631
|
+
else:
|
|
632
|
+
print(f"ERROR: {response.status_code}")
|
|
633
|
+
return None
|
|
634
|
+
|
|
635
|
+
print("ERROR: Max retries exceeded")
|
|
636
|
+
return None
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
641
|
+
## Data Quality Considerations
|
|
642
|
+
|
|
643
|
+
### Freshness
|
|
644
|
+
|
|
645
|
+
- **Quarterly/Annual Data**: Updated within 1-2 days of earnings release
|
|
646
|
+
- **Price Data**: Real-time (15-minute delay on free tier)
|
|
647
|
+
- **News Data**: Updated continuously
|
|
648
|
+
|
|
649
|
+
### Completeness
|
|
650
|
+
|
|
651
|
+
- **Large-cap stocks**: Complete historical data (10+ years)
|
|
652
|
+
- **Mid-cap stocks**: Mostly complete (5+ years typical)
|
|
653
|
+
- **Small-cap/Recent IPOs**: May have gaps (<2 years data)
|
|
654
|
+
|
|
655
|
+
### Validation
|
|
656
|
+
|
|
657
|
+
Always check for:
|
|
658
|
+
- `null` or `0` values in critical fields (EPS, revenue)
|
|
659
|
+
- Negative EPS when calculating growth rates (use absolute value in denominator)
|
|
660
|
+
- Missing quarters (delisted stocks, special situations)
|
|
661
|
+
|
|
662
|
+
---
|
|
663
|
+
|
|
664
|
+
## Example API Call Sequence
|
|
665
|
+
|
|
666
|
+
For analyzing NVDA:
|
|
667
|
+
|
|
668
|
+
```bash
|
|
669
|
+
# 1. Quarterly income statement (C component)
|
|
670
|
+
curl "https://financialmodelingprep.com/api/v3/income-statement/NVDA?period=quarter&limit=8&apikey=YOUR_KEY"
|
|
671
|
+
|
|
672
|
+
# 2. Annual income statement (A component)
|
|
673
|
+
curl "https://financialmodelingprep.com/api/v3/income-statement/NVDA?period=annual&limit=5&apikey=YOUR_KEY"
|
|
674
|
+
|
|
675
|
+
# 3. Historical prices (N component)
|
|
676
|
+
curl "https://financialmodelingprep.com/api/v3/quote/NVDA?apikey=YOUR_KEY"
|
|
677
|
+
|
|
678
|
+
# 4. S&P 500 for market direction (M component - once per session)
|
|
679
|
+
curl "https://financialmodelingprep.com/api/v3/quote/%5EGSPC&apikey=YOUR_KEY"
|
|
680
|
+
curl "https://financialmodelingprep.com/api/v3/historical-price-full/%5EGSPC?timeseries=60&apikey=YOUR_KEY"
|
|
681
|
+
curl "https://financialmodelingprep.com/api/v3/quote/%5EVIX&apikey=YOUR_KEY"
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
**Total**: 6 calls (3 for NVDA, 3 for market - market calls reused for all stocks)
|
|
685
|
+
|
|
686
|
+
---
|
|
687
|
+
|
|
688
|
+
## Cost Analysis
|
|
689
|
+
|
|
690
|
+
### Free Tier (250 requests/day)
|
|
691
|
+
|
|
692
|
+
- **40 stocks × 3 calls = 120 calls**
|
|
693
|
+
- **Market data: 3 calls**
|
|
694
|
+
- **Total: 123 calls (49% of quota)**
|
|
695
|
+
- **Remaining: 127 calls** (available for re-runs or additional stocks)
|
|
696
|
+
|
|
697
|
+
### Paid Tiers
|
|
698
|
+
|
|
699
|
+
- **Starter ($14/month)**: 500 requests/day → ~165 stocks per day
|
|
700
|
+
- **Professional ($29/month)**: 1000 requests/day → ~330 stocks per day
|
|
701
|
+
- **Enterprise ($399/month)**: 10000 requests/day → ~3330 stocks per day
|
|
702
|
+
|
|
703
|
+
**Recommendation for Phase 1**: Free tier sufficient for 40-stock universe
|
|
704
|
+
|
|
705
|
+
---
|
|
706
|
+
|
|
707
|
+
This API reference provides complete documentation for implementing Phase 1 MVP CANSLIM screening within FMP free tier constraints.
|