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.
Files changed (362) hide show
  1. package/.claude/skills/README.md +80 -0
  2. package/.claude/skills/backtest-expert/SKILL.md +206 -0
  3. package/.claude/skills/backtest-expert/references/failed_tests.md +236 -0
  4. package/.claude/skills/backtest-expert/references/methodology.md +227 -0
  5. package/.claude/skills/breadth-chart-analyst/SKILL.md +583 -0
  6. package/.claude/skills/breadth-chart-analyst/assets/SP500_Breadth_Index_200MA_8MA.jpeg +0 -0
  7. package/.claude/skills/breadth-chart-analyst/assets/US_Stock_Market_Uptrend_Ratio.jpeg +0 -0
  8. package/.claude/skills/breadth-chart-analyst/assets/breadth_analysis_template.md +558 -0
  9. package/.claude/skills/breadth-chart-analyst/references/breadth_chart_methodology.md +590 -0
  10. package/.claude/skills/canslim-screener/SKILL.md +599 -0
  11. package/.claude/skills/canslim-screener/references/canslim_methodology.md +606 -0
  12. package/.claude/skills/canslim-screener/references/fmp_api_endpoints.md +707 -0
  13. package/.claude/skills/canslim-screener/references/interpretation_guide.md +516 -0
  14. package/.claude/skills/canslim-screener/references/scoring_system.md +597 -0
  15. package/.claude/skills/canslim-screener/scripts/calculators/earnings_calculator.py +343 -0
  16. package/.claude/skills/canslim-screener/scripts/calculators/growth_calculator.py +334 -0
  17. package/.claude/skills/canslim-screener/scripts/calculators/institutional_calculator.py +347 -0
  18. package/.claude/skills/canslim-screener/scripts/calculators/leadership_calculator.py +380 -0
  19. package/.claude/skills/canslim-screener/scripts/calculators/market_calculator.py +244 -0
  20. package/.claude/skills/canslim-screener/scripts/calculators/new_highs_calculator.py +194 -0
  21. package/.claude/skills/canslim-screener/scripts/calculators/supply_demand_calculator.py +221 -0
  22. package/.claude/skills/canslim-screener/scripts/finviz_stock_client.py +227 -0
  23. package/.claude/skills/canslim-screener/scripts/fmp_client.py +393 -0
  24. package/.claude/skills/canslim-screener/scripts/report_generator.py +405 -0
  25. package/.claude/skills/canslim-screener/scripts/scorer.py +625 -0
  26. package/.claude/skills/canslim-screener/scripts/screen_canslim.py +361 -0
  27. package/.claude/skills/canslim-screener/scripts/test_institutional_endpoint.py +109 -0
  28. package/.claude/skills/chart/SKILL.md +20 -0
  29. package/.claude/skills/dividend-growth-pullback-screener/SKILL.md +322 -0
  30. package/.claude/skills/dividend-growth-pullback-screener/references/dividend_growth_compounding.md +400 -0
  31. package/.claude/skills/dividend-growth-pullback-screener/references/fmp_api_guide.md +642 -0
  32. package/.claude/skills/dividend-growth-pullback-screener/references/rsi_oversold_strategy.md +333 -0
  33. package/.claude/skills/dividend-growth-pullback-screener/scripts/screen_dividend_growth_rsi.py +1155 -0
  34. package/.claude/skills/earnings-calendar/SKILL.md +721 -0
  35. package/.claude/skills/earnings-calendar/assets/earnings_report_template.md +102 -0
  36. package/.claude/skills/earnings-calendar/references/fmp_api_guide.md +590 -0
  37. package/.claude/skills/earnings-calendar/scripts/fetch_earnings_fmp.py +443 -0
  38. package/.claude/skills/earnings-calendar/scripts/generate_report.py +366 -0
  39. package/.claude/skills/economic-calendar-fetcher/SKILL.md +365 -0
  40. package/.claude/skills/economic-calendar-fetcher/references/fmp_api_documentation.md +345 -0
  41. package/.claude/skills/economic-calendar-fetcher/scripts/get_economic_calendar.py +267 -0
  42. package/.claude/skills/ftd-detector/SKILL.md +147 -0
  43. package/.claude/skills/ftd-detector/references/ftd_methodology.md +188 -0
  44. package/.claude/skills/ftd-detector/references/post_ftd_guide.md +185 -0
  45. package/.claude/skills/ftd-detector/scripts/fmp_client.py +158 -0
  46. package/.claude/skills/ftd-detector/scripts/ftd_detector.py +280 -0
  47. package/.claude/skills/ftd-detector/scripts/post_ftd_monitor.py +404 -0
  48. package/.claude/skills/ftd-detector/scripts/rally_tracker.py +508 -0
  49. package/.claude/skills/ftd-detector/scripts/report_generator.py +341 -0
  50. package/.claude/skills/ftd-detector/scripts/tests/conftest.py +9 -0
  51. package/.claude/skills/ftd-detector/scripts/tests/helpers.py +107 -0
  52. package/.claude/skills/ftd-detector/scripts/tests/test_post_ftd_monitor.py +311 -0
  53. package/.claude/skills/ftd-detector/scripts/tests/test_rally_tracker.py +302 -0
  54. package/.claude/skills/institutional-flow-tracker/README.md +362 -0
  55. package/.claude/skills/institutional-flow-tracker/SKILL.md +357 -0
  56. package/.claude/skills/institutional-flow-tracker/references/13f_filings_guide.md +383 -0
  57. package/.claude/skills/institutional-flow-tracker/references/institutional_investor_types.md +580 -0
  58. package/.claude/skills/institutional-flow-tracker/references/interpretation_framework.md +573 -0
  59. package/.claude/skills/institutional-flow-tracker/scripts/analyze_single_stock.py +457 -0
  60. package/.claude/skills/institutional-flow-tracker/scripts/track_institution_portfolio.py +108 -0
  61. package/.claude/skills/institutional-flow-tracker/scripts/track_institutional_flow.py +450 -0
  62. package/.claude/skills/macro-regime-detector/SKILL.md +86 -0
  63. package/.claude/skills/macro-regime-detector/references/historical_regimes.md +124 -0
  64. package/.claude/skills/macro-regime-detector/references/indicator_interpretation_guide.md +144 -0
  65. package/.claude/skills/macro-regime-detector/references/regime_detection_methodology.md +138 -0
  66. package/.claude/skills/macro-regime-detector/scripts/calculators/__init__.py +1 -0
  67. package/.claude/skills/macro-regime-detector/scripts/calculators/concentration_calculator.py +165 -0
  68. package/.claude/skills/macro-regime-detector/scripts/calculators/credit_conditions_calculator.py +124 -0
  69. package/.claude/skills/macro-regime-detector/scripts/calculators/equity_bond_calculator.py +198 -0
  70. package/.claude/skills/macro-regime-detector/scripts/calculators/sector_rotation_calculator.py +123 -0
  71. package/.claude/skills/macro-regime-detector/scripts/calculators/size_factor_calculator.py +131 -0
  72. package/.claude/skills/macro-regime-detector/scripts/calculators/utils.py +347 -0
  73. package/.claude/skills/macro-regime-detector/scripts/calculators/yield_curve_calculator.py +279 -0
  74. package/.claude/skills/macro-regime-detector/scripts/fmp_client.py +134 -0
  75. package/.claude/skills/macro-regime-detector/scripts/macro_regime_detector.py +278 -0
  76. package/.claude/skills/macro-regime-detector/scripts/report_generator.py +327 -0
  77. package/.claude/skills/macro-regime-detector/scripts/scorer.py +574 -0
  78. package/.claude/skills/macro-regime-detector/scripts/tests/conftest.py +9 -0
  79. package/.claude/skills/macro-regime-detector/scripts/tests/test_concentration.py +78 -0
  80. package/.claude/skills/macro-regime-detector/scripts/tests/test_credit_conditions.py +59 -0
  81. package/.claude/skills/macro-regime-detector/scripts/tests/test_equity_bond.py +74 -0
  82. package/.claude/skills/macro-regime-detector/scripts/tests/test_helpers.py +90 -0
  83. package/.claude/skills/macro-regime-detector/scripts/tests/test_scorer.py +439 -0
  84. package/.claude/skills/macro-regime-detector/scripts/tests/test_sector_rotation.py +78 -0
  85. package/.claude/skills/macro-regime-detector/scripts/tests/test_size_factor.py +59 -0
  86. package/.claude/skills/macro-regime-detector/scripts/tests/test_utils.py +126 -0
  87. package/.claude/skills/macro-regime-detector/scripts/tests/test_yield_curve.py +64 -0
  88. package/.claude/skills/market-breadth-analyzer/SKILL.md +121 -0
  89. package/.claude/skills/market-breadth-analyzer/references/breadth_analysis_methodology.md +168 -0
  90. package/.claude/skills/market-breadth-analyzer/scripts/calculators/__init__.py +1 -0
  91. package/.claude/skills/market-breadth-analyzer/scripts/calculators/bearish_signal_calculator.py +150 -0
  92. package/.claude/skills/market-breadth-analyzer/scripts/calculators/cycle_calculator.py +168 -0
  93. package/.claude/skills/market-breadth-analyzer/scripts/calculators/divergence_calculator.py +119 -0
  94. package/.claude/skills/market-breadth-analyzer/scripts/calculators/historical_context_calculator.py +120 -0
  95. package/.claude/skills/market-breadth-analyzer/scripts/calculators/ma_crossover_calculator.py +115 -0
  96. package/.claude/skills/market-breadth-analyzer/scripts/calculators/trend_level_calculator.py +103 -0
  97. package/.claude/skills/market-breadth-analyzer/scripts/csv_client.py +225 -0
  98. package/.claude/skills/market-breadth-analyzer/scripts/market_breadth_analyzer.py +307 -0
  99. package/.claude/skills/market-breadth-analyzer/scripts/report_generator.py +330 -0
  100. package/.claude/skills/market-breadth-analyzer/scripts/scorer.py +271 -0
  101. package/.claude/skills/market-environment-analysis/SKILL.md +139 -0
  102. package/.claude/skills/market-environment-analysis/references/analysis_patterns.md +124 -0
  103. package/.claude/skills/market-environment-analysis/references/indicators.md +99 -0
  104. package/.claude/skills/market-environment-analysis/scripts/market_utils.py +127 -0
  105. package/.claude/skills/market-news-analyst/SKILL.md +714 -0
  106. package/.claude/skills/market-news-analyst/references/corporate_news_impact.md +446 -0
  107. package/.claude/skills/market-news-analyst/references/geopolitical_commodity_correlations.md +499 -0
  108. package/.claude/skills/market-news-analyst/references/market_event_patterns.md +393 -0
  109. package/.claude/skills/market-news-analyst/references/trusted_news_sources.md +510 -0
  110. package/.claude/skills/market-top-detector/SKILL.md +159 -0
  111. package/.claude/skills/market-top-detector/references/distribution_day_guide.md +100 -0
  112. package/.claude/skills/market-top-detector/references/historical_tops.md +142 -0
  113. package/.claude/skills/market-top-detector/references/market_top_methodology.md +167 -0
  114. package/.claude/skills/market-top-detector/scripts/calculators/__init__.py +17 -0
  115. package/.claude/skills/market-top-detector/scripts/calculators/breadth_calculator.py +116 -0
  116. package/.claude/skills/market-top-detector/scripts/calculators/defensive_rotation_calculator.py +127 -0
  117. package/.claude/skills/market-top-detector/scripts/calculators/distribution_day_calculator.py +161 -0
  118. package/.claude/skills/market-top-detector/scripts/calculators/index_technical_calculator.py +254 -0
  119. package/.claude/skills/market-top-detector/scripts/calculators/leading_stock_calculator.py +198 -0
  120. package/.claude/skills/market-top-detector/scripts/calculators/sentiment_calculator.py +213 -0
  121. package/.claude/skills/market-top-detector/scripts/fmp_client.py +158 -0
  122. package/.claude/skills/market-top-detector/scripts/market_top_detector.py +349 -0
  123. package/.claude/skills/market-top-detector/scripts/report_generator.py +314 -0
  124. package/.claude/skills/market-top-detector/scripts/scorer.py +473 -0
  125. package/.claude/skills/market-top-detector/scripts/tests/conftest.py +9 -0
  126. package/.claude/skills/market-top-detector/scripts/tests/helpers.py +49 -0
  127. package/.claude/skills/market-top-detector/scripts/tests/test_breadth.py +62 -0
  128. package/.claude/skills/market-top-detector/scripts/tests/test_defensive_rotation.py +56 -0
  129. package/.claude/skills/market-top-detector/scripts/tests/test_distribution_day.py +92 -0
  130. package/.claude/skills/market-top-detector/scripts/tests/test_index_technical.py +73 -0
  131. package/.claude/skills/market-top-detector/scripts/tests/test_leading_stock.py +57 -0
  132. package/.claude/skills/market-top-detector/scripts/tests/test_scorer.py +180 -0
  133. package/.claude/skills/market-top-detector/scripts/tests/test_sentiment.py +64 -0
  134. package/.claude/skills/options-strategy-advisor/README.md +469 -0
  135. package/.claude/skills/options-strategy-advisor/SKILL.md +959 -0
  136. package/.claude/skills/options-strategy-advisor/scripts/black_scholes.py +495 -0
  137. package/.claude/skills/pair-trade-screener/README.md +389 -0
  138. package/.claude/skills/pair-trade-screener/SKILL.md +622 -0
  139. package/.claude/skills/pair-trade-screener/references/cointegration_guide.md +745 -0
  140. package/.claude/skills/pair-trade-screener/references/methodology.md +853 -0
  141. package/.claude/skills/pair-trade-screener/scripts/analyze_spread.py +394 -0
  142. package/.claude/skills/pair-trade-screener/scripts/find_pairs.py +535 -0
  143. package/.claude/skills/portfolio-manager/README.md +394 -0
  144. package/.claude/skills/portfolio-manager/SKILL.md +750 -0
  145. package/.claude/skills/portfolio-manager/references/alpaca-mcp-setup.md +367 -0
  146. package/.claude/skills/portfolio-manager/references/asset-allocation.md +502 -0
  147. package/.claude/skills/portfolio-manager/references/diversification-principles.md +553 -0
  148. package/.claude/skills/portfolio-manager/references/portfolio-risk-metrics.md +603 -0
  149. package/.claude/skills/portfolio-manager/references/position-evaluation.md +477 -0
  150. package/.claude/skills/portfolio-manager/references/rebalancing-strategies.md +715 -0
  151. package/.claude/skills/portfolio-manager/references/risk-profile-questionnaire.md +608 -0
  152. package/.claude/skills/portfolio-manager/references/target-allocations.md +558 -0
  153. package/.claude/skills/portfolio-manager/scripts/test_alpaca_connection.py +286 -0
  154. package/.claude/skills/scenario-analyzer/SKILL.md +317 -0
  155. package/.claude/skills/scenario-analyzer/references/headline_event_patterns.md +264 -0
  156. package/.claude/skills/scenario-analyzer/references/scenario_playbooks.md +320 -0
  157. package/.claude/skills/scenario-analyzer/references/sector_sensitivity_matrix.md +217 -0
  158. package/.claude/skills/sector-analyst/SKILL.md +206 -0
  159. package/.claude/skills/sector-analyst/assets/industory_performance_1.jpeg +0 -0
  160. package/.claude/skills/sector-analyst/assets/industory_performance_2.jpeg +0 -0
  161. package/.claude/skills/sector-analyst/assets/sector_performance.jpeg +0 -0
  162. package/.claude/skills/sector-analyst/references/sector_rotation.md +170 -0
  163. package/.claude/skills/stanley-druckenmiller-investment/SKILL.md +84 -0
  164. package/.claude/skills/stanley-druckenmiller-investment/references/case-studies.md +148 -0
  165. package/.claude/skills/stanley-druckenmiller-investment/references/investment-philosophy.md +80 -0
  166. package/.claude/skills/stanley-druckenmiller-investment/references/market-analysis-guide.md +146 -0
  167. package/.claude/skills/stock/NOTION_SETUP.md +33 -0
  168. package/.claude/skills/stock/SKILL.md +38 -0
  169. package/.claude/skills/technical-analyst/SKILL.md +238 -0
  170. package/.claude/skills/technical-analyst/assets/analysis_template.md +183 -0
  171. package/.claude/skills/technical-analyst/references/technical_analysis_framework.md +282 -0
  172. package/.claude/skills/theme-detector/SKILL.md +320 -0
  173. package/.claude/skills/theme-detector/assets/report_template.md +155 -0
  174. package/.claude/skills/theme-detector/references/cross_sector_themes.md +252 -0
  175. package/.claude/skills/theme-detector/references/finviz_industry_codes.md +403 -0
  176. package/.claude/skills/theme-detector/references/thematic_etf_catalog.md +333 -0
  177. package/.claude/skills/theme-detector/references/theme_detection_methodology.md +430 -0
  178. package/.claude/skills/theme-detector/scripts/calculators/__init__.py +1 -0
  179. package/.claude/skills/theme-detector/scripts/calculators/heat_calculator.py +123 -0
  180. package/.claude/skills/theme-detector/scripts/calculators/industry_ranker.py +98 -0
  181. package/.claude/skills/theme-detector/scripts/calculators/lifecycle_calculator.py +172 -0
  182. package/.claude/skills/theme-detector/scripts/calculators/theme_classifier.py +195 -0
  183. package/.claude/skills/theme-detector/scripts/calculators/theme_discoverer.py +280 -0
  184. package/.claude/skills/theme-detector/scripts/config_loader.py +142 -0
  185. package/.claude/skills/theme-detector/scripts/default_theme_config.py +254 -0
  186. package/.claude/skills/theme-detector/scripts/etf_scanner.py +609 -0
  187. package/.claude/skills/theme-detector/scripts/finviz_performance_client.py +131 -0
  188. package/.claude/skills/theme-detector/scripts/report_generator.py +490 -0
  189. package/.claude/skills/theme-detector/scripts/representative_stock_selector.py +673 -0
  190. package/.claude/skills/theme-detector/scripts/scorer.py +87 -0
  191. package/.claude/skills/theme-detector/scripts/tests/README.md +21 -0
  192. package/.claude/skills/theme-detector/scripts/tests/conftest.py +9 -0
  193. package/.claude/skills/theme-detector/scripts/tests/test_config_loader.py +239 -0
  194. package/.claude/skills/theme-detector/scripts/tests/test_etf_scanner.py +810 -0
  195. package/.claude/skills/theme-detector/scripts/tests/test_heat_calculator.py +245 -0
  196. package/.claude/skills/theme-detector/scripts/tests/test_industry_ranker.py +256 -0
  197. package/.claude/skills/theme-detector/scripts/tests/test_lifecycle_calculator.py +301 -0
  198. package/.claude/skills/theme-detector/scripts/tests/test_report_generator.py +624 -0
  199. package/.claude/skills/theme-detector/scripts/tests/test_representative_stock_selector.py +898 -0
  200. package/.claude/skills/theme-detector/scripts/tests/test_scorer.py +185 -0
  201. package/.claude/skills/theme-detector/scripts/tests/test_theme_classifier.py +534 -0
  202. package/.claude/skills/theme-detector/scripts/tests/test_theme_detector_e2e.py +467 -0
  203. package/.claude/skills/theme-detector/scripts/tests/test_theme_discoverer.py +458 -0
  204. package/.claude/skills/theme-detector/scripts/tests/test_uptrend_client.py +76 -0
  205. package/.claude/skills/theme-detector/scripts/theme_detector.py +815 -0
  206. package/.claude/skills/theme-detector/scripts/themes.yaml +168 -0
  207. package/.claude/skills/theme-detector/scripts/uptrend_client.py +241 -0
  208. package/.claude/skills/uptrend-analyzer/SKILL.md +108 -0
  209. package/.claude/skills/uptrend-analyzer/references/uptrend_methodology.md +215 -0
  210. package/.claude/skills/uptrend-analyzer/scripts/calculators/__init__.py +1 -0
  211. package/.claude/skills/uptrend-analyzer/scripts/calculators/historical_context_calculator.py +122 -0
  212. package/.claude/skills/uptrend-analyzer/scripts/calculators/market_breadth_calculator.py +145 -0
  213. package/.claude/skills/uptrend-analyzer/scripts/calculators/momentum_calculator.py +183 -0
  214. package/.claude/skills/uptrend-analyzer/scripts/calculators/sector_participation_calculator.py +204 -0
  215. package/.claude/skills/uptrend-analyzer/scripts/calculators/sector_rotation_calculator.py +218 -0
  216. package/.claude/skills/uptrend-analyzer/scripts/data_fetcher.py +236 -0
  217. package/.claude/skills/uptrend-analyzer/scripts/report_generator.py +329 -0
  218. package/.claude/skills/uptrend-analyzer/scripts/scorer.py +276 -0
  219. package/.claude/skills/uptrend-analyzer/scripts/uptrend_analyzer.py +219 -0
  220. package/.claude/skills/us-market-bubble-detector/CHANGELOG.md +118 -0
  221. package/.claude/skills/us-market-bubble-detector/SKILL.md +545 -0
  222. package/.claude/skills/us-market-bubble-detector/references/bubble_framework.md +335 -0
  223. package/.claude/skills/us-market-bubble-detector/references/historical_cases.md +327 -0
  224. package/.claude/skills/us-market-bubble-detector/references/implementation_guide.md +473 -0
  225. package/.claude/skills/us-market-bubble-detector/references/quick_reference.md +354 -0
  226. package/.claude/skills/us-market-bubble-detector/references/quick_reference_en.md +342 -0
  227. package/.claude/skills/us-market-bubble-detector/scripts/bubble_scorer.py +309 -0
  228. package/.claude/skills/us-stock-analysis/SKILL.md +294 -0
  229. package/.claude/skills/us-stock-analysis/references/financial-metrics.md +172 -0
  230. package/.claude/skills/us-stock-analysis/references/fundamental-analysis.md +129 -0
  231. package/.claude/skills/us-stock-analysis/references/report-template.md +207 -0
  232. package/.claude/skills/us-stock-analysis/references/technical-analysis.md +93 -0
  233. package/.claude/skills/value-dividend-screener/SKILL.md +562 -0
  234. package/.claude/skills/value-dividend-screener/references/fmp_api_guide.md +348 -0
  235. package/.claude/skills/value-dividend-screener/references/screening_methodology.md +315 -0
  236. package/.claude/skills/value-dividend-screener/scripts/screen_dividend_stocks.py +1138 -0
  237. package/.claude/skills/vcp-screener/SKILL.md +79 -0
  238. package/.claude/skills/vcp-screener/references/fmp_api_endpoints.md +45 -0
  239. package/.claude/skills/vcp-screener/references/scoring_system.md +154 -0
  240. package/.claude/skills/vcp-screener/references/vcp_methodology.md +124 -0
  241. package/.claude/skills/vcp-screener/scripts/calculators/__init__.py +1 -0
  242. package/.claude/skills/vcp-screener/scripts/calculators/pivot_proximity_calculator.py +139 -0
  243. package/.claude/skills/vcp-screener/scripts/calculators/relative_strength_calculator.py +161 -0
  244. package/.claude/skills/vcp-screener/scripts/calculators/trend_template_calculator.py +228 -0
  245. package/.claude/skills/vcp-screener/scripts/calculators/vcp_pattern_calculator.py +322 -0
  246. package/.claude/skills/vcp-screener/scripts/calculators/volume_pattern_calculator.py +121 -0
  247. package/.claude/skills/vcp-screener/scripts/fmp_client.py +162 -0
  248. package/.claude/skills/vcp-screener/scripts/report_generator.py +317 -0
  249. package/.claude/skills/vcp-screener/scripts/scorer.py +155 -0
  250. package/.claude/skills/vcp-screener/scripts/screen_vcp.py +536 -0
  251. package/.claude/skills/vcp-screener/scripts/tests/__init__.py +0 -0
  252. package/.claude/skills/vcp-screener/scripts/tests/conftest.py +9 -0
  253. package/.claude/skills/vcp-screener/scripts/tests/test_vcp_screener.py +834 -0
  254. package/.claude/skills/weekly-trade-strategy/.claude/agents/druckenmiller-strategy-planner.md +300 -0
  255. package/.claude/skills/weekly-trade-strategy/.claude/agents/market-news-analyzer.md +239 -0
  256. package/.claude/skills/weekly-trade-strategy/.claude/agents/technical-market-analyst.md +187 -0
  257. package/.claude/skills/weekly-trade-strategy/.claude/agents/us-market-analyst.md +218 -0
  258. package/.claude/skills/weekly-trade-strategy/.claude/agents/weekly-trade-blog-writer.md +318 -0
  259. package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/SKILL.md +662 -0
  260. package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/assets/SP500_Breadth_Index_200MA_8MA.jpeg +0 -0
  261. package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/assets/US_Stock_Market_Uptrend_Ratio.jpeg +0 -0
  262. package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/assets/breadth_analysis_template.md +558 -0
  263. package/.claude/skills/weekly-trade-strategy/.claude/skills/breadth-chart-analyst/references/breadth_chart_methodology.md +590 -0
  264. package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/SKILL.md +721 -0
  265. package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/assets/earnings_report_template.md +102 -0
  266. package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/earnings_calendar_2025-11-02.md +447 -0
  267. package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/references/fmp_api_guide.md +590 -0
  268. package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/scripts/fetch_earnings_fmp.py +443 -0
  269. package/.claude/skills/weekly-trade-strategy/.claude/skills/earnings-calendar/scripts/generate_report.py +366 -0
  270. package/.claude/skills/weekly-trade-strategy/.claude/skills/economic-calendar-fetcher/SKILL.md +365 -0
  271. package/.claude/skills/weekly-trade-strategy/.claude/skills/economic-calendar-fetcher/references/fmp_api_documentation.md +345 -0
  272. package/.claude/skills/weekly-trade-strategy/.claude/skills/economic-calendar-fetcher/scripts/get_economic_calendar.py +267 -0
  273. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-environment-analysis/SKILL.md +139 -0
  274. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-environment-analysis/references/analysis_patterns.md +124 -0
  275. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-environment-analysis/references/indicators.md +99 -0
  276. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-environment-analysis/scripts/market_utils.py +127 -0
  277. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/SKILL.md +714 -0
  278. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/references/corporate_news_impact.md +446 -0
  279. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/references/geopolitical_commodity_correlations.md +499 -0
  280. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/references/market_event_patterns.md +393 -0
  281. package/.claude/skills/weekly-trade-strategy/.claude/skills/market-news-analyst/references/trusted_news_sources.md +510 -0
  282. package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/SKILL.md +206 -0
  283. package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/assets/industory_performance_1.jpeg +0 -0
  284. package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/assets/industory_performance_2.jpeg +0 -0
  285. package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/assets/sector_performance.jpeg +0 -0
  286. package/.claude/skills/weekly-trade-strategy/.claude/skills/sector-analyst/references/sector_rotation.md +170 -0
  287. package/.claude/skills/weekly-trade-strategy/.claude/skills/stanley-druckenmiller-investment/SKILL.md +84 -0
  288. package/.claude/skills/weekly-trade-strategy/.claude/skills/stanley-druckenmiller-investment/references/case-studies.md +148 -0
  289. package/.claude/skills/weekly-trade-strategy/.claude/skills/stanley-druckenmiller-investment/references/investment-philosophy.md +80 -0
  290. package/.claude/skills/weekly-trade-strategy/.claude/skills/stanley-druckenmiller-investment/references/market-analysis-guide.md +146 -0
  291. package/.claude/skills/weekly-trade-strategy/.claude/skills/technical-analyst/SKILL.md +238 -0
  292. package/.claude/skills/weekly-trade-strategy/.claude/skills/technical-analyst/assets/analysis_template.md +183 -0
  293. package/.claude/skills/weekly-trade-strategy/.claude/skills/technical-analyst/references/technical_analysis_framework.md +282 -0
  294. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/CHANGELOG.md +118 -0
  295. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/SKILL.md +545 -0
  296. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/bubble_framework.md +335 -0
  297. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/historical_cases.md +327 -0
  298. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/implementation_guide.md +473 -0
  299. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/quick_reference.md +354 -0
  300. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/references/quick_reference_en.md +342 -0
  301. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-market-bubble-detector/scripts/bubble_scorer.py +309 -0
  302. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/SKILL.md +294 -0
  303. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/references/financial-metrics.md +172 -0
  304. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/references/fundamental-analysis.md +129 -0
  305. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/references/report-template.md +207 -0
  306. package/.claude/skills/weekly-trade-strategy/.claude/skills/us-stock-analysis/references/technical-analysis.md +93 -0
  307. package/.claude/skills/weekly-trade-strategy/CLAUDE.md +454 -0
  308. package/.claude/skills/weekly-trade-strategy/README.md +287 -0
  309. package/.claude/skills/weekly-trade-strategy/blogs/.gitkeep +0 -0
  310. package/.claude/skills/weekly-trade-strategy/charts/.gitkeep +0 -0
  311. package/.claude/skills/weekly-trade-strategy/earnings_data.json +10054 -0
  312. package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/SKILL.md +662 -0
  313. package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/assets/SP500_Breadth_Index_200MA_8MA.jpeg +0 -0
  314. package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/assets/US_Stock_Market_Uptrend_Ratio.jpeg +0 -0
  315. package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/assets/breadth_analysis_template.md +558 -0
  316. package/.claude/skills/weekly-trade-strategy/skills/breadth-chart-analyst/references/breadth_chart_methodology.md +590 -0
  317. package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/SKILL.md +721 -0
  318. package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/assets/earnings_report_template.md +102 -0
  319. package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/earnings_calendar_2025-11-02.md +447 -0
  320. package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/references/fmp_api_guide.md +590 -0
  321. package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/scripts/fetch_earnings_fmp.py +443 -0
  322. package/.claude/skills/weekly-trade-strategy/skills/earnings-calendar/scripts/generate_report.py +366 -0
  323. package/.claude/skills/weekly-trade-strategy/skills/economic-calendar-fetcher/SKILL.md +365 -0
  324. package/.claude/skills/weekly-trade-strategy/skills/economic-calendar-fetcher/references/fmp_api_documentation.md +345 -0
  325. package/.claude/skills/weekly-trade-strategy/skills/economic-calendar-fetcher/scripts/get_economic_calendar.py +267 -0
  326. package/.claude/skills/weekly-trade-strategy/skills/market-environment-analysis/SKILL.md +139 -0
  327. package/.claude/skills/weekly-trade-strategy/skills/market-environment-analysis/references/analysis_patterns.md +124 -0
  328. package/.claude/skills/weekly-trade-strategy/skills/market-environment-analysis/references/indicators.md +99 -0
  329. package/.claude/skills/weekly-trade-strategy/skills/market-environment-analysis/scripts/market_utils.py +127 -0
  330. package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/SKILL.md +714 -0
  331. package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/references/corporate_news_impact.md +446 -0
  332. package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/references/geopolitical_commodity_correlations.md +499 -0
  333. package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/references/market_event_patterns.md +393 -0
  334. package/.claude/skills/weekly-trade-strategy/skills/market-news-analyst/references/trusted_news_sources.md +510 -0
  335. package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/SKILL.md +206 -0
  336. package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/assets/industory_performance_1.jpeg +0 -0
  337. package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/assets/industory_performance_2.jpeg +0 -0
  338. package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/assets/sector_performance.jpeg +0 -0
  339. package/.claude/skills/weekly-trade-strategy/skills/sector-analyst/references/sector_rotation.md +170 -0
  340. package/.claude/skills/weekly-trade-strategy/skills/stanley-druckenmiller-investment/SKILL.md +84 -0
  341. package/.claude/skills/weekly-trade-strategy/skills/stanley-druckenmiller-investment/references/case-studies.md +148 -0
  342. package/.claude/skills/weekly-trade-strategy/skills/stanley-druckenmiller-investment/references/investment-philosophy.md +80 -0
  343. package/.claude/skills/weekly-trade-strategy/skills/stanley-druckenmiller-investment/references/market-analysis-guide.md +146 -0
  344. package/.claude/skills/weekly-trade-strategy/skills/technical-analyst/SKILL.md +238 -0
  345. package/.claude/skills/weekly-trade-strategy/skills/technical-analyst/assets/analysis_template.md +183 -0
  346. package/.claude/skills/weekly-trade-strategy/skills/technical-analyst/references/technical_analysis_framework.md +282 -0
  347. package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/CHANGELOG.md +118 -0
  348. package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/SKILL.md +545 -0
  349. package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/bubble_framework.md +335 -0
  350. package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/historical_cases.md +327 -0
  351. package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/implementation_guide.md +473 -0
  352. package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/quick_reference.md +354 -0
  353. package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/references/quick_reference_en.md +342 -0
  354. package/.claude/skills/weekly-trade-strategy/skills/us-market-bubble-detector/scripts/bubble_scorer.py +309 -0
  355. package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/SKILL.md +294 -0
  356. package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/references/financial-metrics.md +172 -0
  357. package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/references/fundamental-analysis.md +129 -0
  358. package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/references/report-template.md +207 -0
  359. package/.claude/skills/weekly-trade-strategy/skills/us-stock-analysis/references/technical-analysis.md +93 -0
  360. package/.mcp.json +3 -0
  361. package/cli.mjs +16 -16
  362. 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.*