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,642 @@
1
+ # Financial Modeling Prep (FMP) API Guide
2
+
3
+ ## Overview
4
+
5
+ Financial Modeling Prep provides comprehensive financial data APIs for stocks, forex, cryptocurrencies, and more. This guide focuses on endpoints used for dividend growth stock screening with RSI technical indicators.
6
+
7
+ ### Two-Stage Screening Approach
8
+
9
+ This screener supports two screening modes:
10
+
11
+ **1. Two-Stage (FINVIZ + FMP) - RECOMMENDED**
12
+ - **Stage 1**: FINVIZ Elite API pre-screens with RSI filter (1 API call → 10-50 candidates)
13
+ - **Stage 2**: FMP API performs detailed fundamental analysis on pre-screened candidates
14
+ - **Advantage**: Dramatically reduces FMP API calls by leveraging FINVIZ's technical filters
15
+ - **Cost**: FINVIZ Elite $40/month + FMP free tier
16
+
17
+ **2. FMP-Only (Original Method)**
18
+ - **Single Stage**: FMP stock-screener + detailed analysis
19
+ - **Limitation**: FMP free tier (250 requests/day) limits to ~40 stocks
20
+ - **Cost**: FMP free tier (upgrades available)
21
+
22
+ **Recommended**: Two-stage approach for regular screening (daily/weekly) to maximize coverage while minimizing costs.
23
+
24
+ ## API Key Setup
25
+
26
+ ### Obtaining an API Key
27
+
28
+ 1. Visit https://financialmodelingprep.com/developer/docs
29
+ 2. Sign up for a free account
30
+ 3. Navigate to Dashboard → API Keys
31
+ 4. Copy your API key
32
+
33
+ ### Free Tier Limits
34
+
35
+ - **250 requests per day**
36
+ - **Rate limit**: ~5 requests per second
37
+ - **No credit card required**
38
+ - Sufficient for daily/weekly screening runs
39
+
40
+ ### Paid Tiers (Optional)
41
+
42
+ - **Starter ($14/month)**: 500 requests/day
43
+ - **Professional ($29/month)**: 1,000 requests/day
44
+ - **Enterprise ($99/month)**: 10,000 requests/day
45
+
46
+ ## Setting API Key
47
+
48
+ ### Method 1: Environment Variable (Recommended)
49
+
50
+ **Linux/macOS:**
51
+ ```bash
52
+ export FMP_API_KEY=your_api_key_here
53
+ ```
54
+
55
+ **Windows (Command Prompt):**
56
+ ```cmd
57
+ set FMP_API_KEY=your_api_key_here
58
+ ```
59
+
60
+ **Windows (PowerShell):**
61
+ ```powershell
62
+ $env:FMP_API_KEY="your_api_key_here"
63
+ ```
64
+
65
+ **Persistent (add to shell profile):**
66
+ ```bash
67
+ # Add to ~/.bashrc or ~/.zshrc
68
+ echo 'export FMP_API_KEY=your_api_key_here' >> ~/.bashrc
69
+ source ~/.bashrc
70
+ ```
71
+
72
+ ### Method 2: Command-Line Argument
73
+
74
+ ```bash
75
+ python3 scripts/screen_dividend_growth_rsi.py --fmp-api-key your_api_key_here
76
+ ```
77
+
78
+ ## FINVIZ API Setup (Optional - For Two-Stage Screening)
79
+
80
+ ### Obtaining FINVIZ Elite API Key
81
+
82
+ 1. Visit https://elite.finviz.com
83
+ 2. Subscribe to FINVIZ Elite ($40/month or $400/year)
84
+ 3. Navigate to Settings → API
85
+ 4. Copy your API key
86
+
87
+ ### Setting FINVIZ API Key
88
+
89
+ **Environment Variable (Recommended):**
90
+ ```bash
91
+ export FINVIZ_API_KEY=your_finviz_key_here
92
+ ```
93
+
94
+ **Command-Line Argument:**
95
+ ```bash
96
+ python3 screen_dividend_growth_rsi.py --use-finviz --finviz-api-key YOUR_KEY
97
+ ```
98
+
99
+ ### FINVIZ Pre-Screening Filters
100
+
101
+ When using `--use-finviz`, the screener applies these filters via FINVIZ Elite API:
102
+
103
+ - **Market Cap**: Mid-cap or higher (≥$2B)
104
+ - **Dividend Yield**: 0.5-3% (captures dividend growers, excludes high-yield REITs/utilities)
105
+ - **Dividend Growth (3Y)**: 10%+ (FMP verifies 12%+)
106
+ - **EPS Growth (3Y)**: 5%+ (positive earnings momentum)
107
+ - **Sales Growth (3Y)**: 5%+ (positive revenue momentum)
108
+ - **RSI (14-period)**: Under 40 (oversold/pullback)
109
+ - **Geography**: USA
110
+
111
+ **Output**: Set of stock symbols (typically 30-50 stocks) passed to FMP for detailed analysis.
112
+
113
+ **Rationale for balanced filters:**
114
+ - 10%+ dividend growth ensures high-quality dividend compounders
115
+ - 5%+ EPS/sales growth captures growing businesses (not just mature dividend payers)
116
+ - 0.5-3% yield range excludes mature high-yielders (>4%) and focuses on growth stocks
117
+ - Reduces FINVIZ candidates from ~90 to ~30-50 stocks
118
+ - Stays within FMP free tier limits with efficient analysis (250 requests/day)
119
+
120
+ ## Key Endpoints Used
121
+
122
+ ### 1. Stock Screener
123
+
124
+ **Endpoint:** `/v3/stock-screener`
125
+
126
+ **Purpose:** Initial filtering by market cap and exchange
127
+
128
+ **Parameters:**
129
+ - `marketCapMoreThan`: Minimum market cap (e.g., 2000000000 = $2B)
130
+ - `exchange`: Exchanges to include (e.g., "NASDAQ,NYSE")
131
+ - `limit`: Max results (default: 1000)
132
+
133
+ **Note:** This screener does NOT pre-filter by dividend yield (unlike value-dividend-screener). We retrieve a broader universe and calculate actual yields from dividend history to ensure accuracy.
134
+
135
+ **Example Request:**
136
+ ```
137
+ https://financialmodelingprep.com/api/v3/stock-screener?
138
+ marketCapMoreThan=2000000000&
139
+ exchange=NASDAQ,NYSE&
140
+ limit=1000&
141
+ apikey=YOUR_API_KEY
142
+ ```
143
+
144
+ **Response Format:**
145
+ ```json
146
+ [
147
+ {
148
+ "symbol": "AAPL",
149
+ "companyName": "Apple Inc.",
150
+ "marketCap": 2800000000000,
151
+ "sector": "Technology",
152
+ "industry": "Consumer Electronics",
153
+ "price": 185.50,
154
+ "exchange": "NASDAQ",
155
+ "isActivelyTrading": true
156
+ }
157
+ ]
158
+ ```
159
+
160
+ ### 2. Historical Dividend
161
+
162
+ **Endpoint:** `/v3/historical-price-full/stock_dividend/{symbol}`
163
+
164
+ **Purpose:** Dividend history for growth rate calculation and yield verification
165
+
166
+ **Example Request:**
167
+ ```
168
+ https://financialmodelingprep.com/api/v3/historical-price-full/stock_dividend/AAPL?
169
+ apikey=YOUR_API_KEY
170
+ ```
171
+
172
+ **Response Format:**
173
+ ```json
174
+ {
175
+ "symbol": "AAPL",
176
+ "historical": [
177
+ {
178
+ "date": "2024-11-08",
179
+ "label": "November 08, 24",
180
+ "adjDividend": 0.25,
181
+ "dividend": 0.25,
182
+ "recordDate": "2024-11-11",
183
+ "paymentDate": "2024-11-14",
184
+ "declarationDate": "2024-10-31"
185
+ }
186
+ ]
187
+ }
188
+ ```
189
+
190
+ **Usage in Script:**
191
+ - Aggregate dividends by calendar year (sum all payments in each year)
192
+ - Calculate 3-year dividend CAGR: `((Div_Year3 / Div_Year0) ^ (1/3) - 1) × 100`
193
+ - Extract latest annual dividend for yield calculation
194
+ - Verify consistency (no significant cuts year-over-year)
195
+
196
+ ### 3. Historical Prices (NEW for RSI)
197
+
198
+ **Endpoint:** `/v3/historical-price-full/{symbol}`
199
+
200
+ **Purpose:** Daily price data for RSI calculation
201
+
202
+ **Parameters:**
203
+ - `symbol`: Stock ticker
204
+ - `timeseries`: Number of days to retrieve (e.g., 30)
205
+
206
+ **Example Request:**
207
+ ```
208
+ https://financialmodelingprep.com/api/v3/historical-price-full/AAPL?
209
+ timeseries=30&
210
+ apikey=YOUR_API_KEY
211
+ ```
212
+
213
+ **Response Format:**
214
+ ```json
215
+ {
216
+ "symbol": "AAPL",
217
+ "historical": [
218
+ {
219
+ "date": "2024-11-01",
220
+ "open": 184.50,
221
+ "high": 186.20,
222
+ "low": 183.80,
223
+ "close": 185.50,
224
+ "adjClose": 185.50,
225
+ "volume": 45000000,
226
+ "unadjustedVolume": 45000000,
227
+ "change": 1.00,
228
+ "changePercent": 0.54,
229
+ "vwap": 185.10,
230
+ "label": "November 01, 24",
231
+ "changeOverTime": 0.0054
232
+ }
233
+ ]
234
+ }
235
+ ```
236
+
237
+ **Usage in Script:**
238
+ - Extract `close` prices from last 30 days
239
+ - Sort chronologically (oldest first)
240
+ - Calculate 14-period RSI:
241
+ 1. Compute price changes (close[i] - close[i-1])
242
+ 2. Separate gains and losses
243
+ 3. Calculate average gain and average loss over 14 periods
244
+ 4. RS = Average Gain / Average Loss
245
+ 5. RSI = 100 - (100 / (1 + RS))
246
+
247
+ **RSI Filter:** Stocks with RSI > 40 are excluded (not oversold/pullback)
248
+
249
+ ### 4. Income Statement
250
+
251
+ **Endpoint:** `/v3/income-statement/{symbol}`
252
+
253
+ **Purpose:** Revenue, EPS, net income analysis
254
+
255
+ **Parameters:**
256
+ - `symbol`: Stock ticker (e.g., "AAPL")
257
+ - `limit`: Number of periods (e.g., 5 for 5 years)
258
+ - `period`: "annual" (default)
259
+
260
+ **Example Request:**
261
+ ```
262
+ https://financialmodelingprep.com/api/v3/income-statement/AAPL?
263
+ limit=5&
264
+ apikey=YOUR_API_KEY
265
+ ```
266
+
267
+ **Key Fields Used:**
268
+ - `revenue`: Total revenue
269
+ - `eps`: Earnings per share
270
+ - `netIncome`: Net income (for payout ratio calculation)
271
+ - `date`: Fiscal period end date
272
+
273
+ **Usage in Script:**
274
+ - Calculate 3-year revenue CAGR (must be positive for qualification)
275
+ - Calculate 3-year EPS CAGR (must be positive)
276
+ - Extract net income for payout ratio calculation
277
+
278
+ ### 5. Balance Sheet Statement
279
+
280
+ **Endpoint:** `/v3/balance-sheet-statement/{symbol}`
281
+
282
+ **Purpose:** Debt, equity, liquidity analysis
283
+
284
+ **Parameters:**
285
+ - `symbol`: Stock ticker
286
+ - `limit`: Number of periods (typically 5)
287
+
288
+ **Key Fields Used:**
289
+ - `totalDebt`: Total debt (short-term + long-term)
290
+ - `totalStockholdersEquity`: Shareholders' equity
291
+ - `totalCurrentAssets`: Current assets
292
+ - `totalCurrentLiabilities`: Current liabilities
293
+
294
+ **Usage in Script:**
295
+ - Debt-to-Equity: totalDebt / totalStockholdersEquity (must be < 2.0)
296
+ - Current Ratio: totalCurrentAssets / totalCurrentLiabilities (must be > 1.0)
297
+ - Financial health check (both ratios must pass)
298
+
299
+ ### 6. Cash Flow Statement
300
+
301
+ **Endpoint:** `/v3/cash-flow-statement/{symbol}`
302
+
303
+ **Purpose:** Free cash flow analysis for dividend sustainability
304
+
305
+ **Parameters:**
306
+ - `symbol`: Stock ticker
307
+ - `limit`: Number of periods
308
+
309
+ **Key Fields Used:**
310
+ - `freeCashFlow`: Free cash flow (OCF - Capex)
311
+ - `dividendsPaid`: Actual dividends paid (negative value)
312
+
313
+ **Usage in Script:**
314
+ - FCF Payout Ratio: dividendsPaid / freeCashFlow
315
+ - Validates dividend is covered by cash generation (< 100% is sustainable)
316
+
317
+ ### 7. Key Metrics
318
+
319
+ **Endpoint:** `/v3/key-metrics/{symbol}`
320
+
321
+ **Purpose:** ROE, profit margins, valuation ratios
322
+
323
+ **Parameters:**
324
+ - `symbol`: Stock ticker
325
+ - `limit`: Number of periods (typically 1 for latest)
326
+
327
+ **Key Fields Used:**
328
+ - `roe`: Return on Equity (decimal, e.g., 0.15 = 15%)
329
+ - `netProfitMargin`: Net profit margin (decimal)
330
+ - `peRatio`: Price-to-Earnings ratio
331
+ - `pbRatio`: Price-to-Book ratio
332
+ - `numberOfShares`: Shares outstanding (for payout ratio calculation)
333
+
334
+ **Usage in Script:**
335
+ - ROE: Quality metric for composite scoring (higher is better)
336
+ - Profit Margin: Profitability metric for scoring
337
+ - P/E and P/B: Context only (no exclusionary limits in this screener)
338
+ - Number of Shares: Used to calculate total dividend payout
339
+
340
+ ## Rate Limiting Strategy
341
+
342
+ ### Built-in Protection
343
+
344
+ The screening script includes rate limiting:
345
+ - **0.3 second delay** between requests (~3 requests/second)
346
+ - **Automatic retry** on 429 (rate limit exceeded) with 60-second backoff
347
+ - **Timeout**: 30 seconds per request
348
+ - **Graceful degradation**: Stops analysis if rate limit reached, returns partial results
349
+
350
+ ### Managing Request Budget
351
+
352
+ For free tier (250 requests/day):
353
+
354
+ **Requests per stock analyzed:**
355
+ - Stock Screener: 1 request (returns 100-1000 stocks)
356
+ - Dividend History: 1 request per symbol
357
+ - Historical Prices (RSI): 1 request per symbol
358
+ - Income Statement: 1 request per symbol
359
+ - Balance Sheet: 1 request per symbol
360
+ - Cash Flow: 1 request per symbol
361
+ - Key Metrics: 1 request per symbol
362
+
363
+ **Total: 6 requests per symbol + 1 screener request**
364
+
365
+ **Budget allocation:**
366
+ - Initial screener: 1 request
367
+ - Detailed analysis: 6 × N stocks = 6N requests
368
+ - **Maximum stocks per run**: (250 - 1) / 6 = ~41 stocks
369
+
370
+ **FMP-Only Mode Optimization**: Use `--max-candidates` parameter to limit analysis:
371
+ ```bash
372
+ python3 screen_dividend_growth_rsi.py --max-candidates 40
373
+ ```
374
+
375
+ **Two-Stage Mode (RECOMMENDED)**:
376
+
377
+ When using FINVIZ pre-screening (`--use-finviz`):
378
+
379
+ **Request breakdown:**
380
+ - FINVIZ pre-screen: 1 FINVIZ API call → 10-50 symbols
381
+ - FMP quote fetching: 1 request per symbol (to get current price)
382
+ - FMP detailed analysis: 6 requests per symbol (dividend, prices, income, balance, cashflow, metrics)
383
+
384
+ **Total FMP requests**:
385
+ - 10 symbols: 10 + (6 × 10) = 70 requests
386
+ - 30 symbols: 30 + (6 × 30) = 210 requests
387
+ - 50 symbols: 50 + (6 × 50) = 350 requests (exceeds free tier)
388
+
389
+ **Advantage**: FINVIZ's RSI filter typically returns 10-30 stocks (not 1000), making FMP analysis feasible within free tier limits.
390
+
391
+ **Cost comparison:**
392
+ - **FMP Starter Plan** ($14/month, 500 requests): ~80 stocks/day
393
+ - **FINVIZ Elite + FMP Free** ($40/month, 250 FMP requests): ~30 stocks/day with RSI pre-filtering
394
+ - **Result**: FINVIZ approach provides higher-quality candidates (RSI pre-filtered) despite lower volume
395
+
396
+ ### Best Practices
397
+
398
+ 1. **Use FINVIZ two-stage for regular screening**: Maximizes candidate quality, stays within FMP free tier
399
+ 2. **Run FMP-only for one-time analysis**: Good for testing or when FINVIZ subscription not available
400
+ 3. **Run during off-peak hours**: Lower chance of rate limits
401
+ 4. **Space out runs**: Once daily or weekly, not multiple times per hour
402
+ 5. **Cache results**: Save JSON output and analyze locally
403
+ 6. **Upgrade if needed**: If screening >30 stocks daily, consider FMP Starter ($14/month)
404
+
405
+ ## Error Handling
406
+
407
+ ### Common Errors
408
+
409
+ **1. Invalid API Key**
410
+ ```json
411
+ {
412
+ "Error Message": "Invalid API KEY. Please retry or visit our documentation."
413
+ }
414
+ ```
415
+ **Solution**: Check API key, verify it's active in FMP dashboard
416
+
417
+ **2. Rate Limit Exceeded (429)**
418
+ ```json
419
+ {
420
+ "Error Message": "You have exceeded the rate limit. Please wait."
421
+ }
422
+ ```
423
+ **Solution**: Script automatically retries once after 60 seconds. If persistent, wait 24 hours for rate limit reset.
424
+
425
+ **3. Symbol Not Found**
426
+ ```json
427
+ {
428
+ "Error Message": "Invalid ticker symbol"
429
+ }
430
+ ```
431
+ **Solution**: Script skips symbol and continues (expected for delisted/invalid tickers)
432
+
433
+ **4. Insufficient Price Data for RSI**
434
+ - Empty array or < 20 days of price data
435
+ **Solution**: Script skips symbol (common for newly listed stocks, low-volume stocks, or data gaps)
436
+
437
+ **5. Insufficient Dividend Data**
438
+ - Empty dividend history or < 4 years of data
439
+ **Solution**: Script skips symbol (requires 4+ years to calculate 3-year CAGR)
440
+
441
+ ### Debugging
442
+
443
+ **Check request count:**
444
+ ```bash
445
+ # Count API calls in script output
446
+ python3 scripts/screen_dividend_growth_rsi.py 2>&1 | grep "Analyzing" | wc -l
447
+ ```
448
+
449
+ **Monitor rate limit status:**
450
+ Script outputs warning when approaching limit:
451
+ ```
452
+ ⚠️ API rate limit reached after analyzing 41 stocks.
453
+ Returning results collected so far: 3 qualified stocks
454
+ ```
455
+
456
+ **Verbose debugging (if needed):**
457
+ Add at top of script:
458
+ ```python
459
+ import logging
460
+ logging.basicConfig(level=logging.DEBUG)
461
+ ```
462
+
463
+ ## Data Quality Considerations
464
+
465
+ ### Data Freshness
466
+
467
+ - **Annual statements**: Updated after fiscal year end (delays possible)
468
+ - **Real-time prices**: Updated during market hours
469
+ - **Dividend history**: Updated after declaration/payment
470
+ - **RSI calculation**: Based on most recent 30 days of price data
471
+
472
+ ### Data Gaps
473
+
474
+ Some stocks may have:
475
+ - **Incomplete price history**: < 30 days (newly public, suspended trading)
476
+ - **Missing dividends**: Not all dividend-paying stocks report via API
477
+ - **Inconsistent metrics**: Different accounting standards, restatements
478
+ - **Adjusted prices**: Stock splits, dividends affect historical prices
479
+
480
+ **Script behavior**: Skips stocks with insufficient data (requires 4+ years dividends, 30+ days prices)
481
+
482
+ ### Data Accuracy
483
+
484
+ FMP sources data from:
485
+ - SEC EDGAR filings (US companies)
486
+ - Exchange data feeds (real-time prices)
487
+ - Company investor relations
488
+
489
+ **Note**: Always verify critical investment decisions with:
490
+ - Company filings (10-K, 10-Q) at sec.gov
491
+ - Company investor relations websites
492
+ - Multiple data sources for confirmation
493
+
494
+ ### RSI Calculation Accuracy
495
+
496
+ **Inputs:**
497
+ - 30 days of closing prices (ensures 14-period RSI + buffer)
498
+ - Standard 14-period RSI formula
499
+
500
+ **Potential issues:**
501
+ - **Data gaps**: Weekends, holidays, halted trading (script uses available data)
502
+ - **Split adjustments**: FMP provides adjusted prices (correct behavior)
503
+ - **Intraday volatility**: RSI uses only closing prices (not intraday highs/lows)
504
+
505
+ **Validation**: Compare calculated RSI with other sources (TradingView, Yahoo Finance) to verify accuracy.
506
+
507
+ ## Screening Workflow
508
+
509
+ ### Request Sequence
510
+
511
+ ```
512
+ 1. Stock Screener (1 request)
513
+ ↓ Returns 100-1000 candidates
514
+
515
+ For each candidate (up to max-candidates limit):
516
+
517
+ 2. Dividend History (1 request)
518
+ ↓ Calculate dividend yield and CAGR
519
+ ↓ If yield < 1.5% or CAGR < 12% → Skip
520
+
521
+ 3. Historical Prices (1 request)
522
+ ↓ Calculate RSI
523
+ ↓ If RSI > 40 → Skip
524
+
525
+ 4. Income Statement (1 request)
526
+ ↓ Calculate revenue/EPS growth
527
+ ↓ If negative growth → Skip
528
+
529
+ 5. Balance Sheet (1 request)
530
+ ↓ Check financial health
531
+ ↓ If unhealthy ratios → Skip
532
+
533
+ 6. Cash Flow (1 request)
534
+ ↓ Calculate FCF payout ratio
535
+
536
+ 7. Key Metrics (1 request)
537
+ ↓ Extract ROE, margins, valuation
538
+
539
+ 8. Composite Scoring
540
+ ↓ Rank qualified stocks
541
+
542
+ 9. Output JSON + Markdown Report
543
+ ```
544
+
545
+ **Optimization**: Early exits reduce API calls. If a stock fails dividend or RSI checks (steps 2-3), remaining 4 API calls are skipped.
546
+
547
+ ## API Documentation
548
+
549
+ **Official Docs**: https://financialmodelingprep.com/developer/docs
550
+
551
+ **Key Sections:**
552
+ - Stock Fundamentals API
553
+ - Stock Screener API
554
+ - Historical Dividend API
555
+ - Historical Price API
556
+ - Ratios API
557
+
558
+ **Support**: support@financialmodelingprep.com
559
+
560
+ ## Alternative Data Sources
561
+
562
+ If FMP limits are restrictive:
563
+
564
+ 1. **Alpha Vantage**: Free tier, 500 requests/day, includes RSI endpoint
565
+ 2. **Yahoo Finance (yfinance)**: Free, unlimited, Python library available
566
+ 3. **Quandl/Nasdaq Data Link**: Free tier available for fundamental data
567
+ 4. **IEX Cloud**: Free tier, 50k messages/month
568
+
569
+ **Implementation Notes:**
570
+ - Alternative sources require script modifications for different data formats
571
+ - Yahoo Finance (yfinance) provides built-in RSI calculation
572
+ - Alpha Vantage has dedicated technical indicators endpoint
573
+
574
+ **yfinance Example (Free Alternative):**
575
+ ```python
576
+ import yfinance as yf
577
+
578
+ # Get stock data
579
+ ticker = yf.Ticker("AAPL")
580
+
581
+ # Dividend history
582
+ dividends = ticker.dividends
583
+
584
+ # Historical prices
585
+ prices = ticker.history(period="1mo")
586
+
587
+ # Calculate RSI manually or use TA-Lib
588
+ ```
589
+
590
+ **Trade-offs:**
591
+ - FMP: Structured, comprehensive, rate-limited
592
+ - yfinance: Free, unlimited, less reliable (Yahoo API changes frequently)
593
+ - Alpha Vantage: Good for technical indicators, limited fundamental data
594
+
595
+ ## Troubleshooting
596
+
597
+ ### "No Results Found"
598
+
599
+ **Possible Causes:**
600
+ 1. All stocks failed RSI check (market not oversold)
601
+ 2. High dividend growth (12%+) is rare
602
+ 3. API rate limit reached before finding qualified stocks
603
+
604
+ **Solutions:**
605
+ - Relax RSI: `--rsi-max 45`
606
+ - Lower dividend growth: `--min-div-growth 10.0`
607
+ - Reduce candidates: `--max-candidates 30` to avoid rate limit
608
+ - Check during market corrections (more oversold opportunities)
609
+
610
+ ### "Rate Limit Reached Quickly"
611
+
612
+ **Causes:**
613
+ - Used API for other purposes earlier today
614
+ - Script analyzed many stocks before finding qualified ones
615
+ - API limit reset not yet occurred (resets at UTC midnight)
616
+
617
+ **Solutions:**
618
+ - Wait 24 hours for rate limit reset
619
+ - Use `--max-candidates 30` to conserve requests
620
+ - Upgrade to paid tier ($14/month for 500 requests/day)
621
+ - Check current usage in FMP dashboard
622
+
623
+ ### "RSI Calculation Errors"
624
+
625
+ **Causes:**
626
+ - Stock has < 20 days of trading history
627
+ - Data gaps (suspended trading, newly listed)
628
+ - API returned incomplete price data
629
+
630
+ **Solution:**
631
+ Script automatically skips these stocks with warning:
632
+ ```
633
+ ⚠️ Insufficient price data for RSI calculation
634
+ ```
635
+
636
+ No action needed - this is expected behavior.
637
+
638
+ ---
639
+
640
+ **Last Updated**: November 2025
641
+ **Script Version**: 1.0
642
+ **FMP API Version**: v3