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,79 @@
1
+ ---
2
+ name: vcp-screener
3
+ description: Screen S&P 500 stocks for Mark Minervini's Volatility Contraction Pattern (VCP). Identifies Stage 2 uptrend stocks forming tight bases with contracting volatility near breakout pivot points. Use when user requests VCP screening, Minervini-style setups, tight base patterns, volatility contraction breakout candidates, or Stage 2 momentum stock scanning.
4
+ ---
5
+
6
+ # VCP Screener - Minervini Volatility Contraction Pattern
7
+
8
+ Screen S&P 500 stocks for Mark Minervini's Volatility Contraction Pattern (VCP), identifying Stage 2 uptrend stocks with contracting volatility near breakout pivot points.
9
+
10
+ ## When to Use
11
+
12
+ - User asks for VCP screening or Minervini-style setups
13
+ - User wants to find tight base / volatility contraction patterns
14
+ - User requests Stage 2 momentum stock scanning
15
+ - User asks for breakout candidates with defined risk
16
+
17
+ ## Prerequisites
18
+
19
+ - FMP API key (set `FMP_API_KEY` environment variable or pass `--api-key`)
20
+ - Free tier (250 calls/day) is sufficient for default screening (top 100 candidates)
21
+ - Paid tier recommended for full S&P 500 screening (`--full-sp500`)
22
+
23
+ ## Workflow
24
+
25
+ ### Step 1: Prepare and Execute Screening
26
+
27
+ Run the VCP screener script:
28
+
29
+ ```bash
30
+ # Default: S&P 500, top 100 candidates
31
+ python3 skills/vcp-screener/scripts/screen_vcp.py --output-dir skills/vcp-screener/scripts
32
+
33
+ # Custom universe
34
+ python3 skills/vcp-screener/scripts/screen_vcp.py --universe AAPL NVDA MSFT AMZN META --output-dir skills/vcp-screener/scripts
35
+
36
+ # Full S&P 500 (paid API tier)
37
+ python3 skills/vcp-screener/scripts/screen_vcp.py --full-sp500 --output-dir skills/vcp-screener/scripts
38
+ ```
39
+
40
+ ### Step 2: Review Results
41
+
42
+ 1. Read the generated JSON and Markdown reports
43
+ 2. Load `references/vcp_methodology.md` for pattern interpretation context
44
+ 3. Load `references/scoring_system.md` for score threshold guidance
45
+
46
+ ### Step 3: Present Analysis
47
+
48
+ For each top candidate, present:
49
+ - VCP composite score and rating
50
+ - Contraction details (T1/T2/T3 depths and ratios)
51
+ - Trade setup: pivot price, stop-loss, risk percentage
52
+ - Volume dry-up ratio
53
+ - Relative strength rank
54
+
55
+ ### Step 4: Provide Actionable Guidance
56
+
57
+ Based on ratings:
58
+ - **Textbook VCP (90+):** Buy at pivot with aggressive sizing
59
+ - **Strong VCP (80-89):** Buy at pivot with standard sizing
60
+ - **Good VCP (70-79):** Buy on volume confirmation above pivot
61
+ - **Developing (60-69):** Add to watchlist, wait for tighter contraction
62
+ - **Weak/No VCP (<60):** Monitor only or skip
63
+
64
+ ## 3-Phase Pipeline
65
+
66
+ 1. **Pre-Filter** - Quote-based screening (price, volume, 52w position) ~101 API calls
67
+ 2. **Trend Template** - 7-point Stage 2 filter with 260-day histories ~100 API calls
68
+ 3. **VCP Detection** - Pattern analysis, scoring, report generation (no additional API calls)
69
+
70
+ ## Output
71
+
72
+ - `vcp_screener_YYYY-MM-DD_HHMMSS.json` - Structured results
73
+ - `vcp_screener_YYYY-MM-DD_HHMMSS.md` - Human-readable report
74
+
75
+ ## Resources
76
+
77
+ - `references/vcp_methodology.md` - VCP theory and Trend Template explanation
78
+ - `references/scoring_system.md` - Scoring thresholds and component weights
79
+ - `references/fmp_api_endpoints.md` - API endpoints and rate limits
@@ -0,0 +1,45 @@
1
+ # FMP API Endpoints Used by VCP Screener
2
+
3
+ ## Endpoints
4
+
5
+ ### 1. S&P 500 Constituents
6
+ - **URL:** `GET /api/v3/sp500_constituent`
7
+ - **Calls:** 1 (cached)
8
+ - **Returns:** `[{symbol, name, sector, subSector}, ...]`
9
+ - **Used in:** Phase 1 - Universe definition
10
+
11
+ ### 2. Batch Quote
12
+ - **URL:** `GET /api/v3/quote/{symbols}` (comma-separated, max 5)
13
+ - **Calls:** ~101 (503 stocks / 5 per batch)
14
+ - **Returns:** `[{symbol, price, yearHigh, yearLow, avgVolume, marketCap, ...}]`
15
+ - **Used in:** Phase 1 - Pre-filter
16
+
17
+ ### 3. Historical Prices
18
+ - **URL:** `GET /api/v3/historical-price-full/{symbol}?timeseries=260`
19
+ - **Calls:** 1 (SPY) + up to 100 (candidates)
20
+ - **Returns:** `{symbol, historical: [{date, open, high, low, close, adjClose, volume}, ...]}`
21
+ - **Used in:** Phase 2 - Trend Template, Phase 3 - VCP detection
22
+
23
+ ## API Budget Summary
24
+
25
+ | Phase | Operation | API Calls |
26
+ |-------|-----------|-----------|
27
+ | 1 | S&P 500 constituents | 1 |
28
+ | 1 | Batch quotes (503 / 5) | ~101 |
29
+ | 2 | SPY 260-day history | 1 |
30
+ | 2 | Candidate histories (max 100) | 100 |
31
+ | **Total (default)** | | **~203** |
32
+ | **Total (--full-sp500)** | | **~350** |
33
+
34
+ ## Rate Limits
35
+
36
+ - **Free tier:** 250 API calls/day - Default screening fits within this limit
37
+ - **Starter tier ($29.99/mo):** 750 calls/day
38
+ - **Rate limiting:** 0.3s delay between requests, automatic retry on 429
39
+ - **Caching:** In-memory session cache prevents duplicate requests
40
+
41
+ ## Notes
42
+
43
+ - All historical data uses `timeseries=260` parameter (260 trading days = ~1 year)
44
+ - Phase 3 (VCP detection, scoring, reporting) requires NO additional API calls
45
+ - The `--full-sp500` flag fetches histories for all pre-filter passers (~250 stocks)
@@ -0,0 +1,154 @@
1
+ # VCP Screener Scoring System
2
+
3
+ ## 5-Component Composite Score
4
+
5
+ | Component | Weight | Source |
6
+ |-----------|--------|--------|
7
+ | Trend Template (Stage 2) | 25% | 7-point Minervini criteria |
8
+ | Contraction Quality | 25% | VCP pattern detection |
9
+ | Volume Pattern | 20% | Volume dry-up analysis |
10
+ | Pivot Proximity | 15% | Distance from breakout level |
11
+ | Relative Strength | 15% | Minervini-weighted RS vs S&P 500 |
12
+
13
+ ## Component Scoring Details
14
+
15
+ ### 1. Trend Template (0-100)
16
+
17
+ Each of the 7 criteria contributes 14.3 points:
18
+
19
+ | Criteria Passed | Score | Status |
20
+ |-----------------|-------|--------|
21
+ | 7/7 | 100 | Perfect Stage 2 |
22
+ | 6/7 | 85.8 | Pass (minimum threshold) |
23
+ | 5/7 | 71.5 | Borderline |
24
+ | <= 4/7 | <= 57 | Fail |
25
+
26
+ **Pass threshold:** Score >= 85 (6+ criteria) to proceed to VCP analysis.
27
+
28
+ ### 2. Contraction Quality (0-100)
29
+
30
+ | # Contractions | Base Score |
31
+ |----------------|-----------|
32
+ | 4 | 90 |
33
+ | 3 | 80 |
34
+ | 2 | 60 |
35
+ | 1 or invalid | 0-40 |
36
+
37
+ **Modifiers:**
38
+ - Tight final contraction (< 5% depth): +10
39
+ - Good average contraction ratio (< 0.4 of T1): +10
40
+ - Deep T1 (> 30%): -10
41
+
42
+ ### 3. Volume Pattern (0-100)
43
+
44
+ Based on dry-up ratio (recent 10-bar avg / 50-day avg):
45
+
46
+ | Dry-Up Ratio | Base Score |
47
+ |-------------|-----------|
48
+ | < 0.30 | 90 |
49
+ | 0.30-0.50 | 75 |
50
+ | 0.50-0.70 | 60 |
51
+ | 0.70-1.00 | 40 |
52
+ | > 1.00 | 20 |
53
+
54
+ **Modifiers:**
55
+ - Breakout on 1.5x+ volume: +10
56
+ - Net accumulation > 3 days (in 20d): +10
57
+ - Net distribution > 3 days (in 20d): -10
58
+
59
+ ### 4. Pivot Proximity (0-100) — Distance-Priority Scoring
60
+
61
+ Scoring is distance-first. Volume confirmation adds a bonus only within 0-5% above pivot (Minervini: never chase >5% above pivot).
62
+
63
+ | Distance from Pivot | Base Score | Volume Bonus | Final Score | Trade Status |
64
+ |--------------------|-----------|-------------|------------|--------------|
65
+ | 0-3% above | 90 | +10 | 100 | BREAKOUT CONFIRMED |
66
+ | 3-5% above | 65 | +10 | 75 | EXTENDED - Moderate chase risk (vol confirmed) |
67
+ | 5-10% above | 50 | — (none) | 50 | EXTENDED - High chase risk |
68
+ | 10-20% above | 35 | — (none) | 35 | EXTENDED - Very high chase risk |
69
+ | >20% above | 20 | — (none) | 20 | OVEREXTENDED - Do not chase |
70
+ | 0 to -2% below | 90 | — | 90 | AT PIVOT (within 2%) |
71
+ | -2% to -5% | 75 | — | 75 | NEAR PIVOT |
72
+ | -5% to -8% | 60 | — | 60 | APPROACHING |
73
+ | -8% to -10% | 45 | — | 45 | DEVELOPING |
74
+ | -10% to -15% | 30 | — | 30 | EARLY |
75
+ | < -15% | 10 | — | 10 | FAR FROM PIVOT |
76
+
77
+ **Volume bonus rules:**
78
+ - 0-3% above pivot + volume: +10 points, status = "BREAKOUT CONFIRMED"
79
+ - 3-5% above pivot + volume: +10 points, "(vol confirmed)" appended to status
80
+ - >5% above pivot: no volume bonus (Minervini: do not chase extended breakouts)
81
+ - Below pivot: volume bonus not applicable
82
+
83
+ **Chase risk rule (Minervini):** Do not buy stocks >5% above their pivot point. Distance determines the base score; volume confirmation is a bonus, not an override.
84
+
85
+ ### 5. Relative Strength (0-100)
86
+
87
+ Minervini weighting (emphasizes recent performance):
88
+ - 40%: Last 3 months (63 trading days)
89
+ - 20%: Last 6 months (126 trading days)
90
+ - 20%: Last 9 months (189 trading days)
91
+ - 20%: Last 12 months (252 trading days)
92
+
93
+ | Weighted RS vs S&P 500 | Score | RS Rank Estimate |
94
+ |-------------------------|-------|------------------|
95
+ | >= +50% | 100 | ~99 (top 1%) |
96
+ | >= +30% | 95 | ~95 (top 5%) |
97
+ | >= +20% | 90 | ~90 (top 10%) |
98
+ | >= +10% | 80 | ~80 (top 20%) |
99
+ | >= +5% | 70 | ~70 (top 30%) |
100
+ | >= 0% | 60 | ~60 (top 40%) |
101
+ | >= -5% | 50 | ~50 (average) |
102
+ | >= -10% | 40 | ~40 |
103
+ | >= -20% | 20 | ~25 |
104
+ | < -20% | 0 | ~10 |
105
+
106
+ ## Rating Bands
107
+
108
+ | Composite Score | Rating | Position Sizing | Action |
109
+ |-----------------|--------|-----------------|--------|
110
+ | 90-100 | Textbook VCP | 1.5-2x normal | Buy at pivot, aggressive |
111
+ | 80-89 | Strong VCP | 1x normal | Buy at pivot, standard |
112
+ | 70-79 | Good VCP | 0.75x normal | Buy on volume confirmation |
113
+ | 60-69 | Developing VCP | Wait | Watchlist only |
114
+ | 50-59 | Weak VCP | Skip | Monitor only |
115
+ | < 50 | No VCP | Skip | Not actionable |
116
+
117
+ ### valid_vcp Gate Rule
118
+
119
+ When the VCP pattern calculator returns `valid_vcp=false` (e.g., contraction ratios exceed 0.75, expanding contractions), the rating is capped regardless of composite score:
120
+
121
+ - If `valid_vcp=false` AND composite >= 70: rating is overridden to **"Developing VCP"** with guidance "Watchlist only - VCP pattern not validated, do not buy"
122
+ - If `valid_vcp=false` AND composite < 70: no override needed (already below actionable threshold)
123
+
124
+ This prevents stocks with expanding or non-contracting patterns from receiving actionable buy ratings.
125
+
126
+ ## Entry Ready Conditions
127
+
128
+ A stock is classified as `entry_ready=True` when all of the following conditions are met:
129
+
130
+ | Condition | Default Threshold | CLI Override |
131
+ |-----------|-------------------|--------------|
132
+ | `valid_vcp` | `True` | `--no-require-valid-vcp` |
133
+ | `distance_from_pivot_pct` | -8.0% to +3.0% | `--max-above-pivot` |
134
+ | `dry_up_ratio` | <= 1.0 | — |
135
+ | `risk_pct` | <= 15.0% | `--max-risk` |
136
+
137
+ **Report sections:**
138
+ - **Section A: Pre-Breakout Watchlist** — `entry_ready=True` stocks, sorted by composite score
139
+ - **Section B: Extended / Quality VCP** — `entry_ready=False` stocks, sorted by composite score
140
+
141
+ **CLI mode:**
142
+ - `--mode all` (default): Shows both sections
143
+ - `--mode prebreakout`: Shows only entry_ready=True stocks
144
+
145
+ ## Pre-Filter Criteria (Phase 1)
146
+
147
+ Quick filter using quote data only (no historical needed):
148
+
149
+ | Criterion | Threshold | Purpose |
150
+ |-----------|-----------|---------|
151
+ | Price | > $10 | Exclude penny stocks |
152
+ | % above 52w low | > 20% | Roughly in uptrend |
153
+ | % below 52w high | < 30% | Not in deep correction |
154
+ | Average volume | > 200,000 | Sufficient liquidity |
@@ -0,0 +1,124 @@
1
+ # VCP Methodology - Minervini's Volatility Contraction Pattern
2
+
3
+ ## Overview
4
+
5
+ The Volatility Contraction Pattern (VCP) was developed by Mark Minervini, two-time U.S. Investing Championship winner. It identifies stocks in Stage 2 uptrends that are forming progressively tighter consolidation patterns before a potential breakout.
6
+
7
+ ## Stage Analysis Foundation
8
+
9
+ ### The 4 Stages (Stan Weinstein / Minervini)
10
+
11
+ 1. **Stage 1 - Accumulation/Basing:** Stock trades sideways after a decline. Smart money accumulates.
12
+ 2. **Stage 2 - Advancing/Uptrend:** Stock is in a confirmed uptrend. This is where VCPs form. **The only stage to buy.**
13
+ 3. **Stage 3 - Distribution/Topping:** Stock stalls after an advance. Smart money distributes.
14
+ 4. **Stage 4 - Declining/Downtrend:** Stock is in a confirmed downtrend. Avoid or short.
15
+
16
+ ### Minervini's 7-Point Trend Template (Stage 2 Confirmation)
17
+
18
+ A stock MUST pass all (or nearly all) of these criteria to be in a confirmed Stage 2:
19
+
20
+ | # | Criterion | Purpose |
21
+ |---|-----------|---------|
22
+ | 1 | Price > 150-day SMA AND Price > 200-day SMA | Above major trend lines |
23
+ | 2 | 150-day SMA > 200-day SMA | Shorter MA above longer (bullish alignment) |
24
+ | 3 | 200-day SMA trending up for 22+ trading days | Long-term trend is up |
25
+ | 4 | Price > 50-day SMA | Above intermediate trend line |
26
+ | 5 | Price at least 25% above 52-week low | Sufficient distance from lows |
27
+ | 6 | Price within 25% of 52-week high | Not in a deep correction |
28
+ | 7 | Relative Strength rating > 70 | Outperforming most stocks |
29
+
30
+ **Pass threshold:** 6 of 7 criteria (score >= 85) to proceed to VCP detection.
31
+
32
+ ## VCP Pattern Mechanics
33
+
34
+ ### What is a VCP?
35
+
36
+ A VCP occurs when a stock in a Stage 2 uptrend pulls back and then rallies, but each successive pullback is **shallower** (less volatile) than the previous one. This "volatility contraction" signals that:
37
+
38
+ 1. Selling pressure is being absorbed
39
+ 2. Remaining sellers are being exhausted
40
+ 3. Supply is drying up
41
+ 4. A breakout becomes more probable
42
+
43
+ ### Contraction Structure
44
+
45
+ ```
46
+ H1 (Highest swing high)
47
+ / \
48
+ / \ T1 (First contraction: deepest)
49
+ / \
50
+ / L1
51
+ / / \
52
+ / / \ T2 (Second contraction: tighter)
53
+ H2 \
54
+ \ L2
55
+ \ / \
56
+ \/ \ T3 (Third contraction: tightest)
57
+ H3 L3
58
+ \ /
59
+ \ / ← PIVOT POINT (buy here on volume)
60
+ P
61
+ ```
62
+
63
+ ### Contraction Rules
64
+
65
+ - **T1 (first correction):** 8-35% depth for S&P 500 large-caps (up to 50% for small-caps)
66
+ - **T2:** Must be at least 25% tighter than T1 (ratio <= 0.75)
67
+ - **T3:** Must be at least 25% tighter than T2 (if present)
68
+ - **T4:** Extremely tight, often < 5% (rare, very bullish)
69
+ - **Minimum:** 2 contractions required
70
+ - **Ideal:** 3-4 contractions with progressive tightening
71
+ - **Duration:** 15-325 trading days for the complete pattern
72
+
73
+ ### Pivot Point
74
+
75
+ The **pivot** is the high of the last contraction. This is the buy point:
76
+
77
+ - Buy when price moves above the pivot on volume 1.5x+ above the 50-day average
78
+ - Place stop-loss 1-2% below the last contraction low
79
+ - Risk per trade should be 5-8% from entry to stop
80
+
81
+ ### Volume Signature
82
+
83
+ Ideal volume behavior during a VCP:
84
+
85
+ 1. **During corrections:** Volume should decrease (sellers exhausting)
86
+ 2. **Near the pivot:** Volume should "dry up" (extremely low, calm before the storm)
87
+ 3. **On breakout:** Volume should surge to 1.5-2x the 50-day average
88
+
89
+ **Dry-up ratio** = Average volume (last 10 bars near pivot) / 50-day average volume
90
+ - < 0.30: Exceptional (textbook)
91
+ - 0.30-0.50: Strong
92
+ - 0.50-0.70: Adequate
93
+ - \> 0.70: Weak (caution)
94
+
95
+ ## Historical VCP Examples
96
+
97
+ ### Classic 3-Contraction VCP
98
+ - T1: 20% pullback over 6 weeks
99
+ - T2: 12% pullback over 3 weeks (40% tighter)
100
+ - T3: 5% pullback over 2 weeks (58% tighter)
101
+ - Breakout on 2x volume → 50%+ advance
102
+
103
+ ### Tight 2-Contraction VCP (Large-Cap)
104
+ - T1: 12% pullback over 4 weeks
105
+ - T2: 5% pullback over 2 weeks (58% tighter)
106
+ - Breakout on 1.8x volume → 25-30% advance
107
+
108
+ ## Common Pitfalls
109
+
110
+ 1. **Buying before the pivot:** Wait for the breakout, not the setup
111
+ 2. **Ignoring volume:** A breakout without volume often fails
112
+ 3. **Wide stops:** Keep stops tight (below last contraction low)
113
+ 4. **Wrong stage:** VCPs only work in Stage 2; verify with Trend Template first
114
+ 5. **Deep T1:** If T1 > 35% for large-caps, the pattern is less reliable
115
+ 6. **Expanding contractions:** If T2 > T1, it's NOT a VCP
116
+
117
+ ## Position Sizing by VCP Quality
118
+
119
+ | Rating | Position Size | Risk Budget |
120
+ |--------|---------------|-------------|
121
+ | Textbook (90+) | 1.5-2x normal | Full |
122
+ | Strong (80-89) | 1x normal | Full |
123
+ | Good (70-79) | 0.75x normal | Standard |
124
+ | Developing (60-69) | Wait/Watch | Reduced |
@@ -0,0 +1 @@
1
+ # VCP Screener Calculators
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Pivot Proximity Calculator - Breakout Distance & Risk Analysis
4
+
5
+ Calculates how close the current price is to the VCP pivot (breakout) point
6
+ and computes the risk profile for a potential trade.
7
+
8
+ Distance-priority scoring (Minervini: do not chase >5% above pivot):
9
+ - 0-3% above pivot: 90 (+ volume bonus 10 = 100 BREAKOUT CONFIRMED)
10
+ - 3-5% above: 65 (+ volume bonus 10 = 75)
11
+ - 5-10% above: 50 (no volume bonus)
12
+ - 10-20% above: 35 (no volume bonus)
13
+ - >20% above: 20 (no volume bonus)
14
+ - 0 to -2% below: 90 (AT PIVOT)
15
+ - -2% to -5%: 75 (NEAR PIVOT)
16
+ - -5% to -8%: 60 (APPROACHING)
17
+ - -8% to -10%: 45 (DEVELOPING)
18
+ - -10% to -15%: 30 (EARLY)
19
+ - < -15%: 10 (FAR FROM PIVOT)
20
+
21
+ Also calculates:
22
+ - Stop-loss price (below last contraction low)
23
+ - Risk % per share (entry to stop distance)
24
+ """
25
+
26
+ from typing import Dict, List, Optional
27
+
28
+
29
+ def calculate_pivot_proximity(
30
+ current_price: float,
31
+ pivot_price: Optional[float],
32
+ last_contraction_low: Optional[float] = None,
33
+ breakout_volume: bool = False,
34
+ ) -> Dict:
35
+ """
36
+ Calculate proximity to pivot point and risk metrics.
37
+
38
+ Args:
39
+ current_price: Current stock price
40
+ pivot_price: The pivot (breakout) price from VCP pattern
41
+ last_contraction_low: Low of the last contraction (for stop-loss)
42
+ breakout_volume: Whether current volume is 1.5x+ above average
43
+
44
+ Returns:
45
+ Dict with score (0-100), distance_pct, stop_loss, risk_pct
46
+ """
47
+ if not pivot_price or pivot_price <= 0:
48
+ return {
49
+ "score": 0,
50
+ "distance_from_pivot_pct": None,
51
+ "stop_loss_price": None,
52
+ "risk_pct": None,
53
+ "trade_status": "NO PIVOT",
54
+ "error": "No valid pivot price",
55
+ }
56
+
57
+ if current_price <= 0:
58
+ return {
59
+ "score": 0,
60
+ "distance_from_pivot_pct": None,
61
+ "stop_loss_price": None,
62
+ "risk_pct": None,
63
+ "trade_status": "INVALID PRICE",
64
+ "error": "Invalid current price",
65
+ }
66
+
67
+ # Distance from pivot (negative = below pivot)
68
+ distance_pct = (current_price - pivot_price) / pivot_price * 100
69
+
70
+ # Determine trade status and score (distance-priority)
71
+ if distance_pct > 20:
72
+ score = 20
73
+ trade_status = "OVEREXTENDED - Do not chase"
74
+ elif distance_pct > 10:
75
+ score = 35
76
+ trade_status = "EXTENDED - Very high chase risk"
77
+ elif distance_pct > 5:
78
+ score = 50
79
+ trade_status = "EXTENDED - High chase risk"
80
+ elif distance_pct > 3:
81
+ score = 65
82
+ trade_status = "EXTENDED - Moderate chase risk"
83
+ elif distance_pct > 0:
84
+ score = 90
85
+ trade_status = "ABOVE PIVOT (within 3%)"
86
+ elif distance_pct >= -2:
87
+ score = 90
88
+ trade_status = "AT PIVOT (within 2%)"
89
+ elif distance_pct >= -5:
90
+ score = 75
91
+ trade_status = "NEAR PIVOT (2-5% below)"
92
+ elif distance_pct >= -8:
93
+ score = 60
94
+ trade_status = "APPROACHING (5-8% below)"
95
+ elif distance_pct >= -10:
96
+ score = 45
97
+ trade_status = "DEVELOPING (8-10% below)"
98
+ elif distance_pct >= -15:
99
+ score = 30
100
+ trade_status = "EARLY (10-15% below)"
101
+ else:
102
+ score = 10
103
+ trade_status = "FAR FROM PIVOT (>15% below)"
104
+
105
+ # Volume confirmation bonus (only for 0-5% above pivot)
106
+ if breakout_volume and distance_pct > 0:
107
+ if distance_pct <= 3:
108
+ score += 10
109
+ trade_status = "BREAKOUT CONFIRMED"
110
+ elif distance_pct <= 5:
111
+ score += 10
112
+ trade_status += " (vol confirmed)"
113
+
114
+ # Calculate stop-loss and risk
115
+ stop_loss_price = None
116
+ risk_pct = None
117
+
118
+ if last_contraction_low and last_contraction_low > 0:
119
+ # Stop-loss is 1-2% below the last contraction low
120
+ stop_loss_price = round(last_contraction_low * 0.99, 2)
121
+
122
+ # Risk per share from current price to stop
123
+ if current_price > stop_loss_price:
124
+ risk_pct = round((current_price - stop_loss_price) / current_price * 100, 2)
125
+ else:
126
+ # Price already below stop level
127
+ risk_pct = 0
128
+ trade_status = "BELOW STOP LEVEL"
129
+ score = max(0, score - 20)
130
+
131
+ return {
132
+ "score": score,
133
+ "distance_from_pivot_pct": round(distance_pct, 2),
134
+ "pivot_price": round(pivot_price, 2),
135
+ "stop_loss_price": stop_loss_price,
136
+ "risk_pct": risk_pct,
137
+ "trade_status": trade_status,
138
+ "error": None,
139
+ }