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,102 @@
|
|
|
1
|
+
# Upcoming Earnings Calendar - Week of [START_DATE] to [END_DATE]
|
|
2
|
+
|
|
3
|
+
**Report Generated**: [CURRENT_DATE]
|
|
4
|
+
**Data Source**: FMP API (Mid-cap and above, >$2B market cap)
|
|
5
|
+
**Coverage Period**: Next 7 days
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Executive Summary
|
|
10
|
+
|
|
11
|
+
- **Total Companies Reporting**: [TOTAL_COUNT]
|
|
12
|
+
- **Mega/Large Cap (>$10B)**: [LARGE_CAP_COUNT]
|
|
13
|
+
- **Mid Cap ($2B-$10B)**: [MID_CAP_COUNT]
|
|
14
|
+
- **Peak Day**: [DAY_WITH_MOST_EARNINGS]
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## [DAY_NAME], [FULL_DATE]
|
|
19
|
+
|
|
20
|
+
### Before Market Open (BMO)
|
|
21
|
+
|
|
22
|
+
| Ticker | Company | Market Cap | Sector | EPS Est. | Revenue Est. |
|
|
23
|
+
|--------|---------|------------|--------|----------|--------------|
|
|
24
|
+
| [TICKER] | [COMPANY_NAME] | [MARKET_CAP] | [SECTOR] | [EPS_EST] | [REV_EST] |
|
|
25
|
+
| [TICKER] | [COMPANY_NAME] | [MARKET_CAP] | [SECTOR] | [EPS_EST] | [REV_EST] |
|
|
26
|
+
|
|
27
|
+
### After Market Close (AMC)
|
|
28
|
+
|
|
29
|
+
| Ticker | Company | Market Cap | Sector | EPS Est. | Revenue Est. |
|
|
30
|
+
|--------|---------|------------|--------|----------|--------------|
|
|
31
|
+
| [TICKER] | [COMPANY_NAME] | [MARKET_CAP] | [SECTOR] | [EPS_EST] | [REV_EST] |
|
|
32
|
+
| [TICKER] | [COMPANY_NAME] | [MARKET_CAP] | [SECTOR] | [EPS_EST] | [REV_EST] |
|
|
33
|
+
|
|
34
|
+
### Time Not Announced (TAS)
|
|
35
|
+
|
|
36
|
+
| Ticker | Company | Market Cap | Sector | EPS Est. | Revenue Est. |
|
|
37
|
+
|--------|---------|------------|--------|----------|--------------|
|
|
38
|
+
| [TICKER] | [COMPANY_NAME] | [MARKET_CAP] | [SECTOR] | [EPS_EST] | [REV_EST] |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## [NEXT_DAY_NAME], [NEXT_FULL_DATE]
|
|
43
|
+
|
|
44
|
+
[Repeat structure for each day of the week]
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Key Observations
|
|
49
|
+
|
|
50
|
+
### Highest Market Cap Companies This Week
|
|
51
|
+
1. [COMPANY_NAME] ([TICKER]) - [MARKET_CAP] - [DATE] [TIME]
|
|
52
|
+
2. [COMPANY_NAME] ([TICKER]) - [MARKET_CAP] - [DATE] [TIME]
|
|
53
|
+
3. [COMPANY_NAME] ([TICKER]) - [MARKET_CAP] - [DATE] [TIME]
|
|
54
|
+
|
|
55
|
+
### Sector Distribution
|
|
56
|
+
- **Technology**: [COUNT] companies
|
|
57
|
+
- **Healthcare**: [COUNT] companies
|
|
58
|
+
- **Financial**: [COUNT] companies
|
|
59
|
+
- **Consumer**: [COUNT] companies
|
|
60
|
+
- **Other**: [COUNT] companies
|
|
61
|
+
|
|
62
|
+
### Trading Considerations
|
|
63
|
+
- **Days with Heavy Volume**: [DATES with multiple large-cap earnings]
|
|
64
|
+
- **Pre-Market Focus**: [BMO companies that may move markets]
|
|
65
|
+
- **After-Hours Focus**: [AMC companies that may move markets]
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Timing Reference
|
|
70
|
+
|
|
71
|
+
- **BMO (Before Market Open)**: Announcements typically around 6:00-8:00 AM ET before market opens at 9:30 AM ET
|
|
72
|
+
- **AMC (After Market Close)**: Announcements typically around 4:00-5:00 PM ET after market closes at 4:00 PM ET
|
|
73
|
+
- **TAS (Time Not Announced)**: Specific time not yet disclosed - monitor company investor relations
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Data Notes
|
|
78
|
+
|
|
79
|
+
- **Market Cap Categories**:
|
|
80
|
+
- Mega Cap: >$200B
|
|
81
|
+
- Large Cap: $10B-$200B
|
|
82
|
+
- Mid Cap: $2B-$10B
|
|
83
|
+
|
|
84
|
+
- **Filter Criteria**: This report includes companies with market cap $2B and above (mid-cap+) with earnings scheduled for the next week.
|
|
85
|
+
|
|
86
|
+
- **Data Freshness**: Earnings dates and times can change. Verify critical dates through company investor relations websites for the most current information.
|
|
87
|
+
|
|
88
|
+
- **Missing Times**: Companies showing "TAS" have not yet announced specific timing. Check for updates 24-48 hours before the earnings date.
|
|
89
|
+
|
|
90
|
+
- **EPS and Revenue Estimates**: Analyst consensus estimates from FMP API. Actual results will be reported on earnings date.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Additional Resources
|
|
95
|
+
|
|
96
|
+
- **FMP API Documentation**: https://site.financialmodelingprep.com/developer/docs
|
|
97
|
+
- **Seeking Alpha Calendar**: https://seekingalpha.com/earnings/earnings-calendar
|
|
98
|
+
- **Yahoo Finance Calendar**: https://finance.yahoo.com/calendar/earnings
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
*Report generated using FMP Earnings Calendar API with mid-cap+ filter (>$2B market cap). Data current as of report generation time. Always verify earnings dates through official company sources.*
|
|
@@ -0,0 +1,590 @@
|
|
|
1
|
+
# FMP Earnings Calendar API Guide
|
|
2
|
+
|
|
3
|
+
This reference provides guidance on using the Financial Modeling Prep (FMP) Earnings Calendar API to retrieve upcoming earnings announcements for US stocks.
|
|
4
|
+
|
|
5
|
+
## FMP API Overview
|
|
6
|
+
|
|
7
|
+
Financial Modeling Prep (FMP) provides a comprehensive financial data API with earnings calendar endpoints that return structured JSON data including announcement dates, EPS estimates, revenue estimates, and actual results for publicly traded companies.
|
|
8
|
+
|
|
9
|
+
**Official Documentation**: https://site.financialmodelingprep.com/developer/docs/earnings-calendar-api
|
|
10
|
+
|
|
11
|
+
## API Endpoint
|
|
12
|
+
|
|
13
|
+
**Earnings Calendar Endpoint**:
|
|
14
|
+
```
|
|
15
|
+
https://financialmodelingprep.com/api/v3/earning_calendar
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Authentication
|
|
19
|
+
|
|
20
|
+
FMP API requires an API key for authentication:
|
|
21
|
+
```
|
|
22
|
+
https://financialmodelingprep.com/api/v3/earning_calendar?apikey=YOUR_API_KEY&from=2025-11-03&to=2025-11-09
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Getting an API Key**:
|
|
26
|
+
- Free tier: https://site.financialmodelingprep.com/developer/docs
|
|
27
|
+
- Sign up for free account
|
|
28
|
+
- Receive API key immediately
|
|
29
|
+
- Free tier: 250 API calls/day
|
|
30
|
+
|
|
31
|
+
## Request Parameters
|
|
32
|
+
|
|
33
|
+
### Required Parameters
|
|
34
|
+
|
|
35
|
+
| Parameter | Type | Description | Example |
|
|
36
|
+
|-----------|------|-------------|---------|
|
|
37
|
+
| `apikey` | string | Your FMP API key | `YOUR_API_KEY` |
|
|
38
|
+
| `from` | date | Start date (YYYY-MM-DD) | `2025-11-03` |
|
|
39
|
+
| `to` | date | End date (YYYY-MM-DD) | `2025-11-09` |
|
|
40
|
+
|
|
41
|
+
### Constraints
|
|
42
|
+
|
|
43
|
+
- **Maximum Records**: 4000 records per request
|
|
44
|
+
- **Maximum Date Range**: 90 days
|
|
45
|
+
- **Rate Limiting**: Free tier = 250 calls/day, Premium = 750-2500 calls/day
|
|
46
|
+
- **Date Format**: YYYY-MM-DD (ISO 8601)
|
|
47
|
+
|
|
48
|
+
### Example Request
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
curl "https://financialmodelingprep.com/api/v3/earning_calendar?apikey=YOUR_KEY&from=2025-11-03&to=2025-11-09"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Response Format
|
|
55
|
+
|
|
56
|
+
### JSON Structure
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
[
|
|
60
|
+
{
|
|
61
|
+
"symbol": "AAPL",
|
|
62
|
+
"date": "2025-11-04",
|
|
63
|
+
"eps": null,
|
|
64
|
+
"epsEstimated": 1.54,
|
|
65
|
+
"time": "amc",
|
|
66
|
+
"revenue": null,
|
|
67
|
+
"revenueEstimated": 123400000000,
|
|
68
|
+
"fiscalDateEnding": "2025-09-30",
|
|
69
|
+
"updatedFromDate": "2025-11-01"
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"symbol": "MSFT",
|
|
73
|
+
"date": "2025-11-05",
|
|
74
|
+
"eps": null,
|
|
75
|
+
"epsEstimated": 2.75,
|
|
76
|
+
"time": "amc",
|
|
77
|
+
"revenue": null,
|
|
78
|
+
"revenueEstimated": 56200000000,
|
|
79
|
+
"fiscalDateEnding": "2025-09-30",
|
|
80
|
+
"updatedFromDate": "2025-11-02"
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Field Descriptions
|
|
86
|
+
|
|
87
|
+
| Field | Type | Description |
|
|
88
|
+
|-------|------|-------------|
|
|
89
|
+
| `symbol` | string | Stock ticker symbol |
|
|
90
|
+
| `date` | string | Earnings announcement date (YYYY-MM-DD) |
|
|
91
|
+
| `eps` | number/null | Actual EPS (null if not yet announced) |
|
|
92
|
+
| `epsEstimated` | number | Estimated EPS by analysts |
|
|
93
|
+
| `time` | string | Timing: "bmo" (before market open), "amc" (after market close), "tba" (to be announced) |
|
|
94
|
+
| `revenue` | number/null | Actual revenue (null if not yet announced) |
|
|
95
|
+
| `revenueEstimated` | number | Estimated revenue by analysts |
|
|
96
|
+
| `fiscalDateEnding` | string | Fiscal period ending date |
|
|
97
|
+
| `updatedFromDate` | string | Last update date for this entry |
|
|
98
|
+
|
|
99
|
+
## Timing Conventions
|
|
100
|
+
|
|
101
|
+
### BMO (Before Market Open)
|
|
102
|
+
- API value: `"bmo"` or `"pre-market"`
|
|
103
|
+
- Announced before US market opens at 9:30 AM ET
|
|
104
|
+
- Typically around 6:00-8:00 AM ET
|
|
105
|
+
- **Impact**: Provides time for market to digest before trading begins
|
|
106
|
+
|
|
107
|
+
### AMC (After Market Close)
|
|
108
|
+
- API value: `"amc"` or `"after-market"`
|
|
109
|
+
- Announced after US market closes at 4:00 PM ET
|
|
110
|
+
- Typically around 4:00-5:00 PM ET
|
|
111
|
+
- **Impact**: Overnight reaction, gap up/down at next day's open
|
|
112
|
+
|
|
113
|
+
### TBA (To Be Announced)
|
|
114
|
+
- API value: `"tba"` or `null`
|
|
115
|
+
- Specific time not yet announced
|
|
116
|
+
- Could be BMO or AMC
|
|
117
|
+
- Monitor company investor relations for updates
|
|
118
|
+
|
|
119
|
+
## Filtering by Market Cap
|
|
120
|
+
|
|
121
|
+
FMP API doesn't provide market cap in the earnings calendar endpoint. To filter by market cap:
|
|
122
|
+
|
|
123
|
+
### Option 1: Use Company Profile API (Recommended)
|
|
124
|
+
|
|
125
|
+
**Step 1**: Get earnings calendar data
|
|
126
|
+
```
|
|
127
|
+
GET /api/v3/earning_calendar?apikey=KEY&from=2025-11-03&to=2025-11-09
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Step 2**: For each symbol, fetch market cap from profile endpoint
|
|
131
|
+
```
|
|
132
|
+
GET /api/v3/profile/{symbol}?apikey=KEY
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Response includes:
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"symbol": "AAPL",
|
|
139
|
+
"companyName": "Apple Inc.",
|
|
140
|
+
"mktCap": 3000000000000,
|
|
141
|
+
"sector": "Technology",
|
|
142
|
+
"industry": "Consumer Electronics"
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Step 3**: Filter companies with `mktCap > 2000000000` ($2B+)
|
|
147
|
+
|
|
148
|
+
### Option 2: Use Batch Profile API (More Efficient)
|
|
149
|
+
|
|
150
|
+
Request profiles for multiple symbols in one call:
|
|
151
|
+
```
|
|
152
|
+
GET /api/v3/profile/AAPL,MSFT,GOOGL,AMZN?apikey=KEY
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
This reduces API calls significantly.
|
|
156
|
+
|
|
157
|
+
## Python Implementation Strategy
|
|
158
|
+
|
|
159
|
+
### Basic Request
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
import requests
|
|
163
|
+
from datetime import datetime, timedelta
|
|
164
|
+
|
|
165
|
+
def fetch_earnings_calendar(api_key, start_date, end_date):
|
|
166
|
+
"""
|
|
167
|
+
Fetch earnings calendar from FMP API
|
|
168
|
+
|
|
169
|
+
Args:
|
|
170
|
+
api_key: FMP API key
|
|
171
|
+
start_date: Start date (YYYY-MM-DD)
|
|
172
|
+
end_date: End date (YYYY-MM-DD)
|
|
173
|
+
|
|
174
|
+
Returns:
|
|
175
|
+
List of earnings announcements
|
|
176
|
+
"""
|
|
177
|
+
url = "https://financialmodelingprep.com/api/v3/earning_calendar"
|
|
178
|
+
params = {
|
|
179
|
+
"apikey": api_key,
|
|
180
|
+
"from": start_date,
|
|
181
|
+
"to": end_date
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
response = requests.get(url, params=params)
|
|
185
|
+
response.raise_for_status()
|
|
186
|
+
|
|
187
|
+
return response.json()
|
|
188
|
+
|
|
189
|
+
# Usage
|
|
190
|
+
api_key = "YOUR_API_KEY"
|
|
191
|
+
earnings = fetch_earnings_calendar(api_key, "2025-11-03", "2025-11-09")
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### With Market Cap Filtering
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
def fetch_company_profiles(api_key, symbols):
|
|
198
|
+
"""
|
|
199
|
+
Fetch company profiles for multiple symbols (batch)
|
|
200
|
+
|
|
201
|
+
Args:
|
|
202
|
+
api_key: FMP API key
|
|
203
|
+
symbols: List of ticker symbols
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
Dictionary mapping symbol to profile data
|
|
207
|
+
"""
|
|
208
|
+
# Batch symbols (max 100 per request)
|
|
209
|
+
batch_size = 100
|
|
210
|
+
profiles = {}
|
|
211
|
+
|
|
212
|
+
for i in range(0, len(symbols), batch_size):
|
|
213
|
+
batch = symbols[i:i+batch_size]
|
|
214
|
+
symbols_str = ",".join(batch)
|
|
215
|
+
|
|
216
|
+
url = f"https://financialmodelingprep.com/api/v3/profile/{symbols_str}"
|
|
217
|
+
params = {"apikey": api_key}
|
|
218
|
+
|
|
219
|
+
response = requests.get(url, params=params)
|
|
220
|
+
response.raise_for_status()
|
|
221
|
+
|
|
222
|
+
for profile in response.json():
|
|
223
|
+
profiles[profile["symbol"]] = profile
|
|
224
|
+
|
|
225
|
+
return profiles
|
|
226
|
+
|
|
227
|
+
def filter_by_market_cap(earnings, profiles, min_market_cap=2000000000):
|
|
228
|
+
"""
|
|
229
|
+
Filter earnings by minimum market cap ($2B default)
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
earnings: List of earnings announcements
|
|
233
|
+
profiles: Dictionary of company profiles
|
|
234
|
+
min_market_cap: Minimum market cap in dollars
|
|
235
|
+
|
|
236
|
+
Returns:
|
|
237
|
+
Filtered list of earnings for mid-cap+ companies
|
|
238
|
+
"""
|
|
239
|
+
filtered = []
|
|
240
|
+
|
|
241
|
+
for earning in earnings:
|
|
242
|
+
symbol = earning["symbol"]
|
|
243
|
+
profile = profiles.get(symbol)
|
|
244
|
+
|
|
245
|
+
if profile and profile.get("mktCap", 0) >= min_market_cap:
|
|
246
|
+
# Merge earnings data with profile data
|
|
247
|
+
earning["marketCap"] = profile["mktCap"]
|
|
248
|
+
earning["companyName"] = profile.get("companyName", symbol)
|
|
249
|
+
earning["sector"] = profile.get("sector", "N/A")
|
|
250
|
+
earning["industry"] = profile.get("industry", "N/A")
|
|
251
|
+
filtered.append(earning)
|
|
252
|
+
|
|
253
|
+
return filtered
|
|
254
|
+
|
|
255
|
+
# Complete workflow
|
|
256
|
+
api_key = "YOUR_API_KEY"
|
|
257
|
+
|
|
258
|
+
# Step 1: Get earnings calendar
|
|
259
|
+
earnings = fetch_earnings_calendar(api_key, "2025-11-03", "2025-11-09")
|
|
260
|
+
|
|
261
|
+
# Step 2: Get company profiles
|
|
262
|
+
symbols = [e["symbol"] for e in earnings]
|
|
263
|
+
profiles = fetch_company_profiles(api_key, symbols)
|
|
264
|
+
|
|
265
|
+
# Step 3: Filter by market cap (>$2B)
|
|
266
|
+
filtered_earnings = filter_by_market_cap(earnings, profiles)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## API Key Management - Multi-Environment Support
|
|
270
|
+
|
|
271
|
+
### Environment 1: QuantWise (CLI)
|
|
272
|
+
|
|
273
|
+
Set environment variable:
|
|
274
|
+
```bash
|
|
275
|
+
export FMP_API_KEY="your-api-key-here"
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Access in Python:
|
|
279
|
+
```python
|
|
280
|
+
import os
|
|
281
|
+
api_key = os.environ.get('FMP_API_KEY')
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### Environment 2: Claude Desktop
|
|
285
|
+
|
|
286
|
+
Configure MCP server settings or use environment variable in system.
|
|
287
|
+
|
|
288
|
+
### Environment 3: Claude Web
|
|
289
|
+
|
|
290
|
+
API key cannot be stored persistently. Request from user during execution:
|
|
291
|
+
|
|
292
|
+
**Workflow**:
|
|
293
|
+
1. Check for environment variable
|
|
294
|
+
2. If not found, prompt user: "Please provide your FMP API key"
|
|
295
|
+
3. Store in session variable for current conversation
|
|
296
|
+
4. Use for all API calls in this session
|
|
297
|
+
|
|
298
|
+
**Security Note**:
|
|
299
|
+
- Key stored only in conversation context
|
|
300
|
+
- Forgotten when session ends
|
|
301
|
+
- User should use free tier or limited-scope keys
|
|
302
|
+
|
|
303
|
+
## Error Handling
|
|
304
|
+
|
|
305
|
+
### Common Errors
|
|
306
|
+
|
|
307
|
+
**401 Unauthorized**:
|
|
308
|
+
```json
|
|
309
|
+
{
|
|
310
|
+
"Error Message": "Invalid API KEY. Please retry or visit our documentation to create one FREE https://site.financialmodelingprep.com/developer/docs"
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
Solution: Verify API key is correct
|
|
314
|
+
|
|
315
|
+
**429 Rate Limit Exceeded**:
|
|
316
|
+
```json
|
|
317
|
+
{
|
|
318
|
+
"Error Message": "Limit Reach. Please upgrade your plan or visit our documentation for more details at https://site.financialmodelingprep.com/developer/docs"
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
Solution: Reduce API calls or upgrade plan
|
|
322
|
+
|
|
323
|
+
**400 Bad Request**:
|
|
324
|
+
- Invalid date format
|
|
325
|
+
- Date range exceeds 90 days
|
|
326
|
+
- Missing required parameters
|
|
327
|
+
|
|
328
|
+
### Error Handling Code
|
|
329
|
+
|
|
330
|
+
```python
|
|
331
|
+
def fetch_earnings_with_error_handling(api_key, start_date, end_date):
|
|
332
|
+
"""Fetch earnings with proper error handling"""
|
|
333
|
+
try:
|
|
334
|
+
url = "https://financialmodelingprep.com/api/v3/earning_calendar"
|
|
335
|
+
params = {
|
|
336
|
+
"apikey": api_key,
|
|
337
|
+
"from": start_date,
|
|
338
|
+
"to": end_date
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
response = requests.get(url, params=params, timeout=30)
|
|
342
|
+
|
|
343
|
+
# Check for API errors
|
|
344
|
+
if response.status_code == 401:
|
|
345
|
+
print("ERROR: Invalid API key")
|
|
346
|
+
print("Get free API key: https://site.financialmodelingprep.com/developer/docs")
|
|
347
|
+
return None
|
|
348
|
+
|
|
349
|
+
if response.status_code == 429:
|
|
350
|
+
print("ERROR: Rate limit exceeded")
|
|
351
|
+
print("Free tier: 250 calls/day. Consider upgrading.")
|
|
352
|
+
return None
|
|
353
|
+
|
|
354
|
+
response.raise_for_status()
|
|
355
|
+
data = response.json()
|
|
356
|
+
|
|
357
|
+
# Check if response is error message
|
|
358
|
+
if isinstance(data, dict) and "Error Message" in data:
|
|
359
|
+
print(f"API Error: {data['Error Message']}")
|
|
360
|
+
return None
|
|
361
|
+
|
|
362
|
+
return data
|
|
363
|
+
|
|
364
|
+
except requests.exceptions.Timeout:
|
|
365
|
+
print("ERROR: Request timeout. Please try again.")
|
|
366
|
+
return None
|
|
367
|
+
|
|
368
|
+
except requests.exceptions.ConnectionError:
|
|
369
|
+
print("ERROR: Connection error. Check your internet connection.")
|
|
370
|
+
return None
|
|
371
|
+
|
|
372
|
+
except Exception as e:
|
|
373
|
+
print(f"ERROR: Unexpected error: {str(e)}")
|
|
374
|
+
return None
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
## Data Quality Considerations
|
|
378
|
+
|
|
379
|
+
### Accuracy
|
|
380
|
+
- FMP data is generally reliable for earnings dates
|
|
381
|
+
- EPS and revenue estimates updated regularly from analyst consensus
|
|
382
|
+
- Companies can change dates last-minute; verify critical dates
|
|
383
|
+
|
|
384
|
+
### Completeness
|
|
385
|
+
- Covers most US publicly traded companies
|
|
386
|
+
- Some smaller companies may have limited data
|
|
387
|
+
- Pre-IPO companies won't appear until trading begins
|
|
388
|
+
|
|
389
|
+
### Timeliness
|
|
390
|
+
- API updated regularly throughout the day
|
|
391
|
+
- Earnings dates typically known 2-4 weeks in advance
|
|
392
|
+
- Some companies announce dates very close to earnings (1-2 days prior)
|
|
393
|
+
|
|
394
|
+
### Data Freshness
|
|
395
|
+
- Check `updatedFromDate` field for last update timestamp
|
|
396
|
+
- Estimates may change as earnings date approaches
|
|
397
|
+
- Time field (`bmo`/`amc`/`tba`) may update closer to date
|
|
398
|
+
|
|
399
|
+
## Best Practices
|
|
400
|
+
|
|
401
|
+
### 1. Calculate Date Range Accurately
|
|
402
|
+
Always get current date first:
|
|
403
|
+
```python
|
|
404
|
+
from datetime import datetime, timedelta
|
|
405
|
+
|
|
406
|
+
today = datetime.now()
|
|
407
|
+
start_date = (today + timedelta(days=1)).strftime("%Y-%m-%d")
|
|
408
|
+
end_date = (today + timedelta(days=7)).strftime("%Y-%m-%d")
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### 2. Batch API Calls
|
|
412
|
+
Use batch endpoints to reduce API calls:
|
|
413
|
+
- Earnings calendar: One call for entire week
|
|
414
|
+
- Company profiles: Batch up to 100 symbols per call
|
|
415
|
+
|
|
416
|
+
### 3. Cache Results
|
|
417
|
+
For repeated analyses within same day:
|
|
418
|
+
```python
|
|
419
|
+
import json
|
|
420
|
+
from pathlib import Path
|
|
421
|
+
|
|
422
|
+
def cache_earnings_data(data, cache_file="earnings_cache.json"):
|
|
423
|
+
"""Save earnings data to cache file"""
|
|
424
|
+
cache_path = Path(cache_file)
|
|
425
|
+
cache_path.write_text(json.dumps(data, indent=2))
|
|
426
|
+
|
|
427
|
+
def load_cached_data(cache_file="earnings_cache.json", max_age_hours=6):
|
|
428
|
+
"""Load cached data if recent enough"""
|
|
429
|
+
cache_path = Path(cache_file)
|
|
430
|
+
if not cache_path.exists():
|
|
431
|
+
return None
|
|
432
|
+
|
|
433
|
+
# Check cache age
|
|
434
|
+
cache_age = datetime.now() - datetime.fromtimestamp(cache_path.stat().st_mtime)
|
|
435
|
+
if cache_age.total_seconds() > max_age_hours * 3600:
|
|
436
|
+
return None
|
|
437
|
+
|
|
438
|
+
return json.loads(cache_path.read_text())
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### 4. Handle Missing Data Gracefully
|
|
442
|
+
```python
|
|
443
|
+
def safe_get(data, key, default="N/A"):
|
|
444
|
+
"""Safely get value from dict with default"""
|
|
445
|
+
value = data.get(key)
|
|
446
|
+
return value if value is not None else default
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### 5. Sort and Prioritize by Market Cap
|
|
450
|
+
```python
|
|
451
|
+
def sort_by_market_cap(earnings):
|
|
452
|
+
"""Sort earnings by market cap descending"""
|
|
453
|
+
return sorted(
|
|
454
|
+
earnings,
|
|
455
|
+
key=lambda x: x.get("marketCap", 0),
|
|
456
|
+
reverse=True
|
|
457
|
+
)
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
## API Call Optimization
|
|
461
|
+
|
|
462
|
+
### Minimize API Calls
|
|
463
|
+
|
|
464
|
+
For a typical weekly earnings calendar:
|
|
465
|
+
1. **Earnings Calendar API**: 1 call (all week)
|
|
466
|
+
2. **Company Profiles API**: N/100 calls (where N = number of symbols)
|
|
467
|
+
|
|
468
|
+
**Example**:
|
|
469
|
+
- 200 companies reporting
|
|
470
|
+
- Profile API calls: 200/100 = 2 calls
|
|
471
|
+
- **Total**: 3 API calls (well within 250/day free limit)
|
|
472
|
+
|
|
473
|
+
### Rate Limit Management
|
|
474
|
+
|
|
475
|
+
```python
|
|
476
|
+
import time
|
|
477
|
+
|
|
478
|
+
def rate_limited_request(url, params, delay=0.1):
|
|
479
|
+
"""Make request with rate limiting"""
|
|
480
|
+
time.sleep(delay)
|
|
481
|
+
return requests.get(url, params=params)
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
For free tier (250 calls/day):
|
|
485
|
+
- Per hour limit: ~10 calls/hour safe
|
|
486
|
+
- Add 0.5-1 second delay between calls if making many requests
|
|
487
|
+
|
|
488
|
+
## Alternative Endpoints
|
|
489
|
+
|
|
490
|
+
### For Real-Time Market Cap Data
|
|
491
|
+
|
|
492
|
+
**Market Capitalization Endpoint**:
|
|
493
|
+
```
|
|
494
|
+
GET /api/v3/market-capitalization/{symbol}?apikey=KEY
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
Returns current market cap only (faster, but requires per-symbol calls).
|
|
498
|
+
|
|
499
|
+
### For Historical Earnings Results
|
|
500
|
+
|
|
501
|
+
**Historical Earnings Endpoint**:
|
|
502
|
+
```
|
|
503
|
+
GET /api/v3/historical/earning_calendar/{symbol}?apikey=KEY
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
Returns past earnings results with actual vs. estimated comparisons.
|
|
507
|
+
|
|
508
|
+
## Comparison: FMP vs Other Data Sources
|
|
509
|
+
|
|
510
|
+
| Feature | FMP API | Finviz | Yahoo Finance |
|
|
511
|
+
|---------|---------|--------|---------------|
|
|
512
|
+
| **Access Method** | REST API | Web Scraping | Web Scraping |
|
|
513
|
+
| **Authentication** | API Key | None | None |
|
|
514
|
+
| **Data Format** | JSON | HTML | HTML |
|
|
515
|
+
| **Rate Limit** | 250/day (free) | IP-based | IP-based |
|
|
516
|
+
| **Reliability** | High | Medium | Medium |
|
|
517
|
+
| **Market Cap Filter** | Via Profile API | Built-in | Manual |
|
|
518
|
+
| **EPS Estimates** | ✓ | ✗ | ✓ |
|
|
519
|
+
| **Revenue Estimates** | ✓ | ✗ | ✓ |
|
|
520
|
+
| **Timing Info** | ✓ | ✓ | ✓ |
|
|
521
|
+
| **Historical Data** | ✓ | ✗ | Limited |
|
|
522
|
+
| **Free Tier** | ✓ | ✓ | ✓ |
|
|
523
|
+
|
|
524
|
+
**Recommendation**: FMP API is the most reliable and structured option for programmatic access.
|
|
525
|
+
|
|
526
|
+
## Troubleshooting
|
|
527
|
+
|
|
528
|
+
### Problem: API returns empty array
|
|
529
|
+
|
|
530
|
+
**Solutions**:
|
|
531
|
+
- Verify date range is valid (future dates)
|
|
532
|
+
- Check date format is YYYY-MM-DD
|
|
533
|
+
- Verify API key is active
|
|
534
|
+
- Try wider date range (e.g., +14 days instead of +7)
|
|
535
|
+
|
|
536
|
+
### Problem: Some major companies missing
|
|
537
|
+
|
|
538
|
+
**Solutions**:
|
|
539
|
+
- Company may not have announced earnings date yet
|
|
540
|
+
- Some companies announce dates very late (1-2 days before)
|
|
541
|
+
- Cross-reference with company investor relations website
|
|
542
|
+
- Check if company is on earnings date hold
|
|
543
|
+
|
|
544
|
+
### Problem: Market cap data missing
|
|
545
|
+
|
|
546
|
+
**Solutions**:
|
|
547
|
+
- Company profile may not be available
|
|
548
|
+
- Use alternative market cap endpoint
|
|
549
|
+
- Fall back to manual market cap lookup
|
|
550
|
+
- Some thinly traded stocks may lack profile data
|
|
551
|
+
|
|
552
|
+
### Problem: Rate limit hit unexpectedly
|
|
553
|
+
|
|
554
|
+
**Solutions**:
|
|
555
|
+
- Check other scripts/tools using same API key
|
|
556
|
+
- Implement caching to reduce repeated calls
|
|
557
|
+
- Add delays between requests
|
|
558
|
+
- Consider upgrading to paid tier
|
|
559
|
+
|
|
560
|
+
## Example Output Structure
|
|
561
|
+
|
|
562
|
+
After fetching and processing FMP data:
|
|
563
|
+
|
|
564
|
+
```python
|
|
565
|
+
{
|
|
566
|
+
"symbol": "AAPL",
|
|
567
|
+
"companyName": "Apple Inc.",
|
|
568
|
+
"date": "2025-11-04",
|
|
569
|
+
"time": "amc",
|
|
570
|
+
"marketCap": 3000000000000,
|
|
571
|
+
"sector": "Technology",
|
|
572
|
+
"industry": "Consumer Electronics",
|
|
573
|
+
"epsEstimated": 1.54,
|
|
574
|
+
"revenueEstimated": 123400000000
|
|
575
|
+
}
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
This enriched data can then be organized by date, timing, and market cap for the final earnings calendar report.
|
|
579
|
+
|
|
580
|
+
## Resources
|
|
581
|
+
|
|
582
|
+
- **FMP Documentation**: https://site.financialmodelingprep.com/developer/docs
|
|
583
|
+
- **API Key Signup**: https://site.financialmodelingprep.com/developer/docs
|
|
584
|
+
- **Earnings Calendar API**: https://site.financialmodelingprep.com/developer/docs/earnings-calendar-api
|
|
585
|
+
- **Company Profile API**: https://site.financialmodelingprep.com/developer/docs/companies-key-metrics-api
|
|
586
|
+
- **Rate Limits**: https://site.financialmodelingprep.com/developer/docs/pricing
|
|
587
|
+
|
|
588
|
+
---
|
|
589
|
+
|
|
590
|
+
*This guide is optimized for the earnings-calendar skill and FMP API integration.*
|