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