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,597 @@
1
+ # CANSLIM Scoring System - Phase 1 MVP
2
+
3
+ ## Overview
4
+
5
+ This document specifies the composite scoring system for the CANSLIM screener. Phase 1 MVP implements **4 of 7** components (C, A, N, M), representing 55% of the full CANSLIM methodology weight. Component weights are renormalized to 100% for Phase 1 to provide meaningful composite scores.
6
+
7
+ **Full CANSLIM (Phases 2-3)** will restore original weights once S, L, I components are added.
8
+
9
+ ---
10
+
11
+ ## Component Weights
12
+
13
+ ### Phase 1 MVP Weights (4 Components)
14
+
15
+ | Component | Original Weight | Phase 1 Weight | Rationale |
16
+ |-----------|----------------|----------------|-----------|
17
+ | **C** - Current Earnings | 15% | **27%** | Most predictive single factor (O'Neil's #1) |
18
+ | **A** - Annual Growth | 20% | **36%** | Highest weight - validates sustainability |
19
+ | **N** - Newness | 15% | **27%** | Momentum confirmation critical |
20
+ | **M** - Market Direction | 5% | **10%** | Gating filter - affects all stocks |
21
+ | **Total (Phase 1)** | **55%** | **100%** | Renormalized |
22
+
23
+ **Missing in Phase 1** (to be added in Phases 2-3):
24
+ - **S** - Supply/Demand (15% original weight)
25
+ - **L** - Leadership (20% original weight)
26
+ - **I** - Institutional Sponsorship (10% original weight)
27
+
28
+ ### Future Phase Weights
29
+
30
+ **Phase 2** (6 components - C, A, N, S, I, M):
31
+ - Restore S (15%) and I (10%)
32
+ - Total weight: 75% (L still missing)
33
+ - Renormalize to 100% temporarily
34
+
35
+ **Phase 3** (7 components - Complete CANSLIM):
36
+ - Add L (20%)
37
+ - Total weight: 100% (original weights restored)
38
+ - C 15%, A 20%, N 15%, S 15%, L 20%, I 10%, M 5%
39
+
40
+ ---
41
+
42
+ ## Component Scoring Formulas (0-100 Scale)
43
+
44
+ Each component is scored on a 0-100 point scale based on O'Neil's quantitative thresholds.
45
+
46
+ ### C - Current Quarterly Earnings (0-100 Points)
47
+
48
+ **Input Data Required:**
49
+ - Latest quarterly EPS (most recent quarter)
50
+ - Year-ago quarterly EPS (same quarter, prior year)
51
+ - Latest quarterly revenue
52
+ - Year-ago quarterly revenue
53
+
54
+ **Calculation:**
55
+ ```python
56
+ eps_growth_pct = ((latest_qtr_eps - year_ago_qtr_eps) / abs(year_ago_qtr_eps)) * 100
57
+ revenue_growth_pct = ((latest_qtr_revenue - year_ago_qtr_revenue) / year_ago_qtr_revenue) * 100
58
+ ```
59
+
60
+ **Scoring Logic:**
61
+ ```python
62
+ if eps_growth_pct >= 50 and revenue_growth_pct >= 25:
63
+ c_score = 100 # Explosive growth
64
+ elif eps_growth_pct >= 30 and revenue_growth_pct >= 15:
65
+ c_score = 80 # Strong growth
66
+ elif eps_growth_pct >= 18 and revenue_growth_pct >= 10:
67
+ c_score = 60 # Meets CANSLIM minimum
68
+ elif eps_growth_pct >= 10:
69
+ c_score = 40 # Below threshold
70
+ else:
71
+ c_score = 0 # Weak or negative growth
72
+ ```
73
+
74
+ **Interpretation:**
75
+ - **100 points**: Exceptional - Top-tier earnings acceleration
76
+ - **80 points**: Strong - Well above CANSLIM threshold
77
+ - **60 points**: Acceptable - Meets minimum 18% threshold
78
+ - **40 points**: Weak - Below CANSLIM standards
79
+ - **0 points**: Fails - Insufficient growth
80
+
81
+ **Quality Checks:**
82
+ - If revenue growth < 50% of EPS growth → Investigate earnings quality (potential buyback-driven)
83
+ - If revenue is negative while EPS is positive → Red flag (cost-cutting, not growth)
84
+
85
+ ---
86
+
87
+ ### A - Annual EPS Growth (0-100 Points)
88
+
89
+ **Input Data Required:**
90
+ - Annual EPS for current year and previous 3 years (4 years total)
91
+ - Annual revenue for same 4 years (validation)
92
+
93
+ **Calculation:**
94
+ ```python
95
+ # 3-year CAGR (Compound Annual Growth Rate)
96
+ eps_cagr_3yr = (((current_year_eps / eps_3_years_ago) ** (1/3)) - 1) * 100
97
+ revenue_cagr_3yr = (((current_year_revenue / revenue_3_years_ago) ** (1/3)) - 1) * 100
98
+
99
+ # Growth stability check
100
+ eps_values = [year1_eps, year2_eps, year3_eps, year4_eps] # chronological order
101
+ stable = all(eps_values[i] >= eps_values[i-1] for i in range(1, 4)) # No down years
102
+ ```
103
+
104
+ **Scoring Logic:**
105
+ ```python
106
+ # Base score from EPS CAGR
107
+ if eps_cagr_3yr >= 40:
108
+ base_score = 90
109
+ elif eps_cagr_3yr >= 30:
110
+ base_score = 70
111
+ elif eps_cagr_3yr >= 25:
112
+ base_score = 50 # Meets CANSLIM minimum
113
+ elif eps_cagr_3yr >= 15:
114
+ base_score = 30
115
+ else:
116
+ base_score = 0
117
+
118
+ # Revenue growth validation penalty
119
+ if revenue_cagr_3yr < (eps_cagr_3yr * 0.5):
120
+ base_score = int(base_score * 0.8) # 20% penalty for weak revenue growth
121
+
122
+ # Stability bonus
123
+ if stable: # No down years
124
+ base_score += 10
125
+
126
+ a_score = min(base_score, 100) # Cap at 100
127
+ ```
128
+
129
+ **Interpretation:**
130
+ - **90-100 points**: Exceptional - Sustainable high growth with stability
131
+ - **70-89 points**: Strong - Well above 25% threshold
132
+ - **50-69 points**: Acceptable - Meets CANSLIM minimum
133
+ - **30-49 points**: Weak - Below threshold
134
+ - **0-29 points**: Fails - Insufficient or erratic growth
135
+
136
+ **Quality Checks:**
137
+ - Stability bonus (+10) rewards consistency (no down years)
138
+ - Revenue validation prevents buyback-driven EPS growth from scoring high
139
+
140
+ ---
141
+
142
+ ### N - Newness / New Highs (0-100 Points)
143
+
144
+ **Input Data Required:**
145
+ - Current stock price
146
+ - 52-week high price
147
+ - 52-week low price
148
+ - Recent daily volume data (30 days)
149
+ - Average volume (30-day average)
150
+ - Recent news headlines (optional, for new product detection)
151
+
152
+ **Calculation:**
153
+ ```python
154
+ # Distance from 52-week high
155
+ distance_from_high_pct = ((current_price / week_52_high) - 1) * 100
156
+
157
+ # Breakout detection (new high on volume)
158
+ breakout_detected = (
159
+ current_price >= week_52_high * 0.995 and # Within 0.5% of high
160
+ recent_volume > avg_volume * 1.4 # Volume 40%+ above average
161
+ )
162
+
163
+ # New product signal detection (keyword search in news)
164
+ new_product_signals = search_news_keywords([
165
+ "FDA approval", "patent granted", "breakthrough", "game-changer",
166
+ "new product", "product launch", "expansion", "acquisition"
167
+ ])
168
+ ```
169
+
170
+ **Scoring Logic:**
171
+ ```python
172
+ # Base score from price position
173
+ if distance_from_high_pct >= -5 and breakout_detected and new_product_signals:
174
+ base_score = 100 # Perfect setup
175
+ elif distance_from_high_pct >= -10 and breakout_detected:
176
+ base_score = 80 # Strong momentum
177
+ elif distance_from_high_pct >= -15 or breakout_detected:
178
+ base_score = 60 # Acceptable
179
+ elif distance_from_high_pct >= -25:
180
+ base_score = 40 # Weak momentum
181
+ else:
182
+ base_score = 20 # Too far from highs
183
+
184
+ # Bonus for new product/catalyst signals (optional data)
185
+ if new_product_signals:
186
+ if "FDA approval" in signals or "breakthrough" in signals:
187
+ base_score += 20 # High-impact catalyst
188
+ elif "new product" in signals or "acquisition" in signals:
189
+ base_score += 10 # Moderate catalyst
190
+
191
+ n_score = min(base_score, 100) # Cap at 100
192
+ ```
193
+
194
+ **Interpretation:**
195
+ - **90-100 points**: Exceptional - At new highs with catalysts
196
+ - **70-89 points**: Strong - Near highs with volume confirmation
197
+ - **50-69 points**: Acceptable - Within 15% of highs
198
+ - **30-49 points**: Weak - Lacks momentum
199
+ - **0-29 points**: Fails - Too far from highs, no sponsorship
200
+
201
+ **Note**: Price position is primary signal (80% of score). New product detection is supplementary (20% bonus).
202
+
203
+ ---
204
+
205
+ ### M - Market Direction (0-100 Points)
206
+
207
+ **Input Data Required:**
208
+ - S&P 500 current price
209
+ - S&P 500 50-day Exponential Moving Average (EMA)
210
+ - VIX current level
211
+ - Follow-through day detection (optional advanced feature)
212
+
213
+ **Calculation:**
214
+ ```python
215
+ # Distance from 50-day EMA
216
+ distance_from_ema_pct = ((sp500_price / sp500_ema_50) - 1) * 100
217
+
218
+ # Trend determination
219
+ if distance_from_ema_pct >= 2.0:
220
+ trend = "strong_uptrend"
221
+ elif distance_from_ema_pct >= 0:
222
+ trend = "uptrend"
223
+ elif distance_from_ema_pct >= -2.0:
224
+ trend = "choppy"
225
+ elif distance_from_ema_pct >= -5.0:
226
+ trend = "downtrend"
227
+ else:
228
+ trend = "bear_market"
229
+ ```
230
+
231
+ **Scoring Logic:**
232
+ ```python
233
+ # Base score from trend
234
+ if trend == "strong_uptrend" and vix < 15:
235
+ base_score = 100 # Ideal conditions
236
+ elif trend == "strong_uptrend" or (trend == "uptrend" and vix < 20):
237
+ base_score = 80 # Favorable
238
+ elif trend == "uptrend":
239
+ base_score = 60 # Acceptable
240
+ elif trend == "choppy":
241
+ base_score = 40 # Neutral/caution
242
+ elif trend == "downtrend":
243
+ base_score = 20 # Weak market
244
+ else: # bear_market or vix > 30
245
+ base_score = 0 # Avoid stocks entirely
246
+
247
+ # VIX adjustment (fear gauge)
248
+ if vix < 15:
249
+ base_score += 10 # Low fear, bullish
250
+ elif vix > 30:
251
+ base_score = 0 # Panic, override trend
252
+
253
+ # Follow-through day bonus (optional advanced feature)
254
+ if follow_through_day_detected:
255
+ base_score += 10 # Confirmed institutional buying
256
+
257
+ m_score = min(max(base_score, 0), 100) # Cap between 0-100
258
+ ```
259
+
260
+ **Interpretation:**
261
+ - **90-100 points**: Strong bull market - Aggressive buying recommended
262
+ - **70-89 points**: Bull market - Standard position sizing
263
+ - **50-69 points**: Early uptrend - Small initial positions
264
+ - **30-49 points**: Choppy/neutral - Reduce exposure, be selective
265
+ - **10-29 points**: Downtrend - Defensive posture, minimal positions
266
+ - **0 points**: Bear market - Raise 80-100% cash, do not buy
267
+
268
+ **Critical Rule**: If M score = 0, **do not buy any stocks** regardless of C, A, N scores. Market direction trumps stock selection.
269
+
270
+ ---
271
+
272
+ ## Composite Score Calculation
273
+
274
+ ### Formula (Phase 1 MVP)
275
+
276
+ ```python
277
+ composite_score = (
278
+ c_score * 0.27 + # Current Earnings: 27% weight
279
+ a_score * 0.36 + # Annual Growth: 36% weight
280
+ n_score * 0.27 + # Newness: 27% weight
281
+ m_score * 0.10 # Market Direction: 10% weight
282
+ )
283
+
284
+ # Result: 0-100 composite score
285
+ ```
286
+
287
+ ### Interpretation Bands (Phase 1)
288
+
289
+ | Score Range | Rating | Percentile | Meaning | Action |
290
+ |-------------|--------|------------|---------|--------|
291
+ | **80-100** | **Exceptional** | Top 5-10% | Rare setup - all components aligned | Strong buy, aggressive sizing (15-20% position) |
292
+ | **70-79** | **Strong** | Top 15-20% | Most components strong | Buy, standard sizing (10-15% position) |
293
+ | **60-69** | **Above Average** | Top 30% | Solid candidate, minor weaknesses | Buy on pullback, smaller sizing (5-10%) |
294
+ | **50-59** | **Average** | Top 50% | Meets minimums, lacks conviction | Watchlist, wait for improvement |
295
+ | **40-49** | **Below Average** | Bottom 50% | One or more components weak | Monitor only, do not buy |
296
+ | **<40** | **Weak** | Bottom 30% | Fails CANSLIM criteria | Avoid |
297
+
298
+ **Note**: Phase 1 scores are not directly comparable to full CANSLIM scores. An 80-point Phase 1 stock may score 140-160 with full 7 components (S, L, I added).
299
+
300
+ ### Weakest Component Identification
301
+
302
+ For each stock, identify the component with the **lowest individual score** to guide further analysis:
303
+
304
+ ```python
305
+ components = {
306
+ 'C': c_score,
307
+ 'A': a_score,
308
+ 'N': n_score,
309
+ 'M': m_score
310
+ }
311
+
312
+ weakest_component = min(components, key=components.get)
313
+ weakest_score = components[weakest_component]
314
+ ```
315
+
316
+ **Use Case**: Helps user understand risks
317
+ - Weakest = C → Earnings deceleration risk
318
+ - Weakest = A → Lack of sustained growth history
319
+ - Weakest = N → Lacks momentum, far from highs
320
+ - Weakest = M → Poor market timing, consider waiting
321
+
322
+ ### Formula (Phase 2 - 6 Components)
323
+
324
+ ```python
325
+ composite_score = (
326
+ c_score * 0.19 + # Current Earnings: 19% weight
327
+ a_score * 0.25 + # Annual Growth: 25% weight
328
+ n_score * 0.19 + # Newness: 19% weight
329
+ s_score * 0.19 + # Supply/Demand: 19% weight (NEW)
330
+ i_score * 0.13 + # Institutional: 13% weight (NEW)
331
+ m_score * 0.06 # Market Direction: 6% weight
332
+ )
333
+
334
+ # Result: 0-100 composite score (Phase 2)
335
+ ```
336
+
337
+ ### Interpretation Bands (Phase 2)
338
+
339
+ | Score Range | Rating | Percentile | Meaning | Action |
340
+ |-------------|--------|------------|---------|--------|
341
+ | **90-100** | **Exceptional+** | Top 1-2% | Rare multi-bagger setup with full institutional backing | Immediate buy, aggressive sizing (15-20% position) |
342
+ | **80-89** | **Exceptional** | Top 5-10% | Outstanding fundamentals + accumulation | Strong buy, standard sizing (10-15% position) |
343
+ | **70-79** | **Strong** | Top 15-20% | High-quality CANSLIM stock | Buy on pullback, standard sizing (10-15%) |
344
+ | **60-69** | **Above Average** | Top 30% | Solid candidate, minor weaknesses | Watchlist, smaller sizing (5-10%) on pullback |
345
+ | **<60** | **Below Standard** | Bottom 70% | Fails one or more thresholds | Monitor only, do not buy |
346
+
347
+ **Key Improvement**: Phase 2 scores include institutional validation (S, I components), making them more predictive than Phase 1.
348
+
349
+ ### Minimum Thresholds (Phase 2)
350
+
351
+ All 6 components must meet baseline criteria to qualify as a CANSLIM candidate:
352
+
353
+ ```python
354
+ thresholds = {
355
+ "C": 60, # 18%+ quarterly EPS growth
356
+ "A": 50, # 25%+ annual CAGR
357
+ "N": 40, # Within 15% of 52-week high
358
+ "S": 40, # Accumulation pattern (ratio ≥ 1.0)
359
+ "I": 40, # 30+ holders OR 20%+ ownership
360
+ "M": 40 # Market in uptrend
361
+ }
362
+
363
+ # Stock passes if ALL components >= thresholds
364
+ passes_threshold = all(score >= thresholds[comp] for comp, score in scores.items())
365
+ ```
366
+
367
+ **Failure Interpretation**:
368
+ - Fails C threshold → Earnings deceleration, avoid
369
+ - Fails A threshold → Lacks sustained growth, not a growth stock
370
+ - Fails N threshold → Too far from highs, wait for strength
371
+ - Fails S threshold → Distribution pattern, institutions selling
372
+ - Fails I threshold → Neglected by institutions, lacks backing
373
+ - Fails M threshold → Bear market, wait for market recovery
374
+
375
+ ### Weakest Component Identification (Phase 2)
376
+
377
+ ```python
378
+ components = {
379
+ 'C': c_score,
380
+ 'A': a_score,
381
+ 'N': n_score,
382
+ 'S': s_score, # NEW
383
+ 'I': i_score, # NEW
384
+ 'M': m_score
385
+ }
386
+
387
+ weakest_component = min(components, key=components.get)
388
+ weakest_score = components[weakest_component]
389
+ ```
390
+
391
+ **Additional Interpretations**:
392
+ - Weakest = S → Distribution pattern, institutions selling - caution
393
+ - Weakest = I → Underowned or overcrowded, investigate further
394
+
395
+ ---
396
+
397
+ ## Example Calculations
398
+
399
+ ### Example 1: NVDA (2023 Q2) - Exceptional Setup
400
+
401
+ **Component Scores:**
402
+ - **C Score**: 100 points (EPS +429% YoY, Revenue +101% YoY)
403
+ - **A Score**: 95 points (3yr CAGR 89%, stable, revenue strong)
404
+ - **N Score**: 98 points (New all-time high, AI catalyst, breakout volume)
405
+ - **M Score**: 100 points (S&P 500 in strong uptrend, VIX <15)
406
+
407
+ **Composite Calculation:**
408
+ ```python
409
+ composite = (100 * 0.27) + (95 * 0.36) + (98 * 0.27) + (100 * 0.10)
410
+ = 27.0 + 34.2 + 26.46 + 10.0
411
+ = 97.66 points
412
+ ```
413
+
414
+ **Rating**: Exceptional (97.66/100)
415
+ **Interpretation**: Textbook CANSLIM setup - all components aligned, rare multi-bagger candidate
416
+ **Weakest Component**: A (95) - even this is exceptional
417
+ **Action**: Strong buy, aggressive position sizing (15-20% of portfolio)
418
+
419
+ ---
420
+
421
+ ### Example 2: META (2023 Q3) - Strong Setup
422
+
423
+ **Component Scores:**
424
+ - **C Score**: 85 points (EPS +164% YoY, Revenue +23% YoY)
425
+ - **A Score**: 78 points (3yr CAGR 28%, recovery from 2022 trough, stable recent)
426
+ - **N Score**: 88 points (5% from 52-week high, breakout pattern)
427
+ - **M Score**: 80 points (S&P 500 above EMA, VIX 18)
428
+
429
+ **Composite Calculation:**
430
+ ```python
431
+ composite = (85 * 0.27) + (78 * 0.36) + (88 * 0.27) + (80 * 0.10)
432
+ = 22.95 + 28.08 + 23.76 + 8.0
433
+ = 82.79 points
434
+ ```
435
+
436
+ **Rating**: Exceptional (82.79/100)
437
+ **Interpretation**: Strong CANSLIM candidate, slight weakness in historical growth
438
+ **Weakest Component**: A (78) - recovering from prior downturn
439
+ **Action**: Buy, standard position sizing (10-15% of portfolio)
440
+
441
+ ---
442
+
443
+ ### Example 3: Hypothetical "Average" Stock
444
+
445
+ **Component Scores:**
446
+ - **C Score**: 60 points (EPS +20% YoY - meets minimum)
447
+ - **A Score**: 55 points (3yr CAGR 26%, one down year)
448
+ - **N Score**: 65 points (12% from high, no catalyst)
449
+ - **M Score**: 60 points (S&P 500 just above EMA, early uptrend)
450
+
451
+ **Composite Calculation:**
452
+ ```python
453
+ composite = (60 * 0.27) + (55 * 0.36) + (65 * 0.27) + (60 * 0.10)
454
+ = 16.2 + 19.8 + 17.55 + 6.0
455
+ = 59.55 points
456
+ ```
457
+
458
+ **Rating**: Average (59.55/100)
459
+ **Interpretation**: Meets minimum thresholds but lacks conviction
460
+ **Weakest Component**: A (55) - inconsistent growth history
461
+ **Action**: Watchlist only, wait for A or N component to strengthen
462
+
463
+ ---
464
+
465
+ ### Example 4: Bear Market Scenario (M Score = 0)
466
+
467
+ **Component Scores:**
468
+ - **C Score**: 100 points (Excellent earnings)
469
+ - **A Score**: 90 points (Excellent growth)
470
+ - **N Score**: 95 points (New highs)
471
+ - **M Score**: 0 points (S&P 500 in bear market, VIX > 30)
472
+
473
+ **Composite Calculation:**
474
+ ```python
475
+ composite = (100 * 0.27) + (90 * 0.36) + (95 * 0.27) + (0 * 0.10)
476
+ = 27.0 + 32.4 + 25.65 + 0
477
+ = 85.05 points
478
+ ```
479
+
480
+ **Rating**: Exceptional fundamentals (85.05) BUT bear market
481
+ **Interpretation**: **DO NOT BUY** despite high score - market direction overrides stock quality
482
+ **Weakest Component**: M (0) - bear market environment
483
+ **Action**: Raise cash, wait for M score > 40 (market recovery signal)
484
+
485
+ **Critical Lesson**: This example illustrates O'Neil's principle: "You can be right about a stock but wrong about the market, and still lose money."
486
+
487
+ ---
488
+
489
+ ## Phase 2-3 Scoring Evolution
490
+
491
+ ### Phase 2 (6 Components: C, A, N, S, I, M)
492
+
493
+ **New Weights** (renormalized, L still missing):
494
+ - C: 19% (15% / 0.80)
495
+ - A: 25% (20% / 0.80)
496
+ - N: 19% (15% / 0.80)
497
+ - S: 19% (15% / 0.80) - NEW
498
+ - I: 13% (10% / 0.80) - NEW
499
+ - M: 6% (5% / 0.80)
500
+ - Total: 100%
501
+
502
+ **Expected Impact**:
503
+ - S component (volume/supply-demand) will further validate institutional accumulation
504
+ - I component (institutional sponsorship) will identify "smart money" confirmation
505
+ - Composite scores expected to shift ±5-10 points with S, I added
506
+
507
+ ### Phase 3 (7 Components: Complete CANSLIM)
508
+
509
+ **Final Weights** (original O'Neil methodology):
510
+ - C: 15%
511
+ - A: 20%
512
+ - N: 15%
513
+ - S: 15%
514
+ - L: 20% - NEW (largest single component!)
515
+ - I: 10%
516
+ - M: 5%
517
+ - Total: 100%
518
+
519
+ **Expected Impact**:
520
+ - L component (relative strength leadership) will identify sector leaders and laggards
521
+ - Stocks in top quartile of their sector will score significantly higher
522
+ - Final scores will range 0-200 points (double Phase 1 range due to 0-100 per component)
523
+
524
+ **Interpretation Bands (Phase 3 Full CANSLIM)**:
525
+ - **160-200 points**: Exceptional (top 1-2% of stocks)
526
+ - **140-159 points**: Strong (top 5-10%)
527
+ - **120-139 points**: Above Average (top 20%)
528
+ - **100-119 points**: Average (meets minimums)
529
+ - **<100 points**: Below standard
530
+
531
+ ---
532
+
533
+ ## Usage Notes
534
+
535
+ ### For Screener Implementation
536
+
537
+ 1. **Calculate all 4 component scores** (C, A, N, M) for each stock
538
+ 2. **Apply composite formula** with Phase 1 weights
539
+ 3. **Identify weakest component** for each stock
540
+ 4. **Rank stocks** by composite score (highest to lowest)
541
+ 5. **Apply market filter** FIRST: If M score < 40, warn user to reduce exposure
542
+
543
+ ### For User Reports
544
+
545
+ **Include in output**:
546
+ - Composite score (0-100)
547
+ - Rating (Exceptional / Strong / Above Average / Average / Below Average / Weak)
548
+ - Individual component scores (C, A, N, M)
549
+ - Weakest component identification
550
+ - Interpretation guidance
551
+ - Recommended action (buy / watchlist / avoid)
552
+
553
+ **Format Example**:
554
+ ```
555
+ NVDA - NVIDIA Corporation
556
+ Composite Score: 97.7 / 100 (Exceptional)
557
+
558
+ Component Breakdown:
559
+ C (Current Earnings): 100 / 100 - Explosive growth (EPS +429% YoY)
560
+ A (Annual Growth): 95 / 100 - Exceptional 3yr CAGR (89%)
561
+ N (Newness): 98 / 100 - At new highs with AI catalyst
562
+ M (Market Direction): 100 / 100 - Strong bull market
563
+
564
+ Weakest Component: A (95) - Still exceptional
565
+ Recommendation: Strong buy - Rare multi-bagger setup
566
+ ```
567
+
568
+ ---
569
+
570
+ ## Validation and Testing
571
+
572
+ ### Test Cases
573
+
574
+ Validate scoring system with known CANSLIM winners:
575
+
576
+ **Expected Results (Phase 1 MVP)**:
577
+ - NVDA (2023 Q2): 95-100 points (Exceptional)
578
+ - META (2023 Q3): 80-90 points (Exceptional/Strong)
579
+ - AAPL (2009 Q3): 85-95 points (Exceptional)
580
+ - TSLA (2020 Q3): 80-90 points (Exceptional)
581
+
582
+ **Expected Results for Non-CANSLIM Stocks**:
583
+ - Declining earnings stocks: C < 40 → Composite < 50
584
+ - Stocks far from highs: N < 40 → Composite < 60
585
+ - In bear markets: M = 0 → Warning generated regardless of other scores
586
+
587
+ ### Scoring System Integrity Checks
588
+
589
+ 1. **Range Validation**: All component scores must be 0-100
590
+ 2. **Weight Validation**: Sum of weights = 100% (0.27 + 0.36 + 0.27 + 0.10 = 1.00)
591
+ 3. **Monotonicity**: Higher inputs → Higher scores (linear or step-function increases)
592
+ 4. **Boundary Conditions**: Test edge cases (zero EPS, negative growth, etc.)
593
+ 5. **Historical Validation**: Backtest on known winners 2019-2024
594
+
595
+ ---
596
+
597
+ This scoring system provides a quantitative, objective framework for implementing O'Neil's CANSLIM methodology. Phase 1 captures the most predictive components (earnings and growth) while setting the foundation for full implementation in Phases 2-3.