diff --git a/MemelyAlphaStockRanking_scored.xlsx b/MemelyAlphaStockRanking_scored.xlsx new file mode 100644 index 0000000..a302dcd Binary files /dev/null and b/MemelyAlphaStockRanking_scored.xlsx differ diff --git a/README.md b/README.md index 2389032..8bd7d47 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,65 @@ -# memely-alpha-stock-ranking +# Memely Alpha Stock Ranking - AI Scoring Analysis -Memely Alpha Stock Ranking - Deep Research & AI Scoring Analysis \ No newline at end of file +## Overview + +This repository contains the **Memely Alpha Stock Ranking** data with AI-powered scoring analysis for 121 unique stocks/assets across multiple thematic sectors. + +## Files + +| File | Description | +|------|-------------| +| `MemelyAlphaStockRanking_original.xlsx` | Original Excel file with stock master list, weekly/YTD rankings | +| `MemelyAlphaStockRanking_scored.xlsx` | Updated Excel with AI scores (yellow-highlighted cells) | +| `research_scores.json` | Raw AI scoring data in JSON format | +| `scoring_progress.json` | Scoring progress tracking file | +| `score_stocks.py` | Python script used for AI model scoring | +| `write_scores_to_excel.py` | Python script to write scores into Excel | + +## AI Scoring Methodology + +Each stock was evaluated by an AI model (GPT-4.1-mini) based on: + +1. **Overall Score (1-100)**: Comprehensive investment attractiveness +2. **Momentum Score (1-100)**: Based on 7-day and YTD price performance +3. **Theme Score (1-100)**: Relevance of thematic play (AI, Defense, Aerospace, Crypto, etc.) +4. **Risk Score (1-100)**: Volatility and risk level (100 = highest risk) +5. **Social Buzz Score (1-100)**: KOL backing and social media attention + +## Top 10 Stocks by Overall Score + +| Rank | Symbol | Theme | Overall | Momentum | Theme Score | +|------|--------|-------|---------|----------|-------------| +| 1 | UMAC | Drone | 88 | 95 | 80 | +| 2 | EQRLF | - | 85 | 95 | 20 | +| 3 | OSS | Defense | 82 | 80 | 70 | +| 4 | AXTI | Photonics | 80 | 90 | 75 | +| 5 | LASR | Defense | 80 | 85 | 75 | +| 6 | LFMD | GLP-1 | 80 | 90 | 75 | +| 7 | AMPX | Battery | 78 | 60 | 80 | +| 8 | CRCL | Stablecoin | 78 | 75 | 70 | +| 9 | FSLY | - | 75 | 80 | 25 | +| 10 | PSRHF | Helium 3 | 75 | 85 | 70 | + +## Sector Distribution + +Key sectors covered include: +- **Defense & Drone**: UMAC, OSS, LASR, RCAT, KTOS, MRCY, AIRO, etc. +- **Aerospace**: ASTS, RDW, PL, IRDM, RKLB, VELO, etc. +- **AI & Technology**: ACMR, NBIS, ZETA, PATH, GTLB, etc. +- **Photonics**: AXTI, AAOI, POET, LPTH, ALMU +- **Crypto & Fintech**: CRCL, GLXY, BKKT, FIGR, ETOR, GEMI +- **Biotech & Pharma**: LFMD, NVO, RXRX, CERT, HIMS +- **Quantum Computing**: IONQ, RGTI, QUBT, QBTS, INFQ +- **Nuclear/Energy**: UUUU, OKLO, SMR, NEE, PPSI + +## Excel Modifications + +All AI-generated scores are written into the Excel file with **yellow background highlighting** to clearly distinguish new data from original data. The modifications include: + +1. **"stock master list" sheet**: 6 new columns added (AI Overall Score, Momentum, Theme, Risk, Social Buzz, Brief Analysis) +2. **"Sheet4"**: Same 6 columns added +3. **"AI Score Summary" (new sheet)**: Complete ranking sorted by Overall Score with color-coded cells + +## Date + +Analysis performed on: **March 14, 2026** \ No newline at end of file diff --git a/research_scores.json b/research_scores.json new file mode 100644 index 0000000..7e8e5f8 --- /dev/null +++ b/research_scores.json @@ -0,0 +1,1091 @@ +{ + "EQRLF": { + "symbol": "EQRLF", + "overall_score": 85, + "momentum_score": 95, + "theme_score": 20, + "risk_score": 70, + "social_buzz_score": 10, + "brief_analysis": "EQRLF shows exceptional YTD momentum with a 333.33% gain and strong recent weekly performance. However, lack of clear thematic relevance and minimal social buzz limit its appeal. High volatility contributes to a higher risk score." + }, + "GDRZF": { + "symbol": "GDRZF", + "overall_score": 65, + "momentum_score": 70, + "theme_score": 40, + "risk_score": 80, + "social_buzz_score": 50, + "brief_analysis": "GDRZF has strong YTD gains but recent negative momentum. The Venezuela theme is niche but relevant for geopolitical plays. Moderate social buzz from known contributors helps, but volatility and geopolitical risks increase risk." + }, + "AXTI": { + "symbol": "AXTI", + "overall_score": 80, + "momentum_score": 90, + "theme_score": 75, + "risk_score": 65, + "social_buzz_score": 60, + "brief_analysis": "AXTI benefits from strong momentum and a relevant photonics theme, which is gaining traction. Good social media presence supports its visibility. Moderate risk due to volatility but overall attractive for thematic investors." + }, + "AAOI": { + "symbol": "AAOI", + "overall_score": 70, + "momentum_score": 50, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "AAOI has strong thematic relevance in photonics but recent negative momentum weighs on its score. Social buzz is decent, supporting interest. Higher volatility increases risk, making it a cautious thematic play." + }, + "FSLY": { + "symbol": "FSLY", + "overall_score": 75, + "momentum_score": 80, + "theme_score": 25, + "risk_score": 60, + "social_buzz_score": 55, + "brief_analysis": "FSLY shows solid momentum and decent social media backing but lacks a strong thematic angle. Moderate risk due to volatility and steady performance make it a balanced pick." + }, + "ALM": { + "symbol": "ALM", + "overall_score": 60, + "momentum_score": 55, + "theme_score": 20, + "risk_score": 50, + "social_buzz_score": 40, + "brief_analysis": "ALM has moderate YTD performance and minimal momentum recently. Lack of theme and moderate social buzz reduce attractiveness. Lower volatility results in moderate risk." + }, + "AMPX": { + "symbol": "AMPX", + "overall_score": 78, + "momentum_score": 60, + "theme_score": 80, + "risk_score": 55, + "social_buzz_score": 50, + "brief_analysis": "AMPX has a strong theme with solid state batteries and edge AI relevance. Momentum is moderate but steady. Social buzz is decent and risk is moderate due to sector volatility." + }, + "UCTT": { + "symbol": "UCTT", + "overall_score": 65, + "momentum_score": 60, + "theme_score": 20, + "risk_score": 50, + "social_buzz_score": 45, + "brief_analysis": "UCTT shows moderate momentum and social buzz but lacks a strong thematic play. Risk is moderate with stable performance, making it a cautious option." + }, + "ICHR": { + "symbol": "ICHR", + "overall_score": 60, + "momentum_score": 50, + "theme_score": 20, + "risk_score": 55, + "social_buzz_score": 40, + "brief_analysis": "ICHR has modest YTD gains but recent negative momentum. No clear theme and moderate social buzz limit its appeal. Risk is moderate due to some volatility." + }, + "PSRHF": { + "symbol": "PSRHF", + "overall_score": 75, + "momentum_score": 85, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 55, + "brief_analysis": "PSRHF benefits from strong momentum and a niche Helium 3 theme with future potential. Social buzz is good, supporting interest. Moderate risk due to volatility." + }, + "ATOM": { + "symbol": "ATOM", + "overall_score": 55, + "momentum_score": 45, + "theme_score": 20, + "risk_score": 65, + "social_buzz_score": 50, + "brief_analysis": "ATOM has weak recent momentum and no clear thematic relevance. Social buzz is moderate but recent negative performance increases risk." + }, + "INTT": { + "symbol": "INTT", + "overall_score": 60, + "momentum_score": 55, + "theme_score": 20, + "risk_score": 50, + "social_buzz_score": 40, + "brief_analysis": "INTT shows moderate momentum and social buzz but lacks a strong thematic angle. Risk is moderate with steady performance." + }, + "RCAT": { + "symbol": "RCAT", + "overall_score": 70, + "momentum_score": 75, + "theme_score": 65, + "risk_score": 55, + "social_buzz_score": 50, + "brief_analysis": "RCAT has solid momentum and a relevant defense drone theme. Social buzz is moderate, and risk is relatively contained, making it an attractive thematic play." + }, + "AEHR": { + "symbol": "AEHR", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 20, + "risk_score": 70, + "social_buzz_score": 35, + "brief_analysis": "AEHR has weak momentum and no clear thematic play. Social buzz is low and volatility is high, resulting in a higher risk profile." + }, + "UAMY": { + "symbol": "UAMY", + "overall_score": 65, + "momentum_score": 55, + "theme_score": 60, + "risk_score": 60, + "social_buzz_score": 45, + "brief_analysis": "UAMY benefits from a relevant rare earth defense theme and moderate social buzz. Momentum is modest and risk is moderate due to sector volatility." + }, + "LASR": { + "symbol": "LASR", + "overall_score": 80, + "momentum_score": 85, + "theme_score": 75, + "risk_score": 50, + "social_buzz_score": 70, + "brief_analysis": "LASR shows strong YTD momentum with 63.15% gain and moderate weekly growth, reflecting solid price performance. Its defense theme is highly relevant in 2025, supported by notable KOLs, boosting social buzz. Moderate volatility keeps risk at a balanced level." + }, + "UMAC": { + "symbol": "UMAC", + "overall_score": 88, + "momentum_score": 95, + "theme_score": 80, + "risk_score": 65, + "social_buzz_score": 75, + "brief_analysis": "UMAC exhibits exceptional momentum with 18.06% weekly and 50.33% YTD gains, driven by strong thematic relevance in drones within defense. The presence of active KOLs enhances social buzz. Higher volatility due to sharp price moves increases risk moderately." + }, + "OSS": { + "symbol": "OSS", + "overall_score": 82, + "momentum_score": 80, + "theme_score": 70, + "risk_score": 55, + "social_buzz_score": 70, + "brief_analysis": "OSS maintains strong momentum with 13.26% weekly and 48.24% YTD gains in the defense sector. The theme is solid but less niche than drones, with good KOL support. Moderate volatility results in a balanced risk profile." + }, + "RIME": { + "symbol": "RIME", + "overall_score": 55, + "momentum_score": 40, + "theme_score": 40, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "RIME has flat weekly performance and a negative specific date return, indicating weak momentum despite decent YTD gains. The lack of a clear theme lowers thematic appeal. Moderate social buzz from a single KOL and higher volatility increase risk." + }, + "IPGP": { + "symbol": "IPGP", + "overall_score": 60, + "momentum_score": 45, + "theme_score": 40, + "risk_score": 65, + "social_buzz_score": 60, + "brief_analysis": "IPGP shows negative short-term momentum with a strong YTD but recent declines, reflecting volatility. The absence of a strong thematic focus limits theme score. Solid KOL presence supports moderate social buzz, while risk is elevated due to price swings." + }, + "SOLS": { + "symbol": "SOLS", + "overall_score": 62, + "momentum_score": 55, + "theme_score": 40, + "risk_score": 55, + "social_buzz_score": 60, + "brief_analysis": "SOLS has modest negative weekly momentum but decent YTD gains. The lack of a clear theme reduces thematic appeal. KOL support is moderate, and risk is balanced with moderate volatility." + }, + "IRDM": { + "symbol": "IRDM", + "overall_score": 75, + "momentum_score": 70, + "theme_score": 65, + "risk_score": 50, + "social_buzz_score": 70, + "brief_analysis": "IRDM shows steady momentum with positive weekly and YTD returns in the defense DSCS niche, which is relevant but less hot than drones or AI. Strong KOL backing enhances social buzz. Risk remains moderate due to balanced volatility." + }, + "CRCL": { + "symbol": "CRCL", + "overall_score": 78, + "momentum_score": 75, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 75, + "brief_analysis": "CRCL benefits from a strong thematic play in stablecoins within fintech & crypto, with solid YTD and weekly gains plus a very strong specific date performance. Good KOL support boosts social buzz. Volatility is moderate, resulting in a medium risk score." + }, + "SKM": { + "symbol": "SKM", + "overall_score": 58, + "momentum_score": 45, + "theme_score": 50, + "risk_score": 60, + "social_buzz_score": 65, + "brief_analysis": "SKM has weak momentum with negative weekly and specific date returns but decent YTD growth. The Anthropic theme is relevant but niche, giving a moderate theme score. Good KOL presence supports social buzz, while risk is elevated due to recent price drops." + }, + "ASTI": { + "symbol": "ASTI", + "overall_score": 50, + "momentum_score": 30, + "theme_score": 65, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "ASTI shows weak momentum with significant recent losses despite aerospace theme relevance. The theme is strong but momentum and risk weigh down the score. Moderate social buzz from KOLs is present but insufficient to offset negatives." + }, + "KLIC": { + "symbol": "KLIC", + "overall_score": 60, + "momentum_score": 50, + "theme_score": 40, + "risk_score": 55, + "social_buzz_score": 60, + "brief_analysis": "KLIC has moderate YTD gains but weak recent momentum and no clear thematic focus, limiting theme score. KOL support is moderate, and risk is balanced with moderate volatility." + }, + "HIMX": { + "symbol": "HIMX", + "overall_score": 65, + "momentum_score": 75, + "theme_score": 40, + "risk_score": 60, + "social_buzz_score": 40, + "brief_analysis": "HIMX shows strong recent momentum with a 27.46% weekly gain but modest YTD performance. Lack of a clear theme and absence of KOL backing reduce theme and social buzz scores. Moderate risk due to volatility." + }, + "Q": { + "symbol": "Q", + "overall_score": 58, + "momentum_score": 50, + "theme_score": 40, + "risk_score": 55, + "social_buzz_score": 40, + "brief_analysis": "Q has weak momentum with negative weekly and specific date returns but moderate YTD gains. No clear thematic play or KOL support lowers theme and social buzz scores. Risk is moderate with balanced volatility." + }, + "NBIS": { + "symbol": "NBIS", + "overall_score": 75, + "momentum_score": 80, + "theme_score": 75, + "risk_score": 55, + "social_buzz_score": 75, + "brief_analysis": "NBIS benefits from strong momentum and a relevant AI hyperscaler theme, which is highly attractive in 2025. Good KOL support drives social buzz. Moderate risk due to balanced volatility." + }, + "NVTS": { + "symbol": "NVTS", + "overall_score": 70, + "momentum_score": 80, + "theme_score": 40, + "risk_score": 55, + "social_buzz_score": 40, + "brief_analysis": "NVTS shows strong momentum with 20.53% weekly and YTD gains but lacks a clear thematic focus and KOL backing, limiting theme and social buzz scores. Risk is moderate due to volatility." + }, + "PPTA": { + "symbol": "PPTA", + "overall_score": 55, + "momentum_score": 50, + "theme_score": 30, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "PPTA shows moderate YTD performance but recent weekly decline impacts momentum negatively. Thematic relevance is unclear, lowering theme score. Moderate social buzz from known KOLs supports some interest, but volatility increases risk." + }, + "PL": { + "symbol": "PL", + "overall_score": 75, + "momentum_score": 65, + "theme_score": 80, + "risk_score": 55, + "social_buzz_score": 70, + "brief_analysis": "PL benefits from strong aerospace theme aligned with market trends and solid YTD gains. Recent slight pullback reduces momentum slightly. Good social buzz from AI and investing KOLs enhances attractiveness with moderate risk." + }, + "STM": { + "symbol": "STM", + "overall_score": 70, + "momentum_score": 60, + "theme_score": 75, + "risk_score": 50, + "social_buzz_score": 50, + "brief_analysis": "STM has solid aerospace thematic relevance and decent YTD performance. Recent mild decline affects momentum. Social buzz is moderate with some KOL presence. Risk is moderate due to steady performance." + }, + "VOXR": { + "symbol": "VOXR", + "overall_score": 50, + "momentum_score": 45, + "theme_score": 40, + "risk_score": 65, + "social_buzz_score": 40, + "brief_analysis": "VOXR's precious metal theme is less trendy in 2025-2026, limiting theme score. YTD performance is decent but recent weekly losses reduce momentum. Limited social buzz and moderate volatility contribute to risk." + }, + "UUUU": { + "symbol": "UUUU", + "overall_score": 45, + "momentum_score": 35, + "theme_score": 60, + "risk_score": 80, + "social_buzz_score": 65, + "brief_analysis": "UUUU's nuclear theme is relevant but YTD and recent performance are weak, dragging momentum down. High volatility and sharp recent losses increase risk. Strong KOL backing supports social buzz." + }, + "AREC": { + "symbol": "AREC", + "overall_score": 60, + "momentum_score": 55, + "theme_score": 65, + "risk_score": 60, + "social_buzz_score": 55, + "brief_analysis": "AREC's rare earth theme is moderately relevant with decent YTD gains. Recent weekly decline impacts momentum slightly. Moderate social buzz from a single KOL and average risk due to volatility." + }, + "CPSH": { + "symbol": "CPSH", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 40, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "CPSH shows moderate YTD gains but sharp recent daily decline hurts momentum. Material theme is less hot currently. Strong KOL presence boosts social buzz but high volatility raises risk." + }, + "LFMD": { + "symbol": "LFMD", + "overall_score": 80, + "momentum_score": 90, + "theme_score": 75, + "risk_score": 65, + "social_buzz_score": 70, + "brief_analysis": "LFMD exhibits exceptional recent momentum with strong weekly and daily gains. GLP-1 theme remains highly relevant in biotech. Good social buzz from KOLs supports interest, though volatility raises risk moderately." + }, + "CRML": { + "symbol": "CRML", + "overall_score": 55, + "momentum_score": 55, + "theme_score": 50, + "risk_score": 50, + "social_buzz_score": 55, + "brief_analysis": "CRML's defense and Greenland theme is niche but relevant. Modest YTD and weekly performance yield moderate momentum. Social buzz is moderate with KOL backing. Risk is average due to steady performance." + }, + "NEE": { + "symbol": "NEE", + "overall_score": 60, + "momentum_score": 60, + "theme_score": 70, + "risk_score": 45, + "social_buzz_score": 40, + "brief_analysis": "NEE's AI Energy theme is relevant and YTD performance is decent. Momentum is stable with slight gains. Lack of KOL presence limits social buzz. Lower volatility results in lower risk." + }, + "KTOS": { + "symbol": "KTOS", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "KTOS has a relevant defense theme but weak recent and YTD performance lowers momentum. Strong KOL backing supports social buzz. Elevated volatility increases risk." + }, + "COHU": { + "symbol": "COHU", + "overall_score": 45, + "momentum_score": 40, + "theme_score": 30, + "risk_score": 70, + "social_buzz_score": 30, + "brief_analysis": "COHU lacks clear thematic relevance and shows weak recent and YTD performance. Limited social buzz and high volatility contribute to higher risk and lower overall attractiveness." + }, + "AIRO": { + "symbol": "AIRO", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 65, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "AIRO's drone defense theme is relevant but weak YTD and recent performance hurt momentum. Strong KOL presence supports social buzz. High volatility increases risk significantly." + }, + "ASTS": { + "symbol": "ASTS", + "overall_score": 55, + "momentum_score": 50, + "theme_score": 70, + "risk_score": 55, + "social_buzz_score": 65, + "brief_analysis": "ASTS has a solid aerospace theme with moderate YTD gains and recent positive daily performance. Good KOL backing enhances social buzz. Moderate risk due to some volatility." + }, + "RDW": { + "symbol": "RDW", + "overall_score": 60, + "momentum_score": 65, + "theme_score": 70, + "risk_score": 50, + "social_buzz_score": 65, + "brief_analysis": "RDW shows decent momentum with strong recent daily gains and moderate YTD performance. Aerospace theme is relevant and supported by active KOLs. Risk remains moderate due to steady performance." + }, + "MP": { + "symbol": "MP", + "overall_score": 45, + "momentum_score": 40, + "theme_score": 20, + "risk_score": 55, + "social_buzz_score": 10, + "brief_analysis": "MP shows weak recent momentum with a slight positive YTD but negative weekly performance. Lack of a clear theme and no notable social media presence lowers its attractiveness. Moderate risk due to volatility and lack of thematic strength." + }, + "VPG": { + "symbol": "VPG", + "overall_score": 60, + "momentum_score": 35, + "theme_score": 75, + "risk_score": 70, + "social_buzz_score": 70, + "brief_analysis": "VPG operates in the Robotics theme, which is relevant and growing, supported by notable KOLs boosting social buzz. However, recent negative momentum and high volatility increase risk, slightly dampening the overall score." + }, + "MRCY": { + "symbol": "MRCY", + "overall_score": 50, + "momentum_score": 25, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 65, + "brief_analysis": "MRCY is in the Defense sector, a strong thematic area, with good social media backing. However, it suffers from poor recent momentum and high volatility, leading to a higher risk score and moderate overall attractiveness." + }, + "LEXX": { + "symbol": "LEXX", + "overall_score": 50, + "momentum_score": 50, + "theme_score": 25, + "risk_score": 50, + "social_buzz_score": 60, + "brief_analysis": "LEXX shows decent momentum with positive YTD and weekly performance and has some social media presence. Lack of a clear theme limits its thematic score, and moderate volatility keeps risk average." + }, + "ACMR": { + "symbol": "ACMR", + "overall_score": 55, + "momentum_score": 30, + "theme_score": 80, + "risk_score": 80, + "social_buzz_score": 70, + "brief_analysis": "ACMR benefits from a strong AI Chip theme and good social buzz but has poor recent momentum and high volatility, reflected in a high risk score. The overall score balances strong thematic appeal with momentum and risk concerns." + }, + "LTRX": { + "symbol": "LTRX", + "overall_score": 40, + "momentum_score": 45, + "theme_score": 15, + "risk_score": 40, + "social_buzz_score": 10, + "brief_analysis": "LTRX has mild positive momentum but lacks a clear theme and social media presence, resulting in low thematic and social buzz scores. Lower volatility reduces risk but overall attractiveness remains limited." + }, + "OPRA": { + "symbol": "OPRA", + "overall_score": 55, + "momentum_score": 40, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 65, + "brief_analysis": "OPRA's AI Distribution theme is relevant and supported by active KOLs, contributing to solid social buzz. Momentum is modest with mixed recent performance, and risk is moderate due to some volatility." + }, + "FLY": { + "symbol": "FLY", + "overall_score": 60, + "momentum_score": 75, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 70, + "brief_analysis": "FLY has strong recent momentum with positive weekly and specific date gains in the Aerospace theme, which remains relevant. Good social media backing supports the social buzz score, though moderate risk is present due to volatility." + }, + "POET": { + "symbol": "POET", + "overall_score": 50, + "momentum_score": 50, + "theme_score": 60, + "risk_score": 55, + "social_buzz_score": 60, + "brief_analysis": "POET's Photonics theme is moderately relevant with decent momentum on specific dates despite negative YTD. Social buzz is supported by KOLs, and risk is moderate due to some volatility." + }, + "TE": { + "symbol": "TE", + "overall_score": 55, + "momentum_score": 65, + "theme_score": 65, + "risk_score": 55, + "social_buzz_score": 65, + "brief_analysis": "TE benefits from a strong Solar theme and good momentum on recent dates. Social buzz is solid with notable KOLs, and risk remains moderate due to manageable volatility." + }, + "VOYG": { + "symbol": "VOYG", + "overall_score": 45, + "momentum_score": 40, + "theme_score": 60, + "risk_score": 50, + "social_buzz_score": 60, + "brief_analysis": "VOYG operates in Aerospace with moderate thematic relevance and social buzz. Momentum is weak with negative YTD and mixed recent performance, and risk is moderate." + }, + "JOYY": { + "symbol": "JOYY", + "overall_score": 40, + "momentum_score": 45, + "theme_score": 60, + "risk_score": 50, + "social_buzz_score": 50, + "brief_analysis": "JOYY's AI Distribution theme is relevant but recent momentum is weak with negative YTD. Social buzz is moderate with some KOL presence, and risk is average." + }, + "SYNA": { + "symbol": "SYNA", + "overall_score": 35, + "momentum_score": 30, + "theme_score": 65, + "risk_score": 60, + "social_buzz_score": 40, + "brief_analysis": "SYNA has a relevant AI IoT theme but suffers from negative momentum and moderate volatility. Social buzz is limited, which combined with risk factors lowers overall attractiveness." + }, + "CEPT": { + "symbol": "CEPT", + "overall_score": 35, + "momentum_score": 35, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 55, + "brief_analysis": "CEPT's Fintech & Crypto theme with RWA focus is relevant but recent momentum is weak. Social buzz is decent, but higher volatility increases risk and lowers the overall score." + }, + "ONDS": { + "symbol": "ONDS", + "overall_score": 40, + "momentum_score": 50, + "theme_score": 55, + "risk_score": 60, + "social_buzz_score": 50, + "brief_analysis": "ONDS operates in the Drone theme with moderate thematic relevance and social buzz. Momentum is mixed with negative YTD but positive recent performance, and risk is moderate due to volatility." + }, + "SATS": { + "symbol": "SATS", + "overall_score": 55, + "momentum_score": 40, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 65, + "brief_analysis": "SATS operates in the aerospace sector which remains relevant but has shown negative momentum YTD and weekly. Moderate risk due to volatility and moderate social buzz from notable KOLs. The aerospace theme is solid but not a top hot theme currently." + }, + "LPTH": { + "symbol": "LPTH", + "overall_score": 35, + "momentum_score": 25, + "theme_score": 50, + "risk_score": 75, + "social_buzz_score": 55, + "brief_analysis": "LPTH is in photonics, a niche but important tech theme. However, it has weak momentum with significant negative returns and high volatility, increasing risk. Social buzz is moderate but limited to one KOL." + }, + "TMC": { + "symbol": "TMC", + "overall_score": 38, + "momentum_score": 30, + "theme_score": 55, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "TMC focuses on rare earths, a critical theme for tech and defense but currently underperforming with negative momentum and high risk. Social buzz is modest, limiting overall attractiveness." + }, + "SHMD": { + "symbol": "SHMD", + "overall_score": 30, + "momentum_score": 20, + "theme_score": 60, + "risk_score": 80, + "social_buzz_score": 50, + "brief_analysis": "SHMD is in AI PCB, a relevant AI theme, but has poor momentum and very high risk due to volatility and steep losses. Social buzz is average but insufficient to offset risk." + }, + "RKLB": { + "symbol": "RKLB", + "overall_score": 45, + "momentum_score": 35, + "theme_score": 65, + "risk_score": 65, + "social_buzz_score": 60, + "brief_analysis": "RKLB in aerospace has moderate thematic relevance and social buzz but suffers from negative momentum and moderate risk. The sector is stable but not a top performer currently." + }, + "CRSP": { + "symbol": "CRSP", + "overall_score": 28, + "momentum_score": 20, + "theme_score": 40, + "risk_score": 85, + "social_buzz_score": 20, + "brief_analysis": "CRSP is in gene editing, a specialized theme but with very poor momentum and high risk. Lack of KOL backing results in low social buzz, making it less attractive currently." + }, + "DPRO": { + "symbol": "DPRO", + "overall_score": 40, + "momentum_score": 35, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 55, + "brief_analysis": "DPRO in defense drone tech has a relevant theme but weak momentum and high risk. Moderate social buzz from a known KOL helps, but overall scores are subdued due to performance." + }, + "ZETA": { + "symbol": "ZETA", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 65, + "brief_analysis": "ZETA is an AI Agent play with a strong thematic score and decent social buzz. Momentum is weak but recent positive specific date performance helps. Risk remains moderate due to volatility." + }, + "VELO": { + "symbol": "VELO", + "overall_score": 65, + "momentum_score": 75, + "theme_score": 75, + "risk_score": 70, + "social_buzz_score": 70, + "brief_analysis": "VELO in aerospace shows strong recent momentum with a big spike, solid thematic relevance, and good social buzz from KOLs. Risk is elevated due to volatility but overall attractiveness is high." + }, + "TMQ": { + "symbol": "TMQ", + "overall_score": 25, + "momentum_score": 30, + "theme_score": 30, + "risk_score": 75, + "social_buzz_score": 20, + "brief_analysis": "TMQ lacks a clear theme and shows poor momentum and high risk. No notable social buzz reduces attractiveness further." + }, + "IDR": { + "symbol": "IDR", + "overall_score": 25, + "momentum_score": 25, + "theme_score": 30, + "risk_score": 75, + "social_buzz_score": 20, + "brief_analysis": "IDR has no defined theme, weak momentum, and high risk. Absence of KOL support results in low social buzz." + }, + "OSCR": { + "symbol": "OSCR", + "overall_score": 35, + "momentum_score": 30, + "theme_score": 45, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "OSCR in healthcare has a moderate theme score but poor momentum and high risk. Social buzz is moderate due to some KOL presence." + }, + "GLXY": { + "symbol": "GLXY", + "overall_score": 55, + "momentum_score": 55, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 65, + "brief_analysis": "GLXY is an AI hyperscaler in fintech & crypto with decent momentum and strong thematic relevance. Moderate risk and good social buzz from KOLs support a balanced investment profile." + }, + "BKKT": { + "symbol": "BKKT", + "overall_score": 40, + "momentum_score": 45, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "BKKT in crypto RWA theme has moderate momentum and thematic relevance. Risk is elevated due to crypto volatility but social buzz is solid from known contributors." + }, + "ALMU": { + "symbol": "ALMU", + "overall_score": 30, + "momentum_score": 25, + "theme_score": 55, + "risk_score": 75, + "social_buzz_score": 55, + "brief_analysis": "ALMU in photonics has a relevant theme but weak momentum and high risk. Social buzz is moderate but insufficient to improve overall score significantly." + }, + "AVAV": { + "symbol": "AVAV", + "overall_score": 40, + "momentum_score": 25, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 55, + "brief_analysis": "AVAV shows weak momentum with negative YTD and weekly performance. The drone theme is moderately relevant but not a top hot theme in 2025-2026. Moderate social buzz due to KOL presence but high volatility increases risk." + }, + "ETOR": { + "symbol": "ETOR", + "overall_score": 45, + "momentum_score": 30, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 70, + "brief_analysis": "ETOR has negative momentum but less severe than peers. Crypto remains a strong thematic play in fintech & crypto sectors. Good social buzz from notable KOLs supports interest, though risk remains elevated due to volatility." + }, + "COUR": { + "symbol": "COUR", + "overall_score": 42, + "momentum_score": 35, + "theme_score": 65, + "risk_score": 60, + "social_buzz_score": 60, + "brief_analysis": "COUR's momentum is weak but slightly better than others with AI Education theme gaining traction. Moderate social buzz from a known KOL supports interest. Risk is moderate given volatility and sector uncertainty." + }, + "G": { + "symbol": "G", + "overall_score": 30, + "momentum_score": 28, + "theme_score": 20, + "risk_score": 60, + "social_buzz_score": 20, + "brief_analysis": "G lacks a clear thematic play and shows weak momentum. No KOL backing results in low social buzz. Risk is moderate due to volatility but overall attractiveness is low." + }, + "INOD": { + "symbol": "INOD", + "overall_score": 38, + "momentum_score": 27, + "theme_score": 70, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "INOD is tied to AI Data, a strong theme, but suffers from poor momentum and high volatility. Moderate social buzz from a KOL helps but risk remains high." + }, + "FIGR": { + "symbol": "FIGR", + "overall_score": 55, + "momentum_score": 65, + "theme_score": 75, + "risk_score": 60, + "social_buzz_score": 75, + "brief_analysis": "FIGR shows strong recent momentum despite negative YTD, with a relevant RWA theme in fintech & crypto. High social buzz from multiple KOLs boosts attractiveness. Risk is moderate given volatility." + }, + "CHYM": { + "symbol": "CHYM", + "overall_score": 35, + "momentum_score": 22, + "theme_score": 50, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "CHYM's neobanking theme has moderate relevance but momentum is weak and risk is high due to volatility. Social buzz is decent from KOLs but overall score is low." + }, + "RXRX": { + "symbol": "RXRX", + "overall_score": 40, + "momentum_score": 33, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 50, + "brief_analysis": "RXRX benefits from the AI Medicine theme, which is strong and relevant. Momentum is weak but steady. Moderate social buzz and risk due to biotech volatility." + }, + "NB": { + "symbol": "NB", + "overall_score": 32, + "momentum_score": 40, + "theme_score": 55, + "risk_score": 65, + "social_buzz_score": 55, + "brief_analysis": "NB's rare earth theme is niche but important. Momentum is weak and risk moderate. Social buzz is moderate due to KOL presence." + }, + "DNA": { + "symbol": "DNA", + "overall_score": 28, + "momentum_score": 45, + "theme_score": 20, + "risk_score": 70, + "social_buzz_score": 20, + "brief_analysis": "DNA shows some positive momentum but lacks a clear thematic play and social buzz. High risk due to volatility lowers attractiveness." + }, + "OKLO": { + "symbol": "OKLO", + "overall_score": 30, + "momentum_score": 25, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "OKLO's SMR Nuclear theme is relevant but niche. Momentum is weak with high risk. Moderate social buzz from KOLs provides some support." + }, + "SYM": { + "symbol": "SYM", + "overall_score": 30, + "momentum_score": 35, + "theme_score": 65, + "risk_score": 70, + "social_buzz_score": 55, + "brief_analysis": "SYM's robotics theme is relevant but momentum is weak and risk high. Social buzz is moderate due to KOL presence." + }, + "DARE": { + "symbol": "DARE", + "overall_score": 25, + "momentum_score": 20, + "theme_score": 50, + "risk_score": 75, + "social_buzz_score": 50, + "brief_analysis": "DARE's healthcare theme is broad but momentum is poor with high risk. Social buzz is moderate but insufficient to offset negatives." + }, + "EVLV": { + "symbol": "EVLV", + "overall_score": 28, + "momentum_score": 30, + "theme_score": 65, + "risk_score": 70, + "social_buzz_score": 40, + "brief_analysis": "EVLV's AI Detector theme is relevant but momentum is weak and risk high. Social buzz is limited, reducing overall attractiveness." + }, + "PATH": { + "symbol": "PATH", + "overall_score": 27, + "momentum_score": 28, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "PATH has a strong AI Agent theme and decent social buzz but suffers from poor momentum and very high risk, limiting investment appeal." + }, + "GEMI": { + "symbol": "GEMI", + "overall_score": 45, + "momentum_score": 30, + "theme_score": 75, + "risk_score": 80, + "social_buzz_score": 70, + "brief_analysis": "GEMI operates in the crypto theme, which remains relevant but has seen negative momentum YTD and last week. The crypto sector's volatility contributes to a high risk score. The presence of notable KOLs provides decent social buzz." + }, + "SMR": { + "symbol": "SMR", + "overall_score": 35, + "momentum_score": 40, + "theme_score": 65, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "SMR Nuclear is a niche theme with moderate relevance but weak recent momentum and negative YTD performance. Moderate risk due to volatility and moderate social buzz from KOLs." + }, + "CERT": { + "symbol": "CERT", + "overall_score": 40, + "momentum_score": 35, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 50, + "brief_analysis": "CERT's AI Medicine theme is strong and relevant, but recent and YTD momentum is negative. Risk remains elevated due to biotech volatility. Social buzz is moderate with some KOL presence." + }, + "NVO": { + "symbol": "NVO", + "overall_score": 30, + "momentum_score": 30, + "theme_score": 60, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "NVO focuses on GLP-1, a popular biotech theme, but has poor momentum and high risk. Social buzz is moderate due to KOL backing." + }, + "IONQ": { + "symbol": "IONQ", + "overall_score": 38, + "momentum_score": 28, + "theme_score": 80, + "risk_score": 85, + "social_buzz_score": 65, + "brief_analysis": "IONQ is in the hot Quantum Computing theme but suffers from weak momentum and high volatility. Social buzz is good with notable KOLs." + }, + "PPSI": { + "symbol": "PPSI", + "overall_score": 33, + "momentum_score": 35, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 40, + "brief_analysis": "PPSI's AI Energy theme is relevant but momentum and YTD performance are weak. Risk is elevated and social buzz is low due to limited KOL presence." + }, + "HIMS": { + "symbol": "HIMS", + "overall_score": 55, + "momentum_score": 70, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 75, + "brief_analysis": "HIMS shows strong recent momentum despite negative YTD returns. Healthcare theme is stable but less trendy. High social buzz from KOLs supports attractiveness." + }, + "RGTI": { + "symbol": "RGTI", + "overall_score": 35, + "momentum_score": 27, + "theme_score": 80, + "risk_score": 85, + "social_buzz_score": 65, + "brief_analysis": "RGTI is another Quantum Computing player with poor momentum and high risk. Social buzz is decent due to KOLs, but negative performance weighs on score." + }, + "RBRK": { + "symbol": "RBRK", + "overall_score": 37, + "momentum_score": 32, + "theme_score": 65, + "risk_score": 75, + "social_buzz_score": 50, + "brief_analysis": "RBRK in Cybersecurity has moderate thematic relevance but weak momentum and high risk. Social buzz is moderate with some KOL presence." + }, + "WRD": { + "symbol": "WRD", + "overall_score": 45, + "momentum_score": 55, + "theme_score": 70, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "WRD's Robotaxi theme is relevant and recent momentum is positive, though YTD remains negative. Risk is moderate and social buzz is supported by KOLs." + }, + "ZENA": { + "symbol": "ZENA", + "overall_score": 30, + "momentum_score": 25, + "theme_score": 60, + "risk_score": 80, + "social_buzz_score": 30, + "brief_analysis": "ZENA operates in the Drone theme but suffers from weak momentum and high risk. Lack of KOLs results in low social buzz." + }, + "LMND": { + "symbol": "LMND", + "overall_score": 38, + "momentum_score": 40, + "theme_score": 70, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "LMND's AI Insurance theme is relevant with flat recent momentum and negative YTD. Risk is moderate and social buzz is decent due to KOLs." + }, + "HROW": { + "symbol": "HROW", + "overall_score": 28, + "momentum_score": 20, + "theme_score": 55, + "risk_score": 80, + "social_buzz_score": 50, + "brief_analysis": "HROW in Healthcare has poor momentum and high risk. Thematic relevance is moderate, supported by some KOL social buzz." + }, + "INFQ": { + "symbol": "INFQ", + "overall_score": 25, + "momentum_score": 15, + "theme_score": 85, + "risk_score": 90, + "social_buzz_score": 55, + "brief_analysis": "INFQ is a Quantum Computing stock with very weak momentum and very high risk. The theme is strong but social buzz is only moderate." + }, + "AMBA": { + "symbol": "AMBA", + "overall_score": 30, + "momentum_score": 40, + "theme_score": 65, + "risk_score": 75, + "social_buzz_score": 55, + "brief_analysis": "AMBA in Drone and Edge AI has weak momentum and high risk. Thematic relevance is moderate and social buzz is supported by KOLs." + }, + "QUBT": { + "symbol": "QUBT", + "overall_score": 40, + "momentum_score": 30, + "theme_score": 75, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "QUBT operates in the high-interest Quantum Computing theme, earning a strong theme score. However, its significant YTD decline and recent negative momentum reduce its momentum and overall attractiveness. Moderate social buzz from a known KOL supports some investor interest, but volatility contributes to a high risk score." + }, + "MBLY": { + "symbol": "MBLY", + "overall_score": 35, + "momentum_score": 25, + "theme_score": 60, + "risk_score": 75, + "social_buzz_score": 70, + "brief_analysis": "MBLY is in the Robotics theme, which is relevant but less hot than AI or Quantum Computing. The stock shows weak momentum with steep YTD losses and recent negative performance. Strong social buzz from multiple contributors is a positive, but high volatility and risk weigh down the overall score." + }, + "SLP": { + "symbol": "SLP", + "overall_score": 45, + "momentum_score": 50, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 60, + "brief_analysis": "SLP is positioned in AI Medicine, a strong thematic area, with slight positive momentum over the past week and a positive specific date performance. Despite heavy YTD losses, the moderate momentum and thematic relevance support a mid-level score. Social buzz is moderate with known KOL backing." + }, + "SDGR": { + "symbol": "SDGR", + "overall_score": 48, + "momentum_score": 45, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 55, + "brief_analysis": "SDGR shares the AI Medicine theme with SLP and shows similar momentum characteristics with a positive specific date performance but negative YTD. The theme remains strong, and moderate social buzz from a KOL supports interest. Risk remains elevated due to volatility." + }, + "PGNY": { + "symbol": "PGNY", + "overall_score": 35, + "momentum_score": 30, + "theme_score": 50, + "risk_score": 70, + "social_buzz_score": 55, + "brief_analysis": "PGNY is in the broader Healthcare theme, which is less trendy compared to AI or Quantum Computing. It has weak momentum with negative YTD and recent performance. Social buzz is moderate but not strong enough to offset the risk and poor momentum." + }, + "CAI": { + "symbol": "CAI", + "overall_score": 40, + "momentum_score": 30, + "theme_score": 70, + "risk_score": 70, + "social_buzz_score": 65, + "brief_analysis": "CAI operates in AI Medicine with a strong thematic relevance but poor momentum and negative YTD performance. The presence of both KOL and top contributor social buzz supports investor interest, though high volatility increases risk." + }, + "QBTS": { + "symbol": "QBTS", + "overall_score": 35, + "momentum_score": 20, + "theme_score": 75, + "risk_score": 75, + "social_buzz_score": 30, + "brief_analysis": "QBTS is a Quantum Computing stock with strong thematic relevance but suffers from very poor momentum and the worst YTD performance among peers. Lack of KOL or contributor social buzz lowers social score. High volatility and risk further reduce investment attractiveness." + }, + "ENVX": { + "symbol": "ENVX", + "overall_score": 30, + "momentum_score": 35, + "theme_score": 55, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "ENVX is in the Battery theme, which is relevant but less hot than AI or Quantum Computing. Momentum is weak with negative YTD and recent performance. Social buzz is moderate from known contributors, but risk remains high due to volatility." + }, + "SES": { + "symbol": "SES", + "overall_score": 25, + "momentum_score": 55, + "theme_score": 30, + "risk_score": 70, + "social_buzz_score": 20, + "brief_analysis": "SES shows positive momentum recently but suffers from very poor YTD performance and lacks a clear thematic play or social buzz. The absence of a strong theme and social backing limits its attractiveness despite short-term momentum." + }, + "GTLB": { + "symbol": "GTLB", + "overall_score": 30, + "momentum_score": 25, + "theme_score": 65, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "GTLB is in the AI Agent theme, which is relevant but the stock shows weak momentum and poor YTD performance. Social buzz from KOL and contributors is moderate. High risk due to volatility weighs on the overall score." + }, + "CRNC": { + "symbol": "CRNC", + "overall_score": 28, + "momentum_score": 40, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 65, + "brief_analysis": "CRNC operates in the Robotaxi theme, which is niche but relevant. Momentum is slightly negative but better than many peers. Strong social buzz from Benzinga and Timothy Sykes supports interest, though risk remains elevated." + }, + "CDLX": { + "symbol": "CDLX", + "overall_score": 20, + "momentum_score": 15, + "theme_score": 60, + "risk_score": 80, + "social_buzz_score": 25, + "brief_analysis": "CDLX is in AI Data but suffers from very poor momentum and the worst recent weekly performance. Lack of social buzz and high volatility contribute to a high risk score and low overall attractiveness." + }, + "SNAP": { + "symbol": "SNAP", + "overall_score": 22, + "momentum_score": 10, + "theme_score": 65, + "risk_score": 80, + "social_buzz_score": 60, + "brief_analysis": "SNAP is in AI Distribution with significant social buzz and KOL backing. However, it has the worst YTD performance and recent momentum, leading to high risk and low overall score despite thematic relevance." + }, + "KLAR": { + "symbol": "KLAR", + "overall_score": 38, + "momentum_score": 65, + "theme_score": 50, + "risk_score": 65, + "social_buzz_score": 70, + "brief_analysis": "KLAR is in BNPL, a less trendy theme but shows strong recent momentum and social buzz from notable contributors. Despite poor YTD performance, the positive momentum and social backing improve its overall score with moderate risk." + }, + "U": { + "symbol": "U", + "overall_score": 25, + "momentum_score": 20, + "theme_score": 60, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "U is in AI adtech with moderate social buzz but very poor YTD and recent momentum. High volatility leads to elevated risk, limiting its investment attractiveness despite thematic relevance." + }, + "SUUN": { + "symbol": "SUUN", + "overall_score": 25, + "momentum_score": 15, + "theme_score": 50, + "risk_score": 75, + "social_buzz_score": 10, + "brief_analysis": "SUUN is in the Aerospace sector, which remains relevant but the stock has shown very weak momentum with a significant YTD decline of -64.43%. Lack of KOL backing and negative recent performance contribute to low social buzz and momentum scores. High volatility and poor recent returns increase the risk score." + } +} \ No newline at end of file diff --git a/score_stocks.py b/score_stocks.py new file mode 100644 index 0000000..36bb6d2 --- /dev/null +++ b/score_stocks.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python3 +""" +Score all stocks in the MemelyAlpha ranking using AI model. +Processes in batches to handle rate limits and save progress. +""" + +import pandas as pd +import json +import os +import time +from openai import OpenAI + +client = OpenAI() + +EXCEL_PATH = "/home/ubuntu/upload/MemelyAlphaStockRanking(副本)(副本).xlsx" +OUTPUT_JSON = "/home/ubuntu/memely-alpha-stock-ranking/research_scores.json" +PROGRESS_FILE = "/home/ubuntu/memely-alpha-stock-ranking/scoring_progress.json" + +# Read the master list +df = pd.read_excel(EXCEL_PATH, sheet_name='stock master list') + +# Also read Sheet4 for sector/theme info +df4 = pd.read_excel(EXCEL_PATH, sheet_name='Sheet4') +sector_map = {} +for _, row in df4.iterrows(): + sym = row.get('Symbol') + if pd.notna(sym): + sector_map[sym] = { + 'sector': row.get('Sector', ''), + 'theme': row.get('Theme', ''), + 'cap_category': row.get('Cap Category', '') + } + +# Read Sheet6 for additional YTD data +df6 = pd.read_excel(EXCEL_PATH, sheet_name='Sheet6') +ytd_extra = {} +for _, row in df6.iterrows(): + sym = row.get('Symbol') + if pd.notna(sym): + ytd_extra[sym] = row.get('performance Year to Date', None) + +# Build stock info for each symbol +stocks_info = [] +seen = set() +for _, row in df.iterrows(): + sym = row['Symbol'] + if pd.isna(sym) or sym in seen: + continue + seen.add(sym) + + info = { + 'symbol': sym, + 'theme': str(row.get('Theme', '')), + 'perf_7d': row.get('performance past 7 days', None), + 'perf_ytd': row.get('performance Year to Date', None), + 'perf_specific': row.get('performance on specific dates', None), + 'first_call_kol': str(row.get('first call X kol', '')), + 'top_contributor': str(row.get('top contributor', '')), + } + + # Add sector info from Sheet4 + if sym in sector_map: + info['sector'] = sector_map[sym].get('sector', '') + info['theme_s4'] = sector_map[sym].get('theme', '') + + # Add extra YTD from Sheet6 + if sym in ytd_extra and pd.notna(ytd_extra[sym]): + info['ytd_extra'] = ytd_extra[sym] + + stocks_info.append(info) + +print(f"Total unique stocks to score: {len(stocks_info)}") + +# Load progress if exists +scored = {} +if os.path.exists(PROGRESS_FILE): + with open(PROGRESS_FILE, 'r') as f: + scored = json.load(f) + print(f"Loaded {len(scored)} previously scored stocks") + +def score_batch(batch_stocks): + """Score a batch of stocks using AI model.""" + stocks_text = "" + for s in batch_stocks: + perf_7d = f"{s['perf_7d']:.2%}" if pd.notna(s.get('perf_7d')) else "N/A" + perf_ytd = f"{s['perf_ytd']:.2%}" if pd.notna(s.get('perf_ytd')) else "N/A" + perf_spec = f"{s['perf_specific']:.2%}" if pd.notna(s.get('perf_specific')) else "N/A" + sector = s.get('sector', s.get('theme', 'N/A')) + theme = s.get('theme_s4', s.get('theme', 'N/A')) + + stocks_text += f""" +--- +Symbol: {s['symbol']} +Sector: {sector} +Theme: {theme} +Performance (Past 7 Days): {perf_7d} +Performance (Year to Date): {perf_ytd} +Performance (Specific Date): {perf_spec} +First Call KOL: {s.get('first_call_kol', 'N/A')} +Top Contributor: {s.get('top_contributor', 'N/A')} +""" + + prompt = f"""You are a professional stock/crypto analyst. Evaluate each of the following stocks/assets and provide a comprehensive score. + +For EACH stock, provide: +1. **overall_score** (1-100): Overall investment attractiveness score +2. **momentum_score** (1-100): Based on recent price performance and momentum +3. **theme_score** (1-100): How strong/relevant is the thematic play (e.g., AI, Defense, Aerospace, Crypto, etc.) +4. **risk_score** (1-100): Risk level (100 = highest risk) +5. **social_buzz_score** (1-100): Social media attention and KOL backing strength +6. **brief_analysis**: 2-3 sentence analysis explaining the scores + +Consider these factors: +- YTD performance indicates momentum strength +- Thematic relevance to current market trends (AI, Defense, Aerospace, Crypto, Quantum Computing are hot in 2025-2026) +- Small/micro cap stocks with strong themes get higher theme scores +- Stocks with notable KOL backing get higher social buzz scores +- Higher volatility = higher risk score + +Here are the stocks to evaluate: +{stocks_text} + +Return ONLY a valid JSON array with objects for each stock. Each object must have: symbol, overall_score, momentum_score, theme_score, risk_score, social_buzz_score, brief_analysis. +Do not include any text outside the JSON array.""" + + try: + response = client.chat.completions.create( + model="gpt-4.1-mini", + messages=[ + {"role": "system", "content": "You are a professional financial analyst. Always respond with valid JSON only."}, + {"role": "user", "content": prompt} + ], + temperature=0.3, + max_tokens=8000 + ) + + content = response.choices[0].message.content.strip() + # Try to extract JSON from the response + if content.startswith("```"): + content = content.split("```")[1] + if content.startswith("json"): + content = content[4:] + + results = json.loads(content) + return results + except Exception as e: + print(f"Error in batch scoring: {e}") + return None + +# Process in batches of 15 +batch_size = 15 +remaining = [s for s in stocks_info if s['symbol'] not in scored] +print(f"Remaining to score: {len(remaining)}") + +total_batches = (len(remaining) + batch_size - 1) // batch_size + +for i in range(0, len(remaining), batch_size): + batch = remaining[i:i+batch_size] + batch_num = i // batch_size + 1 + symbols_in_batch = [s['symbol'] for s in batch] + print(f"\nBatch {batch_num}/{total_batches}: Scoring {symbols_in_batch}") + + results = score_batch(batch) + + if results: + for r in results: + sym = r.get('symbol', '') + if sym: + scored[sym] = r + print(f" ✓ {sym}: Overall={r.get('overall_score')}, Momentum={r.get('momentum_score')}, Theme={r.get('theme_score')}") + + # Save progress after each batch + with open(PROGRESS_FILE, 'w') as f: + json.dump(scored, f, indent=2, ensure_ascii=False) + else: + print(f" ✗ Batch {batch_num} failed, will retry...") + # Retry once + time.sleep(2) + results = score_batch(batch) + if results: + for r in results: + sym = r.get('symbol', '') + if sym: + scored[sym] = r + with open(PROGRESS_FILE, 'w') as f: + json.dump(scored, f, indent=2, ensure_ascii=False) + + time.sleep(1) # Rate limit + +# Save final results +with open(OUTPUT_JSON, 'w') as f: + json.dump(scored, f, indent=2, ensure_ascii=False) + +print(f"\n=== SCORING COMPLETE ===") +print(f"Total scored: {len(scored)}/{len(stocks_info)}") +print(f"Results saved to: {OUTPUT_JSON}") diff --git a/scoring_progress.json b/scoring_progress.json new file mode 100644 index 0000000..7e8e5f8 --- /dev/null +++ b/scoring_progress.json @@ -0,0 +1,1091 @@ +{ + "EQRLF": { + "symbol": "EQRLF", + "overall_score": 85, + "momentum_score": 95, + "theme_score": 20, + "risk_score": 70, + "social_buzz_score": 10, + "brief_analysis": "EQRLF shows exceptional YTD momentum with a 333.33% gain and strong recent weekly performance. However, lack of clear thematic relevance and minimal social buzz limit its appeal. High volatility contributes to a higher risk score." + }, + "GDRZF": { + "symbol": "GDRZF", + "overall_score": 65, + "momentum_score": 70, + "theme_score": 40, + "risk_score": 80, + "social_buzz_score": 50, + "brief_analysis": "GDRZF has strong YTD gains but recent negative momentum. The Venezuela theme is niche but relevant for geopolitical plays. Moderate social buzz from known contributors helps, but volatility and geopolitical risks increase risk." + }, + "AXTI": { + "symbol": "AXTI", + "overall_score": 80, + "momentum_score": 90, + "theme_score": 75, + "risk_score": 65, + "social_buzz_score": 60, + "brief_analysis": "AXTI benefits from strong momentum and a relevant photonics theme, which is gaining traction. Good social media presence supports its visibility. Moderate risk due to volatility but overall attractive for thematic investors." + }, + "AAOI": { + "symbol": "AAOI", + "overall_score": 70, + "momentum_score": 50, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "AAOI has strong thematic relevance in photonics but recent negative momentum weighs on its score. Social buzz is decent, supporting interest. Higher volatility increases risk, making it a cautious thematic play." + }, + "FSLY": { + "symbol": "FSLY", + "overall_score": 75, + "momentum_score": 80, + "theme_score": 25, + "risk_score": 60, + "social_buzz_score": 55, + "brief_analysis": "FSLY shows solid momentum and decent social media backing but lacks a strong thematic angle. Moderate risk due to volatility and steady performance make it a balanced pick." + }, + "ALM": { + "symbol": "ALM", + "overall_score": 60, + "momentum_score": 55, + "theme_score": 20, + "risk_score": 50, + "social_buzz_score": 40, + "brief_analysis": "ALM has moderate YTD performance and minimal momentum recently. Lack of theme and moderate social buzz reduce attractiveness. Lower volatility results in moderate risk." + }, + "AMPX": { + "symbol": "AMPX", + "overall_score": 78, + "momentum_score": 60, + "theme_score": 80, + "risk_score": 55, + "social_buzz_score": 50, + "brief_analysis": "AMPX has a strong theme with solid state batteries and edge AI relevance. Momentum is moderate but steady. Social buzz is decent and risk is moderate due to sector volatility." + }, + "UCTT": { + "symbol": "UCTT", + "overall_score": 65, + "momentum_score": 60, + "theme_score": 20, + "risk_score": 50, + "social_buzz_score": 45, + "brief_analysis": "UCTT shows moderate momentum and social buzz but lacks a strong thematic play. Risk is moderate with stable performance, making it a cautious option." + }, + "ICHR": { + "symbol": "ICHR", + "overall_score": 60, + "momentum_score": 50, + "theme_score": 20, + "risk_score": 55, + "social_buzz_score": 40, + "brief_analysis": "ICHR has modest YTD gains but recent negative momentum. No clear theme and moderate social buzz limit its appeal. Risk is moderate due to some volatility." + }, + "PSRHF": { + "symbol": "PSRHF", + "overall_score": 75, + "momentum_score": 85, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 55, + "brief_analysis": "PSRHF benefits from strong momentum and a niche Helium 3 theme with future potential. Social buzz is good, supporting interest. Moderate risk due to volatility." + }, + "ATOM": { + "symbol": "ATOM", + "overall_score": 55, + "momentum_score": 45, + "theme_score": 20, + "risk_score": 65, + "social_buzz_score": 50, + "brief_analysis": "ATOM has weak recent momentum and no clear thematic relevance. Social buzz is moderate but recent negative performance increases risk." + }, + "INTT": { + "symbol": "INTT", + "overall_score": 60, + "momentum_score": 55, + "theme_score": 20, + "risk_score": 50, + "social_buzz_score": 40, + "brief_analysis": "INTT shows moderate momentum and social buzz but lacks a strong thematic angle. Risk is moderate with steady performance." + }, + "RCAT": { + "symbol": "RCAT", + "overall_score": 70, + "momentum_score": 75, + "theme_score": 65, + "risk_score": 55, + "social_buzz_score": 50, + "brief_analysis": "RCAT has solid momentum and a relevant defense drone theme. Social buzz is moderate, and risk is relatively contained, making it an attractive thematic play." + }, + "AEHR": { + "symbol": "AEHR", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 20, + "risk_score": 70, + "social_buzz_score": 35, + "brief_analysis": "AEHR has weak momentum and no clear thematic play. Social buzz is low and volatility is high, resulting in a higher risk profile." + }, + "UAMY": { + "symbol": "UAMY", + "overall_score": 65, + "momentum_score": 55, + "theme_score": 60, + "risk_score": 60, + "social_buzz_score": 45, + "brief_analysis": "UAMY benefits from a relevant rare earth defense theme and moderate social buzz. Momentum is modest and risk is moderate due to sector volatility." + }, + "LASR": { + "symbol": "LASR", + "overall_score": 80, + "momentum_score": 85, + "theme_score": 75, + "risk_score": 50, + "social_buzz_score": 70, + "brief_analysis": "LASR shows strong YTD momentum with 63.15% gain and moderate weekly growth, reflecting solid price performance. Its defense theme is highly relevant in 2025, supported by notable KOLs, boosting social buzz. Moderate volatility keeps risk at a balanced level." + }, + "UMAC": { + "symbol": "UMAC", + "overall_score": 88, + "momentum_score": 95, + "theme_score": 80, + "risk_score": 65, + "social_buzz_score": 75, + "brief_analysis": "UMAC exhibits exceptional momentum with 18.06% weekly and 50.33% YTD gains, driven by strong thematic relevance in drones within defense. The presence of active KOLs enhances social buzz. Higher volatility due to sharp price moves increases risk moderately." + }, + "OSS": { + "symbol": "OSS", + "overall_score": 82, + "momentum_score": 80, + "theme_score": 70, + "risk_score": 55, + "social_buzz_score": 70, + "brief_analysis": "OSS maintains strong momentum with 13.26% weekly and 48.24% YTD gains in the defense sector. The theme is solid but less niche than drones, with good KOL support. Moderate volatility results in a balanced risk profile." + }, + "RIME": { + "symbol": "RIME", + "overall_score": 55, + "momentum_score": 40, + "theme_score": 40, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "RIME has flat weekly performance and a negative specific date return, indicating weak momentum despite decent YTD gains. The lack of a clear theme lowers thematic appeal. Moderate social buzz from a single KOL and higher volatility increase risk." + }, + "IPGP": { + "symbol": "IPGP", + "overall_score": 60, + "momentum_score": 45, + "theme_score": 40, + "risk_score": 65, + "social_buzz_score": 60, + "brief_analysis": "IPGP shows negative short-term momentum with a strong YTD but recent declines, reflecting volatility. The absence of a strong thematic focus limits theme score. Solid KOL presence supports moderate social buzz, while risk is elevated due to price swings." + }, + "SOLS": { + "symbol": "SOLS", + "overall_score": 62, + "momentum_score": 55, + "theme_score": 40, + "risk_score": 55, + "social_buzz_score": 60, + "brief_analysis": "SOLS has modest negative weekly momentum but decent YTD gains. The lack of a clear theme reduces thematic appeal. KOL support is moderate, and risk is balanced with moderate volatility." + }, + "IRDM": { + "symbol": "IRDM", + "overall_score": 75, + "momentum_score": 70, + "theme_score": 65, + "risk_score": 50, + "social_buzz_score": 70, + "brief_analysis": "IRDM shows steady momentum with positive weekly and YTD returns in the defense DSCS niche, which is relevant but less hot than drones or AI. Strong KOL backing enhances social buzz. Risk remains moderate due to balanced volatility." + }, + "CRCL": { + "symbol": "CRCL", + "overall_score": 78, + "momentum_score": 75, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 75, + "brief_analysis": "CRCL benefits from a strong thematic play in stablecoins within fintech & crypto, with solid YTD and weekly gains plus a very strong specific date performance. Good KOL support boosts social buzz. Volatility is moderate, resulting in a medium risk score." + }, + "SKM": { + "symbol": "SKM", + "overall_score": 58, + "momentum_score": 45, + "theme_score": 50, + "risk_score": 60, + "social_buzz_score": 65, + "brief_analysis": "SKM has weak momentum with negative weekly and specific date returns but decent YTD growth. The Anthropic theme is relevant but niche, giving a moderate theme score. Good KOL presence supports social buzz, while risk is elevated due to recent price drops." + }, + "ASTI": { + "symbol": "ASTI", + "overall_score": 50, + "momentum_score": 30, + "theme_score": 65, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "ASTI shows weak momentum with significant recent losses despite aerospace theme relevance. The theme is strong but momentum and risk weigh down the score. Moderate social buzz from KOLs is present but insufficient to offset negatives." + }, + "KLIC": { + "symbol": "KLIC", + "overall_score": 60, + "momentum_score": 50, + "theme_score": 40, + "risk_score": 55, + "social_buzz_score": 60, + "brief_analysis": "KLIC has moderate YTD gains but weak recent momentum and no clear thematic focus, limiting theme score. KOL support is moderate, and risk is balanced with moderate volatility." + }, + "HIMX": { + "symbol": "HIMX", + "overall_score": 65, + "momentum_score": 75, + "theme_score": 40, + "risk_score": 60, + "social_buzz_score": 40, + "brief_analysis": "HIMX shows strong recent momentum with a 27.46% weekly gain but modest YTD performance. Lack of a clear theme and absence of KOL backing reduce theme and social buzz scores. Moderate risk due to volatility." + }, + "Q": { + "symbol": "Q", + "overall_score": 58, + "momentum_score": 50, + "theme_score": 40, + "risk_score": 55, + "social_buzz_score": 40, + "brief_analysis": "Q has weak momentum with negative weekly and specific date returns but moderate YTD gains. No clear thematic play or KOL support lowers theme and social buzz scores. Risk is moderate with balanced volatility." + }, + "NBIS": { + "symbol": "NBIS", + "overall_score": 75, + "momentum_score": 80, + "theme_score": 75, + "risk_score": 55, + "social_buzz_score": 75, + "brief_analysis": "NBIS benefits from strong momentum and a relevant AI hyperscaler theme, which is highly attractive in 2025. Good KOL support drives social buzz. Moderate risk due to balanced volatility." + }, + "NVTS": { + "symbol": "NVTS", + "overall_score": 70, + "momentum_score": 80, + "theme_score": 40, + "risk_score": 55, + "social_buzz_score": 40, + "brief_analysis": "NVTS shows strong momentum with 20.53% weekly and YTD gains but lacks a clear thematic focus and KOL backing, limiting theme and social buzz scores. Risk is moderate due to volatility." + }, + "PPTA": { + "symbol": "PPTA", + "overall_score": 55, + "momentum_score": 50, + "theme_score": 30, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "PPTA shows moderate YTD performance but recent weekly decline impacts momentum negatively. Thematic relevance is unclear, lowering theme score. Moderate social buzz from known KOLs supports some interest, but volatility increases risk." + }, + "PL": { + "symbol": "PL", + "overall_score": 75, + "momentum_score": 65, + "theme_score": 80, + "risk_score": 55, + "social_buzz_score": 70, + "brief_analysis": "PL benefits from strong aerospace theme aligned with market trends and solid YTD gains. Recent slight pullback reduces momentum slightly. Good social buzz from AI and investing KOLs enhances attractiveness with moderate risk." + }, + "STM": { + "symbol": "STM", + "overall_score": 70, + "momentum_score": 60, + "theme_score": 75, + "risk_score": 50, + "social_buzz_score": 50, + "brief_analysis": "STM has solid aerospace thematic relevance and decent YTD performance. Recent mild decline affects momentum. Social buzz is moderate with some KOL presence. Risk is moderate due to steady performance." + }, + "VOXR": { + "symbol": "VOXR", + "overall_score": 50, + "momentum_score": 45, + "theme_score": 40, + "risk_score": 65, + "social_buzz_score": 40, + "brief_analysis": "VOXR's precious metal theme is less trendy in 2025-2026, limiting theme score. YTD performance is decent but recent weekly losses reduce momentum. Limited social buzz and moderate volatility contribute to risk." + }, + "UUUU": { + "symbol": "UUUU", + "overall_score": 45, + "momentum_score": 35, + "theme_score": 60, + "risk_score": 80, + "social_buzz_score": 65, + "brief_analysis": "UUUU's nuclear theme is relevant but YTD and recent performance are weak, dragging momentum down. High volatility and sharp recent losses increase risk. Strong KOL backing supports social buzz." + }, + "AREC": { + "symbol": "AREC", + "overall_score": 60, + "momentum_score": 55, + "theme_score": 65, + "risk_score": 60, + "social_buzz_score": 55, + "brief_analysis": "AREC's rare earth theme is moderately relevant with decent YTD gains. Recent weekly decline impacts momentum slightly. Moderate social buzz from a single KOL and average risk due to volatility." + }, + "CPSH": { + "symbol": "CPSH", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 40, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "CPSH shows moderate YTD gains but sharp recent daily decline hurts momentum. Material theme is less hot currently. Strong KOL presence boosts social buzz but high volatility raises risk." + }, + "LFMD": { + "symbol": "LFMD", + "overall_score": 80, + "momentum_score": 90, + "theme_score": 75, + "risk_score": 65, + "social_buzz_score": 70, + "brief_analysis": "LFMD exhibits exceptional recent momentum with strong weekly and daily gains. GLP-1 theme remains highly relevant in biotech. Good social buzz from KOLs supports interest, though volatility raises risk moderately." + }, + "CRML": { + "symbol": "CRML", + "overall_score": 55, + "momentum_score": 55, + "theme_score": 50, + "risk_score": 50, + "social_buzz_score": 55, + "brief_analysis": "CRML's defense and Greenland theme is niche but relevant. Modest YTD and weekly performance yield moderate momentum. Social buzz is moderate with KOL backing. Risk is average due to steady performance." + }, + "NEE": { + "symbol": "NEE", + "overall_score": 60, + "momentum_score": 60, + "theme_score": 70, + "risk_score": 45, + "social_buzz_score": 40, + "brief_analysis": "NEE's AI Energy theme is relevant and YTD performance is decent. Momentum is stable with slight gains. Lack of KOL presence limits social buzz. Lower volatility results in lower risk." + }, + "KTOS": { + "symbol": "KTOS", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "KTOS has a relevant defense theme but weak recent and YTD performance lowers momentum. Strong KOL backing supports social buzz. Elevated volatility increases risk." + }, + "COHU": { + "symbol": "COHU", + "overall_score": 45, + "momentum_score": 40, + "theme_score": 30, + "risk_score": 70, + "social_buzz_score": 30, + "brief_analysis": "COHU lacks clear thematic relevance and shows weak recent and YTD performance. Limited social buzz and high volatility contribute to higher risk and lower overall attractiveness." + }, + "AIRO": { + "symbol": "AIRO", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 65, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "AIRO's drone defense theme is relevant but weak YTD and recent performance hurt momentum. Strong KOL presence supports social buzz. High volatility increases risk significantly." + }, + "ASTS": { + "symbol": "ASTS", + "overall_score": 55, + "momentum_score": 50, + "theme_score": 70, + "risk_score": 55, + "social_buzz_score": 65, + "brief_analysis": "ASTS has a solid aerospace theme with moderate YTD gains and recent positive daily performance. Good KOL backing enhances social buzz. Moderate risk due to some volatility." + }, + "RDW": { + "symbol": "RDW", + "overall_score": 60, + "momentum_score": 65, + "theme_score": 70, + "risk_score": 50, + "social_buzz_score": 65, + "brief_analysis": "RDW shows decent momentum with strong recent daily gains and moderate YTD performance. Aerospace theme is relevant and supported by active KOLs. Risk remains moderate due to steady performance." + }, + "MP": { + "symbol": "MP", + "overall_score": 45, + "momentum_score": 40, + "theme_score": 20, + "risk_score": 55, + "social_buzz_score": 10, + "brief_analysis": "MP shows weak recent momentum with a slight positive YTD but negative weekly performance. Lack of a clear theme and no notable social media presence lowers its attractiveness. Moderate risk due to volatility and lack of thematic strength." + }, + "VPG": { + "symbol": "VPG", + "overall_score": 60, + "momentum_score": 35, + "theme_score": 75, + "risk_score": 70, + "social_buzz_score": 70, + "brief_analysis": "VPG operates in the Robotics theme, which is relevant and growing, supported by notable KOLs boosting social buzz. However, recent negative momentum and high volatility increase risk, slightly dampening the overall score." + }, + "MRCY": { + "symbol": "MRCY", + "overall_score": 50, + "momentum_score": 25, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 65, + "brief_analysis": "MRCY is in the Defense sector, a strong thematic area, with good social media backing. However, it suffers from poor recent momentum and high volatility, leading to a higher risk score and moderate overall attractiveness." + }, + "LEXX": { + "symbol": "LEXX", + "overall_score": 50, + "momentum_score": 50, + "theme_score": 25, + "risk_score": 50, + "social_buzz_score": 60, + "brief_analysis": "LEXX shows decent momentum with positive YTD and weekly performance and has some social media presence. Lack of a clear theme limits its thematic score, and moderate volatility keeps risk average." + }, + "ACMR": { + "symbol": "ACMR", + "overall_score": 55, + "momentum_score": 30, + "theme_score": 80, + "risk_score": 80, + "social_buzz_score": 70, + "brief_analysis": "ACMR benefits from a strong AI Chip theme and good social buzz but has poor recent momentum and high volatility, reflected in a high risk score. The overall score balances strong thematic appeal with momentum and risk concerns." + }, + "LTRX": { + "symbol": "LTRX", + "overall_score": 40, + "momentum_score": 45, + "theme_score": 15, + "risk_score": 40, + "social_buzz_score": 10, + "brief_analysis": "LTRX has mild positive momentum but lacks a clear theme and social media presence, resulting in low thematic and social buzz scores. Lower volatility reduces risk but overall attractiveness remains limited." + }, + "OPRA": { + "symbol": "OPRA", + "overall_score": 55, + "momentum_score": 40, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 65, + "brief_analysis": "OPRA's AI Distribution theme is relevant and supported by active KOLs, contributing to solid social buzz. Momentum is modest with mixed recent performance, and risk is moderate due to some volatility." + }, + "FLY": { + "symbol": "FLY", + "overall_score": 60, + "momentum_score": 75, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 70, + "brief_analysis": "FLY has strong recent momentum with positive weekly and specific date gains in the Aerospace theme, which remains relevant. Good social media backing supports the social buzz score, though moderate risk is present due to volatility." + }, + "POET": { + "symbol": "POET", + "overall_score": 50, + "momentum_score": 50, + "theme_score": 60, + "risk_score": 55, + "social_buzz_score": 60, + "brief_analysis": "POET's Photonics theme is moderately relevant with decent momentum on specific dates despite negative YTD. Social buzz is supported by KOLs, and risk is moderate due to some volatility." + }, + "TE": { + "symbol": "TE", + "overall_score": 55, + "momentum_score": 65, + "theme_score": 65, + "risk_score": 55, + "social_buzz_score": 65, + "brief_analysis": "TE benefits from a strong Solar theme and good momentum on recent dates. Social buzz is solid with notable KOLs, and risk remains moderate due to manageable volatility." + }, + "VOYG": { + "symbol": "VOYG", + "overall_score": 45, + "momentum_score": 40, + "theme_score": 60, + "risk_score": 50, + "social_buzz_score": 60, + "brief_analysis": "VOYG operates in Aerospace with moderate thematic relevance and social buzz. Momentum is weak with negative YTD and mixed recent performance, and risk is moderate." + }, + "JOYY": { + "symbol": "JOYY", + "overall_score": 40, + "momentum_score": 45, + "theme_score": 60, + "risk_score": 50, + "social_buzz_score": 50, + "brief_analysis": "JOYY's AI Distribution theme is relevant but recent momentum is weak with negative YTD. Social buzz is moderate with some KOL presence, and risk is average." + }, + "SYNA": { + "symbol": "SYNA", + "overall_score": 35, + "momentum_score": 30, + "theme_score": 65, + "risk_score": 60, + "social_buzz_score": 40, + "brief_analysis": "SYNA has a relevant AI IoT theme but suffers from negative momentum and moderate volatility. Social buzz is limited, which combined with risk factors lowers overall attractiveness." + }, + "CEPT": { + "symbol": "CEPT", + "overall_score": 35, + "momentum_score": 35, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 55, + "brief_analysis": "CEPT's Fintech & Crypto theme with RWA focus is relevant but recent momentum is weak. Social buzz is decent, but higher volatility increases risk and lowers the overall score." + }, + "ONDS": { + "symbol": "ONDS", + "overall_score": 40, + "momentum_score": 50, + "theme_score": 55, + "risk_score": 60, + "social_buzz_score": 50, + "brief_analysis": "ONDS operates in the Drone theme with moderate thematic relevance and social buzz. Momentum is mixed with negative YTD but positive recent performance, and risk is moderate due to volatility." + }, + "SATS": { + "symbol": "SATS", + "overall_score": 55, + "momentum_score": 40, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 65, + "brief_analysis": "SATS operates in the aerospace sector which remains relevant but has shown negative momentum YTD and weekly. Moderate risk due to volatility and moderate social buzz from notable KOLs. The aerospace theme is solid but not a top hot theme currently." + }, + "LPTH": { + "symbol": "LPTH", + "overall_score": 35, + "momentum_score": 25, + "theme_score": 50, + "risk_score": 75, + "social_buzz_score": 55, + "brief_analysis": "LPTH is in photonics, a niche but important tech theme. However, it has weak momentum with significant negative returns and high volatility, increasing risk. Social buzz is moderate but limited to one KOL." + }, + "TMC": { + "symbol": "TMC", + "overall_score": 38, + "momentum_score": 30, + "theme_score": 55, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "TMC focuses on rare earths, a critical theme for tech and defense but currently underperforming with negative momentum and high risk. Social buzz is modest, limiting overall attractiveness." + }, + "SHMD": { + "symbol": "SHMD", + "overall_score": 30, + "momentum_score": 20, + "theme_score": 60, + "risk_score": 80, + "social_buzz_score": 50, + "brief_analysis": "SHMD is in AI PCB, a relevant AI theme, but has poor momentum and very high risk due to volatility and steep losses. Social buzz is average but insufficient to offset risk." + }, + "RKLB": { + "symbol": "RKLB", + "overall_score": 45, + "momentum_score": 35, + "theme_score": 65, + "risk_score": 65, + "social_buzz_score": 60, + "brief_analysis": "RKLB in aerospace has moderate thematic relevance and social buzz but suffers from negative momentum and moderate risk. The sector is stable but not a top performer currently." + }, + "CRSP": { + "symbol": "CRSP", + "overall_score": 28, + "momentum_score": 20, + "theme_score": 40, + "risk_score": 85, + "social_buzz_score": 20, + "brief_analysis": "CRSP is in gene editing, a specialized theme but with very poor momentum and high risk. Lack of KOL backing results in low social buzz, making it less attractive currently." + }, + "DPRO": { + "symbol": "DPRO", + "overall_score": 40, + "momentum_score": 35, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 55, + "brief_analysis": "DPRO in defense drone tech has a relevant theme but weak momentum and high risk. Moderate social buzz from a known KOL helps, but overall scores are subdued due to performance." + }, + "ZETA": { + "symbol": "ZETA", + "overall_score": 50, + "momentum_score": 40, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 65, + "brief_analysis": "ZETA is an AI Agent play with a strong thematic score and decent social buzz. Momentum is weak but recent positive specific date performance helps. Risk remains moderate due to volatility." + }, + "VELO": { + "symbol": "VELO", + "overall_score": 65, + "momentum_score": 75, + "theme_score": 75, + "risk_score": 70, + "social_buzz_score": 70, + "brief_analysis": "VELO in aerospace shows strong recent momentum with a big spike, solid thematic relevance, and good social buzz from KOLs. Risk is elevated due to volatility but overall attractiveness is high." + }, + "TMQ": { + "symbol": "TMQ", + "overall_score": 25, + "momentum_score": 30, + "theme_score": 30, + "risk_score": 75, + "social_buzz_score": 20, + "brief_analysis": "TMQ lacks a clear theme and shows poor momentum and high risk. No notable social buzz reduces attractiveness further." + }, + "IDR": { + "symbol": "IDR", + "overall_score": 25, + "momentum_score": 25, + "theme_score": 30, + "risk_score": 75, + "social_buzz_score": 20, + "brief_analysis": "IDR has no defined theme, weak momentum, and high risk. Absence of KOL support results in low social buzz." + }, + "OSCR": { + "symbol": "OSCR", + "overall_score": 35, + "momentum_score": 30, + "theme_score": 45, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "OSCR in healthcare has a moderate theme score but poor momentum and high risk. Social buzz is moderate due to some KOL presence." + }, + "GLXY": { + "symbol": "GLXY", + "overall_score": 55, + "momentum_score": 55, + "theme_score": 70, + "risk_score": 60, + "social_buzz_score": 65, + "brief_analysis": "GLXY is an AI hyperscaler in fintech & crypto with decent momentum and strong thematic relevance. Moderate risk and good social buzz from KOLs support a balanced investment profile." + }, + "BKKT": { + "symbol": "BKKT", + "overall_score": 40, + "momentum_score": 45, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "BKKT in crypto RWA theme has moderate momentum and thematic relevance. Risk is elevated due to crypto volatility but social buzz is solid from known contributors." + }, + "ALMU": { + "symbol": "ALMU", + "overall_score": 30, + "momentum_score": 25, + "theme_score": 55, + "risk_score": 75, + "social_buzz_score": 55, + "brief_analysis": "ALMU in photonics has a relevant theme but weak momentum and high risk. Social buzz is moderate but insufficient to improve overall score significantly." + }, + "AVAV": { + "symbol": "AVAV", + "overall_score": 40, + "momentum_score": 25, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 55, + "brief_analysis": "AVAV shows weak momentum with negative YTD and weekly performance. The drone theme is moderately relevant but not a top hot theme in 2025-2026. Moderate social buzz due to KOL presence but high volatility increases risk." + }, + "ETOR": { + "symbol": "ETOR", + "overall_score": 45, + "momentum_score": 30, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 70, + "brief_analysis": "ETOR has negative momentum but less severe than peers. Crypto remains a strong thematic play in fintech & crypto sectors. Good social buzz from notable KOLs supports interest, though risk remains elevated due to volatility." + }, + "COUR": { + "symbol": "COUR", + "overall_score": 42, + "momentum_score": 35, + "theme_score": 65, + "risk_score": 60, + "social_buzz_score": 60, + "brief_analysis": "COUR's momentum is weak but slightly better than others with AI Education theme gaining traction. Moderate social buzz from a known KOL supports interest. Risk is moderate given volatility and sector uncertainty." + }, + "G": { + "symbol": "G", + "overall_score": 30, + "momentum_score": 28, + "theme_score": 20, + "risk_score": 60, + "social_buzz_score": 20, + "brief_analysis": "G lacks a clear thematic play and shows weak momentum. No KOL backing results in low social buzz. Risk is moderate due to volatility but overall attractiveness is low." + }, + "INOD": { + "symbol": "INOD", + "overall_score": 38, + "momentum_score": 27, + "theme_score": 70, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "INOD is tied to AI Data, a strong theme, but suffers from poor momentum and high volatility. Moderate social buzz from a KOL helps but risk remains high." + }, + "FIGR": { + "symbol": "FIGR", + "overall_score": 55, + "momentum_score": 65, + "theme_score": 75, + "risk_score": 60, + "social_buzz_score": 75, + "brief_analysis": "FIGR shows strong recent momentum despite negative YTD, with a relevant RWA theme in fintech & crypto. High social buzz from multiple KOLs boosts attractiveness. Risk is moderate given volatility." + }, + "CHYM": { + "symbol": "CHYM", + "overall_score": 35, + "momentum_score": 22, + "theme_score": 50, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "CHYM's neobanking theme has moderate relevance but momentum is weak and risk is high due to volatility. Social buzz is decent from KOLs but overall score is low." + }, + "RXRX": { + "symbol": "RXRX", + "overall_score": 40, + "momentum_score": 33, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 50, + "brief_analysis": "RXRX benefits from the AI Medicine theme, which is strong and relevant. Momentum is weak but steady. Moderate social buzz and risk due to biotech volatility." + }, + "NB": { + "symbol": "NB", + "overall_score": 32, + "momentum_score": 40, + "theme_score": 55, + "risk_score": 65, + "social_buzz_score": 55, + "brief_analysis": "NB's rare earth theme is niche but important. Momentum is weak and risk moderate. Social buzz is moderate due to KOL presence." + }, + "DNA": { + "symbol": "DNA", + "overall_score": 28, + "momentum_score": 45, + "theme_score": 20, + "risk_score": 70, + "social_buzz_score": 20, + "brief_analysis": "DNA shows some positive momentum but lacks a clear thematic play and social buzz. High risk due to volatility lowers attractiveness." + }, + "OKLO": { + "symbol": "OKLO", + "overall_score": 30, + "momentum_score": 25, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 50, + "brief_analysis": "OKLO's SMR Nuclear theme is relevant but niche. Momentum is weak with high risk. Moderate social buzz from KOLs provides some support." + }, + "SYM": { + "symbol": "SYM", + "overall_score": 30, + "momentum_score": 35, + "theme_score": 65, + "risk_score": 70, + "social_buzz_score": 55, + "brief_analysis": "SYM's robotics theme is relevant but momentum is weak and risk high. Social buzz is moderate due to KOL presence." + }, + "DARE": { + "symbol": "DARE", + "overall_score": 25, + "momentum_score": 20, + "theme_score": 50, + "risk_score": 75, + "social_buzz_score": 50, + "brief_analysis": "DARE's healthcare theme is broad but momentum is poor with high risk. Social buzz is moderate but insufficient to offset negatives." + }, + "EVLV": { + "symbol": "EVLV", + "overall_score": 28, + "momentum_score": 30, + "theme_score": 65, + "risk_score": 70, + "social_buzz_score": 40, + "brief_analysis": "EVLV's AI Detector theme is relevant but momentum is weak and risk high. Social buzz is limited, reducing overall attractiveness." + }, + "PATH": { + "symbol": "PATH", + "overall_score": 27, + "momentum_score": 28, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "PATH has a strong AI Agent theme and decent social buzz but suffers from poor momentum and very high risk, limiting investment appeal." + }, + "GEMI": { + "symbol": "GEMI", + "overall_score": 45, + "momentum_score": 30, + "theme_score": 75, + "risk_score": 80, + "social_buzz_score": 70, + "brief_analysis": "GEMI operates in the crypto theme, which remains relevant but has seen negative momentum YTD and last week. The crypto sector's volatility contributes to a high risk score. The presence of notable KOLs provides decent social buzz." + }, + "SMR": { + "symbol": "SMR", + "overall_score": 35, + "momentum_score": 40, + "theme_score": 65, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "SMR Nuclear is a niche theme with moderate relevance but weak recent momentum and negative YTD performance. Moderate risk due to volatility and moderate social buzz from KOLs." + }, + "CERT": { + "symbol": "CERT", + "overall_score": 40, + "momentum_score": 35, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 50, + "brief_analysis": "CERT's AI Medicine theme is strong and relevant, but recent and YTD momentum is negative. Risk remains elevated due to biotech volatility. Social buzz is moderate with some KOL presence." + }, + "NVO": { + "symbol": "NVO", + "overall_score": 30, + "momentum_score": 30, + "theme_score": 60, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "NVO focuses on GLP-1, a popular biotech theme, but has poor momentum and high risk. Social buzz is moderate due to KOL backing." + }, + "IONQ": { + "symbol": "IONQ", + "overall_score": 38, + "momentum_score": 28, + "theme_score": 80, + "risk_score": 85, + "social_buzz_score": 65, + "brief_analysis": "IONQ is in the hot Quantum Computing theme but suffers from weak momentum and high volatility. Social buzz is good with notable KOLs." + }, + "PPSI": { + "symbol": "PPSI", + "overall_score": 33, + "momentum_score": 35, + "theme_score": 70, + "risk_score": 75, + "social_buzz_score": 40, + "brief_analysis": "PPSI's AI Energy theme is relevant but momentum and YTD performance are weak. Risk is elevated and social buzz is low due to limited KOL presence." + }, + "HIMS": { + "symbol": "HIMS", + "overall_score": 55, + "momentum_score": 70, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 75, + "brief_analysis": "HIMS shows strong recent momentum despite negative YTD returns. Healthcare theme is stable but less trendy. High social buzz from KOLs supports attractiveness." + }, + "RGTI": { + "symbol": "RGTI", + "overall_score": 35, + "momentum_score": 27, + "theme_score": 80, + "risk_score": 85, + "social_buzz_score": 65, + "brief_analysis": "RGTI is another Quantum Computing player with poor momentum and high risk. Social buzz is decent due to KOLs, but negative performance weighs on score." + }, + "RBRK": { + "symbol": "RBRK", + "overall_score": 37, + "momentum_score": 32, + "theme_score": 65, + "risk_score": 75, + "social_buzz_score": 50, + "brief_analysis": "RBRK in Cybersecurity has moderate thematic relevance but weak momentum and high risk. Social buzz is moderate with some KOL presence." + }, + "WRD": { + "symbol": "WRD", + "overall_score": 45, + "momentum_score": 55, + "theme_score": 70, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "WRD's Robotaxi theme is relevant and recent momentum is positive, though YTD remains negative. Risk is moderate and social buzz is supported by KOLs." + }, + "ZENA": { + "symbol": "ZENA", + "overall_score": 30, + "momentum_score": 25, + "theme_score": 60, + "risk_score": 80, + "social_buzz_score": 30, + "brief_analysis": "ZENA operates in the Drone theme but suffers from weak momentum and high risk. Lack of KOLs results in low social buzz." + }, + "LMND": { + "symbol": "LMND", + "overall_score": 38, + "momentum_score": 40, + "theme_score": 70, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "LMND's AI Insurance theme is relevant with flat recent momentum and negative YTD. Risk is moderate and social buzz is decent due to KOLs." + }, + "HROW": { + "symbol": "HROW", + "overall_score": 28, + "momentum_score": 20, + "theme_score": 55, + "risk_score": 80, + "social_buzz_score": 50, + "brief_analysis": "HROW in Healthcare has poor momentum and high risk. Thematic relevance is moderate, supported by some KOL social buzz." + }, + "INFQ": { + "symbol": "INFQ", + "overall_score": 25, + "momentum_score": 15, + "theme_score": 85, + "risk_score": 90, + "social_buzz_score": 55, + "brief_analysis": "INFQ is a Quantum Computing stock with very weak momentum and very high risk. The theme is strong but social buzz is only moderate." + }, + "AMBA": { + "symbol": "AMBA", + "overall_score": 30, + "momentum_score": 40, + "theme_score": 65, + "risk_score": 75, + "social_buzz_score": 55, + "brief_analysis": "AMBA in Drone and Edge AI has weak momentum and high risk. Thematic relevance is moderate and social buzz is supported by KOLs." + }, + "QUBT": { + "symbol": "QUBT", + "overall_score": 40, + "momentum_score": 30, + "theme_score": 75, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "QUBT operates in the high-interest Quantum Computing theme, earning a strong theme score. However, its significant YTD decline and recent negative momentum reduce its momentum and overall attractiveness. Moderate social buzz from a known KOL supports some investor interest, but volatility contributes to a high risk score." + }, + "MBLY": { + "symbol": "MBLY", + "overall_score": 35, + "momentum_score": 25, + "theme_score": 60, + "risk_score": 75, + "social_buzz_score": 70, + "brief_analysis": "MBLY is in the Robotics theme, which is relevant but less hot than AI or Quantum Computing. The stock shows weak momentum with steep YTD losses and recent negative performance. Strong social buzz from multiple contributors is a positive, but high volatility and risk weigh down the overall score." + }, + "SLP": { + "symbol": "SLP", + "overall_score": 45, + "momentum_score": 50, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 60, + "brief_analysis": "SLP is positioned in AI Medicine, a strong thematic area, with slight positive momentum over the past week and a positive specific date performance. Despite heavy YTD losses, the moderate momentum and thematic relevance support a mid-level score. Social buzz is moderate with known KOL backing." + }, + "SDGR": { + "symbol": "SDGR", + "overall_score": 48, + "momentum_score": 45, + "theme_score": 70, + "risk_score": 65, + "social_buzz_score": 55, + "brief_analysis": "SDGR shares the AI Medicine theme with SLP and shows similar momentum characteristics with a positive specific date performance but negative YTD. The theme remains strong, and moderate social buzz from a KOL supports interest. Risk remains elevated due to volatility." + }, + "PGNY": { + "symbol": "PGNY", + "overall_score": 35, + "momentum_score": 30, + "theme_score": 50, + "risk_score": 70, + "social_buzz_score": 55, + "brief_analysis": "PGNY is in the broader Healthcare theme, which is less trendy compared to AI or Quantum Computing. It has weak momentum with negative YTD and recent performance. Social buzz is moderate but not strong enough to offset the risk and poor momentum." + }, + "CAI": { + "symbol": "CAI", + "overall_score": 40, + "momentum_score": 30, + "theme_score": 70, + "risk_score": 70, + "social_buzz_score": 65, + "brief_analysis": "CAI operates in AI Medicine with a strong thematic relevance but poor momentum and negative YTD performance. The presence of both KOL and top contributor social buzz supports investor interest, though high volatility increases risk." + }, + "QBTS": { + "symbol": "QBTS", + "overall_score": 35, + "momentum_score": 20, + "theme_score": 75, + "risk_score": 75, + "social_buzz_score": 30, + "brief_analysis": "QBTS is a Quantum Computing stock with strong thematic relevance but suffers from very poor momentum and the worst YTD performance among peers. Lack of KOL or contributor social buzz lowers social score. High volatility and risk further reduce investment attractiveness." + }, + "ENVX": { + "symbol": "ENVX", + "overall_score": 30, + "momentum_score": 35, + "theme_score": 55, + "risk_score": 70, + "social_buzz_score": 60, + "brief_analysis": "ENVX is in the Battery theme, which is relevant but less hot than AI or Quantum Computing. Momentum is weak with negative YTD and recent performance. Social buzz is moderate from known contributors, but risk remains high due to volatility." + }, + "SES": { + "symbol": "SES", + "overall_score": 25, + "momentum_score": 55, + "theme_score": 30, + "risk_score": 70, + "social_buzz_score": 20, + "brief_analysis": "SES shows positive momentum recently but suffers from very poor YTD performance and lacks a clear thematic play or social buzz. The absence of a strong theme and social backing limits its attractiveness despite short-term momentum." + }, + "GTLB": { + "symbol": "GTLB", + "overall_score": 30, + "momentum_score": 25, + "theme_score": 65, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "GTLB is in the AI Agent theme, which is relevant but the stock shows weak momentum and poor YTD performance. Social buzz from KOL and contributors is moderate. High risk due to volatility weighs on the overall score." + }, + "CRNC": { + "symbol": "CRNC", + "overall_score": 28, + "momentum_score": 40, + "theme_score": 60, + "risk_score": 70, + "social_buzz_score": 65, + "brief_analysis": "CRNC operates in the Robotaxi theme, which is niche but relevant. Momentum is slightly negative but better than many peers. Strong social buzz from Benzinga and Timothy Sykes supports interest, though risk remains elevated." + }, + "CDLX": { + "symbol": "CDLX", + "overall_score": 20, + "momentum_score": 15, + "theme_score": 60, + "risk_score": 80, + "social_buzz_score": 25, + "brief_analysis": "CDLX is in AI Data but suffers from very poor momentum and the worst recent weekly performance. Lack of social buzz and high volatility contribute to a high risk score and low overall attractiveness." + }, + "SNAP": { + "symbol": "SNAP", + "overall_score": 22, + "momentum_score": 10, + "theme_score": 65, + "risk_score": 80, + "social_buzz_score": 60, + "brief_analysis": "SNAP is in AI Distribution with significant social buzz and KOL backing. However, it has the worst YTD performance and recent momentum, leading to high risk and low overall score despite thematic relevance." + }, + "KLAR": { + "symbol": "KLAR", + "overall_score": 38, + "momentum_score": 65, + "theme_score": 50, + "risk_score": 65, + "social_buzz_score": 70, + "brief_analysis": "KLAR is in BNPL, a less trendy theme but shows strong recent momentum and social buzz from notable contributors. Despite poor YTD performance, the positive momentum and social backing improve its overall score with moderate risk." + }, + "U": { + "symbol": "U", + "overall_score": 25, + "momentum_score": 20, + "theme_score": 60, + "risk_score": 75, + "social_buzz_score": 60, + "brief_analysis": "U is in AI adtech with moderate social buzz but very poor YTD and recent momentum. High volatility leads to elevated risk, limiting its investment attractiveness despite thematic relevance." + }, + "SUUN": { + "symbol": "SUUN", + "overall_score": 25, + "momentum_score": 15, + "theme_score": 50, + "risk_score": 75, + "social_buzz_score": 10, + "brief_analysis": "SUUN is in the Aerospace sector, which remains relevant but the stock has shown very weak momentum with a significant YTD decline of -64.43%. Lack of KOL backing and negative recent performance contribute to low social buzz and momentum scores. High volatility and poor recent returns increase the risk score." + } +} \ No newline at end of file diff --git a/write_scores_to_excel.py b/write_scores_to_excel.py new file mode 100644 index 0000000..9031669 --- /dev/null +++ b/write_scores_to_excel.py @@ -0,0 +1,326 @@ +#!/usr/bin/env python3 +""" +Write AI scores into the Excel file and highlight modified cells with yellow background. +""" + +import json +import pandas as pd +from openpyxl import load_workbook +from openpyxl.styles import PatternFill, Font, Alignment, Border, Side +from copy import copy + +EXCEL_SRC = "/home/ubuntu/upload/MemelyAlphaStockRanking(副本)(副本).xlsx" +SCORES_JSON = "/home/ubuntu/memely-alpha-stock-ranking/research_scores.json" +EXCEL_OUT = "/home/ubuntu/memely-alpha-stock-ranking/MemelyAlphaStockRanking_scored.xlsx" + +# Load scores +with open(SCORES_JSON, 'r') as f: + scores = json.load(f) + +print(f"Loaded scores for {len(scores)} stocks") + +# Load workbook +wb = load_workbook(EXCEL_SRC) + +# Yellow fill for modified cells +yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid") +header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid") +header_font = Font(bold=True, color="FFFFFF", size=11) +score_font = Font(size=10) +thin_border = Border( + left=Side(style='thin'), + right=Side(style='thin'), + top=Side(style='thin'), + bottom=Side(style='thin') +) + +# ========== Modify "stock master list" sheet ========== +ws = wb['stock master list'] + +# Find the last column with data +max_col = ws.max_column + +# Add new score columns +new_cols = { + max_col + 1: 'AI Overall Score', + max_col + 2: 'AI Momentum Score', + max_col + 3: 'AI Theme Score', + max_col + 4: 'AI Risk Score', + max_col + 5: 'AI Social Buzz Score', + max_col + 6: 'AI Brief Analysis', +} + +# Write headers +for col_offset, header_name in new_cols.items(): + cell = ws.cell(row=1, column=col_offset, value=header_name) + cell.fill = header_fill + cell.font = header_font + cell.alignment = Alignment(horizontal='center', wrap_text=True) + cell.border = thin_border + +# Write scores for each stock +for row in range(2, ws.max_row + 1): + symbol = ws.cell(row=row, column=1).value + if symbol and symbol in scores: + s = scores[symbol] + + # Overall Score + cell = ws.cell(row=row, column=max_col + 1, value=s.get('overall_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Momentum Score + cell = ws.cell(row=row, column=max_col + 2, value=s.get('momentum_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Theme Score + cell = ws.cell(row=row, column=max_col + 3, value=s.get('theme_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Risk Score + cell = ws.cell(row=row, column=max_col + 4, value=s.get('risk_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Social Buzz Score + cell = ws.cell(row=row, column=max_col + 5, value=s.get('social_buzz_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Brief Analysis + cell = ws.cell(row=row, column=max_col + 6, value=s.get('brief_analysis', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(wrap_text=True) + cell.border = thin_border + +# Set column widths +ws.column_dimensions[ws.cell(row=1, column=max_col + 1).column_letter].width = 15 +ws.column_dimensions[ws.cell(row=1, column=max_col + 2).column_letter].width = 15 +ws.column_dimensions[ws.cell(row=1, column=max_col + 3).column_letter].width = 15 +ws.column_dimensions[ws.cell(row=1, column=max_col + 4).column_letter].width = 15 +ws.column_dimensions[ws.cell(row=1, column=max_col + 5).column_letter].width = 18 +ws.column_dimensions[ws.cell(row=1, column=max_col + 6).column_letter].width = 60 + +print(f"Updated 'stock master list' sheet with scores") + +# ========== Also modify Sheet4 with scores ========== +ws4 = wb['Sheet4'] +max_col4 = ws4.max_column + +new_cols4 = { + max_col4 + 1: 'AI Overall Score', + max_col4 + 2: 'AI Momentum Score', + max_col4 + 3: 'AI Theme Score', + max_col4 + 4: 'AI Risk Score', + max_col4 + 5: 'AI Social Buzz Score', + max_col4 + 6: 'AI Brief Analysis', +} + +# Write headers for Sheet4 +for col_offset, header_name in new_cols4.items(): + cell = ws4.cell(row=1, column=col_offset, value=header_name) + cell.fill = header_fill + cell.font = header_font + cell.alignment = Alignment(horizontal='center', wrap_text=True) + cell.border = thin_border + +# Write scores for Sheet4 +for row in range(2, ws4.max_row + 1): + symbol = ws4.cell(row=row, column=1).value + if symbol and symbol in scores: + s = scores[symbol] + + cell = ws4.cell(row=row, column=max_col4 + 1, value=s.get('overall_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + cell = ws4.cell(row=row, column=max_col4 + 2, value=s.get('momentum_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + cell = ws4.cell(row=row, column=max_col4 + 3, value=s.get('theme_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + cell = ws4.cell(row=row, column=max_col4 + 4, value=s.get('risk_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + cell = ws4.cell(row=row, column=max_col4 + 5, value=s.get('social_buzz_score', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + cell = ws4.cell(row=row, column=max_col4 + 6, value=s.get('brief_analysis', '')) + cell.fill = yellow_fill + cell.font = score_font + cell.alignment = Alignment(wrap_text=True) + cell.border = thin_border + +ws4.column_dimensions[ws4.cell(row=1, column=max_col4 + 1).column_letter].width = 15 +ws4.column_dimensions[ws4.cell(row=1, column=max_col4 + 2).column_letter].width = 15 +ws4.column_dimensions[ws4.cell(row=1, column=max_col4 + 3).column_letter].width = 15 +ws4.column_dimensions[ws4.cell(row=1, column=max_col4 + 4).column_letter].width = 15 +ws4.column_dimensions[ws4.cell(row=1, column=max_col4 + 5).column_letter].width = 18 +ws4.column_dimensions[ws4.cell(row=1, column=max_col4 + 6).column_letter].width = 60 + +print(f"Updated 'Sheet4' with scores") + +# ========== Create a new summary sheet ========== +ws_summary = wb.create_sheet("AI Score Summary", 0) + +# Headers +summary_headers = ['Rank', 'Symbol', 'Theme', 'Sector', 'Overall Score', 'Momentum Score', + 'Theme Score', 'Risk Score', 'Social Buzz Score', 'Perf YTD', 'Brief Analysis'] + +for col, header in enumerate(summary_headers, 1): + cell = ws_summary.cell(row=1, column=col, value=header) + cell.fill = header_fill + cell.font = header_font + cell.alignment = Alignment(horizontal='center', wrap_text=True) + cell.border = thin_border + +# Sort stocks by overall score +sorted_stocks = sorted(scores.items(), key=lambda x: x[1].get('overall_score', 0), reverse=True) + +# Read original data for theme/sector info +df = pd.read_excel(EXCEL_SRC, sheet_name='stock master list') +df4 = pd.read_excel(EXCEL_SRC, sheet_name='Sheet4') + +symbol_info = {} +for _, row in df.iterrows(): + sym = row['Symbol'] + if pd.notna(sym): + symbol_info[sym] = { + 'theme': row.get('Theme', ''), + 'perf_ytd': row.get('performance Year to Date', None) + } + +sector_info = {} +for _, row in df4.iterrows(): + sym = row.get('Symbol') + if pd.notna(sym): + sector_info[sym] = row.get('Sector', '') + +# Color coding for scores +from openpyxl.styles import PatternFill + +def get_score_fill(score): + if score >= 70: + return PatternFill(start_color="92D050", end_color="92D050", fill_type="solid") # Green + elif score >= 50: + return PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid") # Yellow + elif score >= 30: + return PatternFill(start_color="FFC000", end_color="FFC000", fill_type="solid") # Orange + else: + return PatternFill(start_color="FF6B6B", end_color="FF6B6B", fill_type="solid") # Red + +for rank, (symbol, s) in enumerate(sorted_stocks, 1): + row = rank + 1 + info = symbol_info.get(symbol, {}) + + ws_summary.cell(row=row, column=1, value=rank).border = thin_border + ws_summary.cell(row=row, column=1).alignment = Alignment(horizontal='center') + + ws_summary.cell(row=row, column=2, value=symbol).border = thin_border + ws_summary.cell(row=row, column=2).font = Font(bold=True) + + theme = info.get('theme', '') + ws_summary.cell(row=row, column=3, value=theme if pd.notna(theme) else '').border = thin_border + + sector = sector_info.get(symbol, '') + ws_summary.cell(row=row, column=4, value=sector if pd.notna(sector) else '').border = thin_border + + # Overall Score with color + overall = s.get('overall_score', 0) + cell = ws_summary.cell(row=row, column=5, value=overall) + cell.fill = get_score_fill(overall) + cell.font = Font(bold=True, size=11) + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Momentum Score + momentum = s.get('momentum_score', 0) + cell = ws_summary.cell(row=row, column=6, value=momentum) + cell.fill = get_score_fill(momentum) + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Theme Score + theme_sc = s.get('theme_score', 0) + cell = ws_summary.cell(row=row, column=7, value=theme_sc) + cell.fill = get_score_fill(theme_sc) + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Risk Score (higher = more risky, use inverse coloring) + risk = s.get('risk_score', 0) + cell = ws_summary.cell(row=row, column=8, value=risk) + # For risk, high is bad + if risk >= 70: + cell.fill = PatternFill(start_color="FF6B6B", end_color="FF6B6B", fill_type="solid") + elif risk >= 50: + cell.fill = PatternFill(start_color="FFC000", end_color="FFC000", fill_type="solid") + else: + cell.fill = PatternFill(start_color="92D050", end_color="92D050", fill_type="solid") + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Social Buzz Score + buzz = s.get('social_buzz_score', 0) + cell = ws_summary.cell(row=row, column=9, value=buzz) + cell.fill = get_score_fill(buzz) + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # YTD Performance + ytd = info.get('perf_ytd', None) + if pd.notna(ytd): + cell = ws_summary.cell(row=row, column=10, value=ytd) + cell.number_format = '0.00%' + else: + cell = ws_summary.cell(row=row, column=10, value='N/A') + cell.alignment = Alignment(horizontal='center') + cell.border = thin_border + + # Brief Analysis + cell = ws_summary.cell(row=row, column=11, value=s.get('brief_analysis', '')) + cell.alignment = Alignment(wrap_text=True) + cell.border = thin_border + +# Set column widths for summary +col_widths = [6, 10, 20, 25, 14, 16, 14, 12, 18, 12, 60] +for i, w in enumerate(col_widths, 1): + ws_summary.column_dimensions[ws_summary.cell(row=1, column=i).column_letter].width = w + +# Freeze panes +ws_summary.freeze_panes = 'A2' + +print(f"Created 'AI Score Summary' sheet with {len(sorted_stocks)} stocks ranked") + +# Save +wb.save(EXCEL_OUT) +print(f"\nSaved scored Excel to: {EXCEL_OUT}") +print("All modified/new cells are highlighted with yellow background")