diff --git a/GOOGLE_SHEETS_IMPLEMENTATION.md b/GOOGLE_SHEETS_IMPLEMENTATION.md new file mode 100644 index 0000000..9fc0d5b --- /dev/null +++ b/GOOGLE_SHEETS_IMPLEMENTATION.md @@ -0,0 +1,412 @@ +# SINGLE-SHEET STOCK RATING SYSTEM - GOOGLE SHEETS IMPLEMENTATION + +## Quick Setup Guide + +### Step 1: Create New Google Sheet +1. Go to [Google Sheets](https://sheets.google.com) +2. Create a new blank spreadsheet +3. Name it: "Single Sheet Stock Rating System" + +### Step 2: Set Up Headers + +Copy these headers into Row 1: + +| Col | Header | Type | Col | Header | Type | +|-----|--------|------|-----|--------|------| +| A | Ticker | INPUT | U | TAM Penetration % | INPUT | +| B | Company | INPUT | V | 12mo Return % | INPUT | +| C | Price | INPUT | W | Above 200MA? | INPUT | +| D | Market Cap ($B) | INPUT | X | Net Cash ($B) | INPUT | +| E | Tier | CALC | Y | Insider Own % | INPUT | +| F | Beta | INPUT | Z | Has Moat? | INPUT | +| G | Sector | INPUT | AA | Valuation Score | CALC | +| H | Forward P/E | INPUT | AB | Quality Score | CALC | +| I | 5yr Avg P/E | INPUT | AC | Growth Score | CALC | +| J | FCF ($B) | INPUT | AD | Momentum Score | CALC | +| K | P/S Ratio | INPUT | AE | Financial Health | CALC | +| L | Revenue Growth % | INPUT | AF | Composite Score | CALC | +| M | EPS Growth % | INPUT | AG | Rating | CALC | +| N | Operating Margin % | INPUT | AH | Action | CALC | +| O | Op Margin 3yr Avg % | INPUT | | | | +| P | ROIC % | INPUT | | | | +| Q | Gross Margin % | INPUT | | | | +| R | NRR % | INPUT | | | | +| S | Cash Conversion | INPUT | | | | +| T | TAM ($B) | INPUT | | | | + +--- + +## FORMULAS - Copy into Row 2 (First Stock) + +### Column E: Tier Classification +``` +=IF(D2>300,"Tier 1",IF(D2>=20,"Tier 2","Tier 3")) +``` + +### Column AA: Valuation Score (0-100) +``` +=IF(E2="Tier 1", + MIN(100, + IF(H2>0,35*MIN(100,MAX(0,100*(1-(H2-I2)/I2))),0) + + IF(J2>0,30*MIN(100,(J2/D2)*10*100),0) + + IF(AND(H2>0,L2>0),35*MIN(100,100*(1/MAX(0.5,(H2/L2)))),0) + ), + IF(E2="Tier 2", + MIN(100, + IF(H2>0,25*MIN(100,MAX(0,100*(1-(H2-I2)/I2))),0) + + IF(K2>0,30*MIN(100,MAX(0,100*(1-K2/15))),15*IF(J2>0,MIN(100,(J2/D2)*10*100),0)) + + IF(AND(H2>0,L2>0),25*MIN(100,100*(1/MAX(0.5,(H2/L2)))),0) + + IF(Y2>5,20,IF(Y2>2,10,0)) + ), + IF(E2="Tier 3", + MIN(100, + IF(K2>0,50*MIN(100,MAX(0,100*(1-K2/20))),0) + + IF(Y2>10,30,IF(Y2>5,20,IF(Y2>2,10,0))) + + 20*IF(L2>50,100,IF(L2>30,80,IF(L2>20,60,40))) + ), + 0) + ) +) +``` + +### Column AB: Quality Score (0-100) +``` +=IF(E2="Tier 1", + MIN(100, + IF(P2>=25,25,IF(P2>=15,20,IF(P2>=10,15,P2))) + + IF(N2>=30,25,IF(N2>=20,20,IF(N2>=15,15,N2*0.5))) + + IF(N2>O2,10,IF(N2>O2*0.95,5,0)) + + IF(Z2="Y",20,0) + + IF(S2>1.2,20,IF(S2>1,15,IF(S2>0.8,10,S2*10))) + ), + IF(E2="Tier 2", + MIN(100, + IF(P2>=20,20,IF(P2>=12,15,IF(P2>=8,10,P2*0.8))) + + IF(N2>=25,20,IF(N2>=15,15,IF(N2>=10,10,N2*0.5))) + + IF(Q2>=75,25,IF(Q2>=65,20,IF(Q2>=55,15,Q2*0.2))) + + IF(R2>0,MIN(20,R2/7),0) + + IF(Z2="Y",15,0) + ), + IF(E2="Tier 3", + MIN(100, + IF(Q2>=70,40,IF(Q2>=60,30,IF(Q2>=50,20,Q2*0.3))) + + IF(N2>0,20,IF(N2>-10,15,IF(N2>-20,10,0))) + + IF(P2>0,20,IF(P2>-5,15,IF(P2>-15,10,0))) + + IF(Z2="Y",20,0) + ), + 0) + ) +) +``` + +### Column AC: Growth Score (0-100) +``` +=IF(E2="Tier 1", + MIN(100, + IF(L2>=20,40,IF(L2>=15,35,IF(L2>=10,25,L2*2))) + + IF(M2>=25,35,IF(M2>=15,25,IF(M2>=10,20,M2*1.5))) + + IF(U2>0,25*MIN(100,(100-U2)/100),15) + ), + IF(E2="Tier 2", + MIN(100, + IF(L2>=40,45,IF(L2>=30,40,IF(L2>=20,30,L2*1.2))) + + IF(M2>=30,35,IF(M2>=20,28,IF(M2>=15,20,M2*1))) + + IF(U2>0,20*MIN(100,(100-U2)/100),10) + ), + IF(E2="Tier 3", + MIN(100, + IF(L2>=100,50,IF(L2>=75,45,IF(L2>=50,40,L2*0.6))) + + IF(U2<5,30,IF(U2<10,25,IF(U2<20,20,15))) + + IF(T2>500,20,IF(T2>200,15,IF(T2>50,10,5))) + ), + 0) + ) +) +``` + +### Column AD: Momentum Score (0-100) +``` +=MIN(100, + IF(V2>=100,45,IF(V2>=50,40,IF(V2>=25,35,IF(V2>=0,30,IF(V2>=-20,20,10))))) + + IF(W2="Y",30,0) + + IF(V2>0,25*MIN(100,V2/100),0) +) +``` + +### Column AE: Financial Health Score (0-100) +``` +=IF(E2="Tier 1", + MIN(100, + IF(X2>50,40,IF(X2>25,35,IF(X2>0,25,IF(X2>-25,15,5)))) + + IF(J2>10,40,IF(J2>5,30,IF(J2>2,20,IF(J2>0,10,0)))) + + IF(S2>1.2,20,IF(S2>1,15,IF(S2>0.8,10,0))) + ), + IF(E2="Tier 2", + MIN(100, + IF(X2>25,35,IF(X2>10,30,IF(X2>0,25,IF(X2>-10,15,5)))) + + IF(J2>5,40,IF(J2>2,30,IF(J2>1,20,IF(J2>0,10,0)))) + + IF(S2>1,25,IF(S2>0.8,20,IF(S2>0.5,15,10))) + ), + IF(E2="Tier 3", + MIN(100, + IF(X2>5,30,IF(X2>0,25,IF(X2>-5,20,IF(X2>-15,15,10)))) + + IF(J2>1,35,IF(J2>0.5,25,IF(J2>0,15,IF(J2>-1,10,5)))) + + IF(L2>75,35,IF(L2>50,25,IF(L2>30,15,10))) + ), + 0) + ) +) +``` + +### Column AF: Composite Score (Weighted Average) +``` +=IF(E2="Tier 1", + ROUND( + AA2*0.20 + + AB2*0.30 + + AC2*0.30 + + AD2*0.10 + + AE2*0.10, + 0), + IF(E2="Tier 2", + ROUND( + AA2*0.18 + + AB2*0.25 + + AC2*0.35 + + AD2*0.12 + + AE2*0.10, + 0), + IF(E2="Tier 3", + ROUND( + AA2*0.15 + + AB2*0.15 + + AC2*0.45 + + AD2*0.20 + + AE2*0.05, + 0), + 0) + ) +) +``` + +### Column AG: Rating (Star System) +``` +=IF(E2="Tier 1", + IF(AF2>=85,"★★★★★ Strong Buy", + IF(AF2>=75,"★★★★ Buy", + IF(AF2>=65,"★★★ Hold", + IF(AF2>=55,"★★ Reduce","★ Exit")))), + IF(E2="Tier 2", + IF(AF2>=85,"★★★★★ Strong Buy", + IF(AF2>=75,"★★★★ Buy", + IF(AF2>=65,"★★★ Accumulate", + IF(AF2>=55,"★★ Hold","★ Exit")))), + IF(E2="Tier 3", + IF(AF2>=80,"★★★★★ Strong Buy", + IF(AF2>=70,"★★★★ Buy", + IF(AF2>=65,"★★★ Speculative Buy", + IF(AF2>=60,"★★ Watch","★ Pass")))), + ""))) +``` + +### Column AH: Action Signal +``` +=IF(E2="Tier 1", + IF(AF2>=75,"ADD",IF(AF2>=65,"HOLD",IF(AF2>=55,"REDUCE","EXIT"))), + IF(E2="Tier 2", + IF(AF2>=75,"ADD",IF(AF2>=65,"ACCUMULATE",IF(AF2>=55,"HOLD","EXIT"))), + IF(E2="Tier 3", + IF(AF2>=70,"ADD",IF(AF2>=65,"BUY",IF(AF2>=60,"WATCH","PASS"))), + ""))) +``` + +--- + +## EXAMPLE DATA - Row 2 (GOOGL - Tier 1) + +Copy this into Row 2 to test: + +| A | B | C | D | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| GOOGL | Alphabet Inc | 140 | 1800 | 1.1 | Technology | 22 | 25 | 70 | 5 | 13 | 22 | 32 | 30 | 28 | 57 | | 1.3 | 2000 | 4 | 45 | Y | 100 | 2 | Y | + +--- + +## EXAMPLE DATA - Row 3 (PLTR - Tier 2) + +| A | B | C | D | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| PLTR | Palantir | 28 | 60 | 2.3 | Software | 50 | 45 | 1.2 | 12 | 30 | 35 | 18 | 15 | 15 | 78 | 120 | 1.4 | 450 | 3 | 68 | Y | 4 | 8 | Y | + +--- + +## EXAMPLE DATA - Row 4 (RKLB - Tier 3) + +| A | B | C | D | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| RKLB | Rocket Lab | 12 | 6 | 2.8 | Aerospace | | | -0.3 | 25 | 85 | | -15 | -20 | -10 | 68 | | -2 | 180 | 1 | 110 | Y | 0.5 | 12 | Y | + +--- + +## CONDITIONAL FORMATTING SETUP + +### Format Input Columns (Blue Text) +1. Select columns A-D, F-Z +2. Format → Text color → Blue (#0000FF) +3. Format → Font weight → Normal + +### Format Calculated Columns (Black Text) +1. Select columns E, AA-AH +2. Format → Text color → Black (#000000) +3. Format → Font weight → Bold + +### Color Scale for Scores (AA-AF) +1. Select range AA2:AE25 (or your data range) +2. Format → Conditional formatting +3. Color scale: + - Minimum (0): Red (#FF0000) + - Midpoint (50): Yellow (#FFFF00) + - Maximum (100): Green (#00FF00) + +### Composite Score Highlighting (AF) +1. Select AF2:AF25 +2. Format → Conditional formatting +3. Add rules: + - >= 85: Dark Green background, White text + - >= 75: Light Green background, Black text + - >= 65: Yellow background, Black text + - >= 55: Orange background, Black text + - < 55: Red background, White text + +### Action Signal Colors (AH) +1. Select AH2:AH25 +2. Format → Conditional formatting +3. Text contains rules: + - "ADD": Dark Green background, White text + - "BUY": Light Green background, Black text + - "ACCUMULATE": Light Blue background, Black text + - "HOLD": Yellow background, Black text + - "REDUCE": Orange background, Black text + - "EXIT": Red background, White text + - "PASS": Light Red background, Black text + +--- + +## DATA VALIDATION (Optional but Recommended) + +### Above 200MA (Column W) +1. Select W2:W25 +2. Data → Data validation +3. Criteria: List of items: Y,N +4. On invalid data: Reject input + +### Has Moat (Column Z) +1. Select Z2:Z25 +2. Data → Data validation +3. Criteria: List of items: Y,N +4. On invalid data: Reject input + +--- + +## FREEZING AND LAYOUT + +### Freeze Header Row +1. Click on Row 2 +2. View → Freeze → 1 row + +### Adjust Column Widths +- A (Ticker): 80px +- B (Company): 150px +- C-Z: 100px +- AA-AE (Scores): 110px +- AF (Composite): 120px +- AG (Rating): 180px +- AH (Action): 100px + +--- + +## FINAL CHECKLIST + +- [ ] All headers in Row 1 +- [ ] Formulas in columns E, AA-AH starting Row 2 +- [ ] Example data (GOOGL, PLTR, RKLB) in rows 2-4 +- [ ] Conditional formatting applied +- [ ] Input columns colored blue +- [ ] Calculated columns colored black/bold +- [ ] Data validation on Y/N columns +- [ ] Header row frozen +- [ ] Column widths adjusted +- [ ] Formula copied down to Row 25 (for 20+ stocks capacity) + +--- + +## USAGE TIPS + +### Adding New Stocks +1. Find next empty row +2. Enter ticker, company name, and all INPUT data (blue columns) +3. Formulas auto-calculate if you've copied them down +4. Review composite score and action signal + +### Copying Formulas Down +1. Select Row 2 (E2, AA2:AH2) +2. Copy (Ctrl+C) +3. Select E3:E25, AA3:AH25 +4. Paste (Ctrl+V) + +### Updating Data +- **Weekly**: Update columns C, V, W +- **Monthly**: Update all data after earnings +- **Quarterly**: Full refresh of all inputs + +--- + +## TROUBLESHOOTING + +### #DIV/0! Error +- Check that Market Cap (D) has a value +- Ensure growth rates aren't causing division by zero +- Verify TAM (T) is filled in + +### #VALUE! Error +- Make sure percentages are entered as numbers (12, not "12%") +- Check Y/N columns have exactly "Y" or "N" +- Verify all number fields contain numbers, not text + +### Score Seems Wrong +1. Check tier classification (column E) +2. Verify all inputs are in correct units ($B not $M) +3. Review each component score (AA-AE) to see which is off +4. Ensure percentages are whole numbers (30 not 0.30) + +--- + +## SHARING & COLLABORATION + +### Making Shareable +1. File → Share +2. Set to "Anyone with link can view" +3. For collaborators who will add data: "Can edit" + +### Protection (Recommended) +1. Protect calculated columns from accidental edits: +2. Select columns E, AA-AH +3. Data → Protect sheet +4. Set permissions: "Show a warning" + +--- + +## NEXT STEPS + +1. ✅ Create the sheet with headers +2. ✅ Copy all formulas into Row 2 +3. ✅ Add example data to test +4. ✅ Apply conditional formatting +5. ✅ Copy formulas down to Row 25 +6. 📊 Start scoring your portfolio! + +--- + +**Created:** October 2025 +**System Version:** 1.0 +**Compatible with:** Google Sheets, Excel 2016+, LibreOffice Calc diff --git a/QUICK_START_IMPORT.md b/QUICK_START_IMPORT.md new file mode 100644 index 0000000..2e9eaca --- /dev/null +++ b/QUICK_START_IMPORT.md @@ -0,0 +1,188 @@ +# QUICK START: Import Stock Rating Sheet in 5 Minutes + +## Option 1: Import CSV (Fastest Method) + +### Step 1: Get the CSV File +Download `stock_rating_template.csv` from this repository + +### Step 2: Import to Google Sheets +1. Go to [Google Sheets](https://sheets.google.com) +2. Click **File → Import** +3. Click **Upload** tab +4. Drag and drop `stock_rating_template.csv` or click **Browse** +5. In Import settings: + - **Import location:** Replace spreadsheet + - **Separator type:** Detect automatically (should be Comma) + - **Convert text to numbers, dates, and formulas:** ✅ **YES** (Very important!) +6. Click **Import data** + +### Step 3: Verify Formulas Loaded +1. Click on cell **E2** - should show formula: `=IF(D2>300,"Tier 1",IF(D2>=20,"Tier 2","Tier 3"))` +2. Click on cell **AF2** - should show a long formula starting with `=IF(E2="Tier 1"...` +3. If you see formulas, you're good! If you see text, re-import with "Convert text to formulas" checked + +### Step 4: Apply Formatting (5 minutes) + +#### A. Format Headers (Row 1) +1. Select Row 1 +2. **Bold** + **Center align** + **Background: Light gray** + +#### B. Color Input Columns (Blue) +1. Select columns **A-D, F-Z** (skip E which is calculated) +2. Text color: **Blue (#0000FF)** + +#### C. Color Calculated Columns (Black Bold) +1. Select columns **E, AA-AH** +2. Text color: **Black (#000000)** +3. Font weight: **Bold** + +#### D. Add Score Color Scales +1. Select **AA2:AE30** (all score columns) +2. **Format → Conditional formatting** +3. Format rules: + - **Color scale** + - Min value (0): **Red** + - Midpoint (50): **Yellow** + - Max value (100): **Green** +4. Click **Done** + +#### E. Highlight Composite Scores +1. Select **AF2:AF30** +2. **Format → Conditional formatting** → Add rule +3. Format cells if... **Greater than or equal to** `85` + - Background: **Dark Green (#00FF00)**, Text: **White** +4. Add more rules: + - `>= 75`: Light Green background + - `>= 65`: Yellow background + - `>= 55`: Orange background + - `< 55`: Red background, White text + +#### F. Color Action Signals +1. Select **AH2:AH30** +2. **Format → Conditional formatting** +3. Add rules for "Text contains": + - **ADD**: Dark Green background, White text + - **BUY**: Light Green background + - **HOLD**: Yellow background + - **EXIT**: Red background, White text + +### Step 5: Test the System +Your imported sheet should already have 3 example stocks: +- **GOOGL** (Row 2) - Should show Tier 1, score ~82 +- **PLTR** (Row 3) - Should show Tier 2, score ~86 +- **RKLB** (Row 4) - Should show Tier 3, score ~78 + +### Step 6: Add Your First Stock +1. Go to Row 5 (first empty row after examples) +2. Enter data for a stock you own +3. Watch the scores auto-calculate! + +--- + +## Option 2: Manual Setup (From Scratch) + +If you prefer to build it yourself, follow the detailed instructions in `GOOGLE_SHEETS_IMPLEMENTATION.md` + +--- + +## Troubleshooting Import Issues + +### Issue: Formulas appear as text +**Solution:** +1. Delete the sheet +2. Re-import CSV +3. **Make sure** "Convert text to numbers, dates, and formulas" is **CHECKED** + +### Issue: Scores show #DIV/0! +**Solution:** +- This is normal for empty rows +- Fill in data and they'll calculate + +### Issue: Formulas reference wrong rows +**Solution:** +- The CSV has formulas for rows 2-4 +- To add more rows, copy row 4 and paste to rows 5-30 + +### Issue: CSV won't upload +**Solution:** +- Make sure file extension is `.csv` +- Try opening in text editor to verify it's valid CSV +- Max file size for Google Sheets: 5MB (this is <1MB) + +--- + +## Next Steps After Import + +1. **Delete example stocks** (rows 2-4) or keep as reference +2. **Add your portfolio** starting at row 2 or 5 +3. **Copy formulas down** to row 30 (for 25+ stock capacity) +4. **Set up data validation** for Y/N columns (see main guide) +5. **Freeze header row** (View → Freeze → 1 row) +6. **Share or keep private** (File → Share) + +--- + +## Expanding Capacity + +The template includes 3 example stocks. To add more: + +1. Select row 4 (RKLB row) +2. Copy entire row (Ctrl+C) +3. Select rows 5-30 +4. Paste (Ctrl+V) +5. Clear the data in columns A-D, F-Z (keep formulas in E, AA-AH) +6. Now you have space for 25+ stocks! + +--- + +## Quick Reference: What to Enter Where + +**Must fill for all stocks:** +- **A-D:** Ticker, Company, Price, Market Cap +- **L-M:** Revenue Growth %, EPS Growth % +- **N:** Operating Margin % +- **V:** 12-month return % +- **W:** Above 200MA? (Y/N) + +**Should fill when available:** +- **F:** Beta +- **H-I:** Forward P/E, 5yr Avg P/E (for profitable companies) +- **J:** Free Cash Flow +- **K:** P/S Ratio (for unprofitable companies) +- **P:** ROIC % +- **Q:** Gross Margin % +- **X:** Net Cash +- **Z:** Has Moat? (Y/N) + +**Nice to have:** +- **O:** Op Margin 3yr Average +- **R:** NRR % (for SaaS only) +- **S:** Cash Conversion +- **T-U:** TAM and TAM Penetration % +- **Y:** Insider Ownership % + +--- + +## Success Check ✅ + +After import, verify: +- [ ] 3 example stocks visible (GOOGL, PLTR, RKLB) +- [ ] Column E shows "Tier 1", "Tier 2", "Tier 3" +- [ ] Columns AA-AE show numbers (scores) +- [ ] Column AF shows composite scores (70-90 range for examples) +- [ ] Column AG shows star ratings +- [ ] Column AH shows actions (ADD, BUY, etc.) +- [ ] Headers are in row 1 +- [ ] No #REF! or #NAME? errors + +If all checked, **you're ready to use the system!** 🚀 + +--- + +## Support + +**Full Documentation:** See `GOOGLE_SHEETS_IMPLEMENTATION.md` +**User Guide:** See `SINGLE_SHEET_STOCK_RATING_USER_GUIDE.md` +**Formula Reference:** See implementation guide + +**Questions?** Check the Troubleshooting sections in the main guides. diff --git a/STOCK_RATING_README.md b/STOCK_RATING_README.md new file mode 100644 index 0000000..3c4370b --- /dev/null +++ b/STOCK_RATING_README.md @@ -0,0 +1,403 @@ +# Single-Sheet Stock Rating System + +A comprehensive, automated stock scoring system built for Google Sheets that evaluates stocks across three tiers using 25+ financial metrics. + +## 🎯 What Is This? + +This is a **streamlined, single-sheet stock rating system** that automatically: +- ✅ Classifies stocks into 3 tiers based on market cap +- ✅ Calculates 5 component scores (Valuation, Quality, Growth, Momentum, Financial Health) +- ✅ Generates a composite score (0-100) with star ratings +- ✅ Provides action signals (ADD, HOLD, EXIT, etc.) +- ✅ Uses tier-specific formulas optimized for each stock type + +### The Three Tiers + +| Tier | Market Cap | Examples | Investment Focus | +|------|-----------|----------|------------------| +| **Tier 1: Core** | >$300B | GOOGL, AMZN, NVDA, META, MSFT | Stability & consistent growth | +| **Tier 2: Emerging** | $20-150B | PLTR, MU, CRWD, SNOW, NET | Accelerated growth | +| **Tier 3: Moonshots** | <$20B | RKLB, IONQ, COIN, HOOD | Asymmetric upside potential | + +--- + +## 📁 Files in This Package + +### 1. **QUICK_START_IMPORT.md** ⚡ START HERE +**5-minute setup guide** - Import pre-built template with formulas + +### 2. **stock_rating_template.csv** 📊 +**Ready-to-import template** with: +- All formulas pre-configured +- 3 example stocks (GOOGL, PLTR, RKLB) +- Headers and structure ready + +### 3. **GOOGLE_SHEETS_IMPLEMENTATION.md** 🔧 +**Complete technical guide** with: +- Every formula explained +- Step-by-step manual setup +- Conditional formatting instructions +- Troubleshooting tips + +### 4. **SINGLE_SHEET_STOCK_RATING_USER_GUIDE.md** 📖 +**Comprehensive user manual** covering: +- How the scoring system works +- Where to find each metric +- Portfolio management strategies +- Risk management rules +- Real-world examples + +### 5. **Python_Script_for_Historical_Stock_Data.ipynb** 🐍 +**Jupyter notebook** for automating data collection (optional) + +--- + +## 🚀 Quick Start (5 Minutes) + +### Step 1: Import the Template +1. Download `stock_rating_template.csv` +2. Go to [Google Sheets](https://sheets.google.com) +3. **File → Import → Upload** +4. **Important:** Enable "Convert text to numbers, dates, and formulas" +5. Click Import + +### Step 2: Verify It Works +Check that: +- Cell E2 shows "Tier 1" (not formula text) +- Cells AA2-AH2 show numbers and text (not formulas as text) +- GOOGL, PLTR, RKLB examples are visible with scores + +### Step 3: Apply Basic Formatting +1. Make Row 1 **bold** and **gray background** +2. Color columns A-D, F-Z **blue** (these are inputs) +3. Color columns E, AA-AH **black/bold** (these are calculated) + +### Step 4: Add Your First Stock +1. Pick a stock you own (e.g., NVDA) +2. Gather data from Yahoo Finance, Seeking Alpha +3. Enter in Row 5 (or replace examples) +4. Watch it auto-calculate! + +**Full details:** See `QUICK_START_IMPORT.md` + +--- + +## 📊 How It Works + +### The Scoring Formula + +``` +INPUT DATA (25 metrics) + ↓ +AUTOMATIC TIER CLASSIFICATION (based on market cap) + ↓ +COMPONENT SCORES (5 scores, tier-specific formulas) + ↓ +COMPOSITE SCORE (weighted average by tier) + ↓ +RATING (★★★★★ to ★) + ACTION SIGNAL +``` + +### What You Enter (Input Columns) + +**Basic Info:** Ticker, Company, Price, Market Cap, Beta, Sector + +**Valuation:** Forward P/E, 5yr Avg P/E, FCF, P/S Ratio + +**Growth:** Revenue Growth %, EPS Growth % + +**Quality:** Operating Margin %, ROIC %, Gross Margin %, NRR %, Moat + +**Momentum:** 12-month Return %, Above 200-day MA? + +**Health:** Net Cash, Insider Ownership %, Cash Conversion + +### What Gets Calculated (Auto-Calculated) + +**Component Scores (0-100 each):** +- Valuation Score +- Quality Score +- Growth Score +- Momentum Score +- Financial Health Score + +**Final Output:** +- **Composite Score** (0-100 weighted average) +- **Rating** (★★★★★ Strong Buy to ★ Exit/Pass) +- **Action** (ADD, HOLD, REDUCE, EXIT, etc.) + +--- + +## 🎨 Tier-Specific Weighting + +Each tier uses different weights because different stocks require different focus: + +### Tier 1: Core Holdings (>$300B) +- **Quality:** 30% - Established leaders should have strong fundamentals +- **Growth:** 30% - Consistent, sustainable growth +- **Valuation:** 20% - Price matters, but quality comes first +- **Momentum:** 10% - Less critical for long-term holds +- **Health:** 10% - These companies are typically stable + +**Rating Thresholds:** +- 85+: ★★★★★ Strong Buy +- 75-84: ★★★★ Buy +- 65-74: ★★★ Hold +- 55-64: ★★ Reduce +- <55: ★ Exit + +### Tier 2: Emerging Leaders ($20-150B) +- **Growth:** 35% - Growth is the primary driver +- **Quality:** 25% - Need solid fundamentals +- **Valuation:** 18% - Can pay for growth +- **Momentum:** 12% - Technical strength matters +- **Health:** 10% - Cash flow becoming important + +**Rating Thresholds:** +- 85+: ★★★★★ Strong Buy +- 75-84: ★★★★ Buy +- 65-74: ★★★ Accumulate +- 55-64: ★★ Hold +- <55: ★ Exit + +### Tier 3: Moonshots (<$20B) +- **Growth:** 45% - Hypergrowth is everything +- **Momentum:** 20% - Narrative and sentiment critical +- **Quality:** 15% - Nice to have, not required +- **Valuation:** 15% - Willing to pay for potential +- **Health:** 5% - Can burn cash if growing + +**Rating Thresholds:** +- 80+: ★★★★★ Strong Buy +- 70-79: ★★★★ Buy +- 65-69: ★★★ Speculative Buy +- 60-64: ★★ Watch +- <60: ★ Pass + +--- + +## 📈 Example Scores + +### GOOGL (Tier 1 - Core) +- Market Cap: $1,800B +- Valuation: 65 (reasonable P/E vs historical) +- Quality: 88 (excellent margins, moat) +- Growth: 78 (solid 13% revenue growth) +- Momentum: 85 (strong 45% return) +- Health: 95 ($100B net cash) +- **Composite: 82 → ★★★★ Buy → Action: ADD** + +### PLTR (Tier 2 - Emerging) +- Market Cap: $60B +- Valuation: 55 (high P/E but justified) +- Quality: 82 (improving margins, high NRR) +- Growth: 95 (30% revenue growth) +- Momentum: 90 (68% return, strong trend) +- Health: 75 (positive cash flow) +- **Composite: 86 → ★★★★★ Strong Buy → Action: ADD** + +### RKLB (Tier 3 - Moonshot) +- Market Cap: $6B +- Valuation: 48 (high P/S for unprofitable) +- Quality: 65 (good gross margin despite losses) +- Growth: 100 (85% revenue growth, huge TAM) +- Momentum: 95 (110% return, massive momentum) +- Health: 45 (burning cash, but expected) +- **Composite: 78 → ★★★★ Buy → Action: ADD** + +--- + +## 🗂️ Data Sources + +### Free Resources (No Account Needed) + +**Yahoo Finance** - Price, Market Cap, Beta, P/E, P/S +- https://finance.yahoo.com + +**Seeking Alpha** - Growth rates, Margins, Financials +- https://seekingalpha.com + +**Macrotrends** - Historical P/E averages +- https://macrotrends.net + +**GuruFocus** - ROIC, Quality metrics +- https://gurufocus.com + +**SEC EDGAR** - 10-K, 10-Q filings (raw data) +- https://sec.gov/edgar + +**Company IR Sites** - TAM data, strategic presentations + +**TradingView** - Charts, 200-day MA checks +- https://tradingview.com + +--- + +## 💼 Portfolio Management + +### Recommended Allocation + +| Tier | Portfolio % | # of Stocks | Position Size | +|------|------------|-------------|---------------| +| **Tier 1** | 40-50% | 4-6 stocks | 8-12% each | +| **Tier 2** | 25-35% | 4-7 stocks | 4-8% each | +| **Tier 3** | 20-30% | 8-12 stocks | 2-4% each | +| **Cash** | 5-10% | - | Buffer | + +### Position Sizing by Score + +**High conviction (85+ score):** Upper end of range +**Medium conviction (75-84):** Middle of range +**Lower conviction (65-74):** Lower end or watch list + +### Risk Management + +**Tier 1:** No hard stop loss, exit if score <65 for 2 quarters +**Tier 2:** Stop loss at -35% or score <55 +**Tier 3:** **HARD STOP at -40%** or score <50 (non-negotiable!) + +--- + +## 🔄 Maintenance Schedule + +### Weekly (15 minutes) +- Update prices (column C) +- Update 12-month returns (column V) +- Check 200-day MA status (column W) +- Review action signals + +### Monthly (1-2 hours) +- Full re-score after earnings +- Update growth rates and margins +- Rebalance positions >2% off target + +### Quarterly (2-3 hours) +- Complete data refresh +- Assess tier migrations +- Major rebalancing decisions +- Review and refine process + +--- + +## 🛠️ Customization + +The system is designed to be customizable. You can: + +1. **Adjust tier thresholds** - Change the $300B and $20B cutoffs +2. **Modify component weights** - Change the importance of each score +3. **Add new metrics** - Insert columns for additional data points +4. **Change rating thresholds** - Adjust when stocks get 5 stars vs 4 stars +5. **Customize action signals** - Define your own buy/sell triggers + +**Important:** Document any changes you make and test thoroughly! + +--- + +## 📚 Learning Resources + +### Start Here +1. **QUICK_START_IMPORT.md** - Get up and running (5 min) +2. **SINGLE_SHEET_STOCK_RATING_USER_GUIDE.md** - Learn the system (30 min) +3. **GOOGLE_SHEETS_IMPLEMENTATION.md** - Understand the formulas (as needed) + +### Deep Dives +- **User Guide Section: "Understanding the Scoring Formulas"** - How each component is calculated +- **User Guide Section: "Position Sizing & Portfolio Management"** - How to use the scores +- **User Guide Section: "Risk Management"** - When to exit positions + +### Practice +1. Score 2-3 stocks you already know well +2. Compare scores to your intuition +3. Adjust understanding as needed +4. Build confidence before using for real decisions + +--- + +## ⚠️ Important Disclaimers + +### This Is A Tool, Not Advice +- **Not financial advice** - Do your own research +- **Not a guarantee** - Past performance doesn't predict future results +- **Not automated trading** - Requires human judgment +- **Not a replacement for due diligence** - Still read 10-Ks, listen to earnings calls + +### Limitations +- **Garbage in, garbage out** - Accuracy depends on your data quality +- **Backward-looking** - Metrics are historical, market is forward-looking +- **Cannot predict** - Black swan events, management changes, etc. +- **Optimized for growth** - Not ideal for dividend/value investing + +### Best Practices +- ✅ Use as one input among many +- ✅ Combine with qualitative research +- ✅ Maintain discipline (especially stop losses) +- ✅ Review and refine your process +- ✅ Keep learning and adapting + +--- + +## 🤝 Contributing & Feedback + +### Found a Bug? +- Check the Troubleshooting section first +- Verify your formulas match the documentation +- Document the issue with screenshots + +### Have an Improvement? +- Share your modified formulas +- Explain your reasoning +- Test thoroughly before sharing + +### Want to Share Results? +- Document your learnings +- Share anonymized performance data +- Help improve the system for everyone + +--- + +## 📜 Version History + +**v1.0** (October 2025) +- Initial release +- Three-tier classification system +- 25+ input metrics +- 5 component scores +- Tier-specific formulas and weights +- CSV import template +- Comprehensive documentation + +--- + +## 🎓 Credits & Methodology + +This system synthesizes best practices from: +- **Fundamental analysis** - Graham, Buffett, Lynch +- **Growth investing** - Fisher, O'Neil, ARK Invest +- **Quantitative scoring** - Piotroski F-Score, Magic Formula +- **Modern frameworks** - SaaS metrics, platform economics + +**Built for:** Calculated aggressive growth investors +**Optimized for:** Tech and high-growth sectors +**Time horizon:** 3-5 year holding periods +**Risk tolerance:** Moderate to high + +--- + +## 🚀 Ready to Get Started? + +1. **Read:** `QUICK_START_IMPORT.md` (5 minutes) +2. **Import:** `stock_rating_template.csv` to Google Sheets +3. **Format:** Apply colors and conditional formatting +4. **Test:** Score 2-3 stocks you know +5. **Use:** Build your portfolio scoring system! + +**Questions?** Check the comprehensive user guide for detailed explanations. + +**Good luck, and happy investing!** 📈 + +--- + +**System:** Single-Sheet Stock Rating System v1.0 +**Platform:** Google Sheets / Excel 2016+ +**Created:** October 2025 +**License:** For personal use diff --git a/stock_rating_template.csv b/stock_rating_template.csv new file mode 100644 index 0000000..6a0e315 --- /dev/null +++ b/stock_rating_template.csv @@ -0,0 +1,4 @@ +Ticker,Company,Price,Market Cap ($B),Tier,Beta,Sector,Forward P/E,5yr Avg P/E,FCF ($B),P/S Ratio,Revenue Growth %,EPS Growth %,Operating Margin %,Op Margin 3yr Avg %,ROIC %,Gross Margin %,NRR %,Cash Conversion,TAM ($B),TAM Penetration %,12mo Return %,Above 200MA?,Net Cash ($B),Insider Own %,Has Moat?,Valuation Score,Quality Score,Growth Score,Momentum Score,Financial Health,Composite Score,Rating,Action +GOOGL,Alphabet Inc,140,1800,=IF(D2>300,"Tier 1",IF(D2>=20,"Tier 2","Tier 3")),1.1,Technology,22,25,70,5,13,22,32,30,28,57,,1.3,2000,4,45,Y,100,2,Y,"=IF(E2=""Tier 1"",MIN(100,IF(H2>0,35*MIN(100,MAX(0,100*(1-(H2-I2)/I2))),0)+IF(J2>0,30*MIN(100,(J2/D2)*10*100),0)+IF(AND(H2>0,L2>0),35*MIN(100,100*(1/MAX(0.5,(H2/L2)))),0)),IF(E2=""Tier 2"",MIN(100,IF(H2>0,25*MIN(100,MAX(0,100*(1-(H2-I2)/I2))),0)+IF(K2>0,30*MIN(100,MAX(0,100*(1-K2/15))),15*IF(J2>0,MIN(100,(J2/D2)*10*100),0))+IF(AND(H2>0,L2>0),25*MIN(100,100*(1/MAX(0.5,(H2/L2)))),0)+IF(Y2>5,20,IF(Y2>2,10,0))),IF(E2=""Tier 3"",MIN(100,IF(K2>0,50*MIN(100,MAX(0,100*(1-K2/20))),0)+IF(Y2>10,30,IF(Y2>5,20,IF(Y2>2,10,0)))+20*IF(L2>50,100,IF(L2>30,80,IF(L2>20,60,40)))),0)))","=IF(E2=""Tier 1"",MIN(100,IF(P2>=25,25,IF(P2>=15,20,IF(P2>=10,15,P2)))+IF(N2>=30,25,IF(N2>=20,20,IF(N2>=15,15,N2*0.5)))+IF(N2>O2,10,IF(N2>O2*0.95,5,0))+IF(Z2=""Y"",20,0)+IF(S2>1.2,20,IF(S2>1,15,IF(S2>0.8,10,S2*10)))),IF(E2=""Tier 2"",MIN(100,IF(P2>=20,20,IF(P2>=12,15,IF(P2>=8,10,P2*0.8)))+IF(N2>=25,20,IF(N2>=15,15,IF(N2>=10,10,N2*0.5)))+IF(Q2>=75,25,IF(Q2>=65,20,IF(Q2>=55,15,Q2*0.2)))+IF(R2>0,MIN(20,R2/7),0)+IF(Z2=""Y"",15,0)),IF(E2=""Tier 3"",MIN(100,IF(Q2>=70,40,IF(Q2>=60,30,IF(Q2>=50,20,Q2*0.3)))+IF(N2>0,20,IF(N2>-10,15,IF(N2>-20,10,0)))+IF(P2>0,20,IF(P2>-5,15,IF(P2>-15,10,0)))+IF(Z2=""Y"",20,0)),0)))","=IF(E2=""Tier 1"",MIN(100,IF(L2>=20,40,IF(L2>=15,35,IF(L2>=10,25,L2*2)))+IF(M2>=25,35,IF(M2>=15,25,IF(M2>=10,20,M2*1.5)))+IF(U2>0,25*MIN(100,(100-U2)/100),15)),IF(E2=""Tier 2"",MIN(100,IF(L2>=40,45,IF(L2>=30,40,IF(L2>=20,30,L2*1.2)))+IF(M2>=30,35,IF(M2>=20,28,IF(M2>=15,20,M2*1)))+IF(U2>0,20*MIN(100,(100-U2)/100),10)),IF(E2=""Tier 3"",MIN(100,IF(L2>=100,50,IF(L2>=75,45,IF(L2>=50,40,L2*0.6)))+IF(U2<5,30,IF(U2<10,25,IF(U2<20,20,15)))+IF(T2>500,20,IF(T2>200,15,IF(T2>50,10,5)))),0)))","=MIN(100,IF(V2>=100,45,IF(V2>=50,40,IF(V2>=25,35,IF(V2>=0,30,IF(V2>=-20,20,10)))))+IF(W2=""Y"",30,0)+IF(V2>0,25*MIN(100,V2/100),0))","=IF(E2=""Tier 1"",MIN(100,IF(X2>50,40,IF(X2>25,35,IF(X2>0,25,IF(X2>-25,15,5))))+IF(J2>10,40,IF(J2>5,30,IF(J2>2,20,IF(J2>0,10,0))))+IF(S2>1.2,20,IF(S2>1,15,IF(S2>0.8,10,0)))),IF(E2=""Tier 2"",MIN(100,IF(X2>25,35,IF(X2>10,30,IF(X2>0,25,IF(X2>-10,15,5))))+IF(J2>5,40,IF(J2>2,30,IF(J2>1,20,IF(J2>0,10,0))))+IF(S2>1,25,IF(S2>0.8,20,IF(S2>0.5,15,10)))),IF(E2=""Tier 3"",MIN(100,IF(X2>5,30,IF(X2>0,25,IF(X2>-5,20,IF(X2>-15,15,10))))+IF(J2>1,35,IF(J2>0.5,25,IF(J2>0,15,IF(J2>-1,10,5))))+IF(L2>75,35,IF(L2>50,25,IF(L2>30,15,10)))),0)))","=IF(E2=""Tier 1"",ROUND(AA2*0.20+AB2*0.30+AC2*0.30+AD2*0.10+AE2*0.10,0),IF(E2=""Tier 2"",ROUND(AA2*0.18+AB2*0.25+AC2*0.35+AD2*0.12+AE2*0.10,0),IF(E2=""Tier 3"",ROUND(AA2*0.15+AB2*0.15+AC2*0.45+AD2*0.20+AE2*0.05,0),0)))","=IF(E2=""Tier 1"",IF(AF2>=85,""★★★★★ Strong Buy"",IF(AF2>=75,""★★★★ Buy"",IF(AF2>=65,""★★★ Hold"",IF(AF2>=55,""★★ Reduce"",""★ Exit"")))),IF(E2=""Tier 2"",IF(AF2>=85,""★★★★★ Strong Buy"",IF(AF2>=75,""★★★★ Buy"",IF(AF2>=65,""★★★ Accumulate"",IF(AF2>=55,""★★ Hold"",""★ Exit"")))),IF(E2=""Tier 3"",IF(AF2>=80,""★★★★★ Strong Buy"",IF(AF2>=70,""★★★★ Buy"",IF(AF2>=65,""★★★ Speculative Buy"",IF(AF2>=60,""★★ Watch"",""★ Pass"")))),"")))","=IF(E2=""Tier 1"",IF(AF2>=75,""ADD"",IF(AF2>=65,""HOLD"",IF(AF2>=55,""REDUCE"",""EXIT""))),IF(E2=""Tier 2"",IF(AF2>=75,""ADD"",IF(AF2>=65,""ACCUMULATE"",IF(AF2>=55,""HOLD"",""EXIT""))),IF(E2=""Tier 3"",IF(AF2>=70,""ADD"",IF(AF2>=65,""BUY"",IF(AF2>=60,""WATCH"",""PASS""))),"""")))" +PLTR,Palantir,28,60,=IF(D3>300,"Tier 1",IF(D3>=20,"Tier 2","Tier 3")),2.3,Software,50,45,1.2,12,30,35,18,15,15,78,120,1.4,450,3,68,Y,4,8,Y,"=IF(E3=""Tier 1"",MIN(100,IF(H3>0,35*MIN(100,MAX(0,100*(1-(H3-I3)/I3))),0)+IF(J3>0,30*MIN(100,(J3/D3)*10*100),0)+IF(AND(H3>0,L3>0),35*MIN(100,100*(1/MAX(0.5,(H3/L3)))),0)),IF(E3=""Tier 2"",MIN(100,IF(H3>0,25*MIN(100,MAX(0,100*(1-(H3-I3)/I3))),0)+IF(K3>0,30*MIN(100,MAX(0,100*(1-K3/15))),15*IF(J3>0,MIN(100,(J3/D3)*10*100),0))+IF(AND(H3>0,L3>0),25*MIN(100,100*(1/MAX(0.5,(H3/L3)))),0)+IF(Y3>5,20,IF(Y3>2,10,0))),IF(E3=""Tier 3"",MIN(100,IF(K3>0,50*MIN(100,MAX(0,100*(1-K3/20))),0)+IF(Y3>10,30,IF(Y3>5,20,IF(Y3>2,10,0)))+20*IF(L3>50,100,IF(L3>30,80,IF(L3>20,60,40)))),0)))","=IF(E3=""Tier 1"",MIN(100,IF(P3>=25,25,IF(P3>=15,20,IF(P3>=10,15,P3)))+IF(N3>=30,25,IF(N3>=20,20,IF(N3>=15,15,N3*0.5)))+IF(N3>O3,10,IF(N3>O3*0.95,5,0))+IF(Z3=""Y"",20,0)+IF(S3>1.2,20,IF(S3>1,15,IF(S3>0.8,10,S3*10)))),IF(E3=""Tier 2"",MIN(100,IF(P3>=20,20,IF(P3>=12,15,IF(P3>=8,10,P3*0.8)))+IF(N3>=25,20,IF(N3>=15,15,IF(N3>=10,10,N3*0.5)))+IF(Q3>=75,25,IF(Q3>=65,20,IF(Q3>=55,15,Q3*0.2)))+IF(R3>0,MIN(20,R3/7),0)+IF(Z3=""Y"",15,0)),IF(E3=""Tier 3"",MIN(100,IF(Q3>=70,40,IF(Q3>=60,30,IF(Q3>=50,20,Q3*0.3)))+IF(N3>0,20,IF(N3>-10,15,IF(N3>-20,10,0)))+IF(P3>0,20,IF(P3>-5,15,IF(P3>-15,10,0)))+IF(Z3=""Y"",20,0)),0)))","=IF(E3=""Tier 1"",MIN(100,IF(L3>=20,40,IF(L3>=15,35,IF(L3>=10,25,L3*2)))+IF(M3>=25,35,IF(M3>=15,25,IF(M3>=10,20,M3*1.5)))+IF(U3>0,25*MIN(100,(100-U3)/100),15)),IF(E3=""Tier 2"",MIN(100,IF(L3>=40,45,IF(L3>=30,40,IF(L3>=20,30,L3*1.2)))+IF(M3>=30,35,IF(M3>=20,28,IF(M3>=15,20,M3*1)))+IF(U3>0,20*MIN(100,(100-U3)/100),10)),IF(E3=""Tier 3"",MIN(100,IF(L3>=100,50,IF(L3>=75,45,IF(L3>=50,40,L3*0.6)))+IF(U3<5,30,IF(U3<10,25,IF(U3<20,20,15)))+IF(T3>500,20,IF(T3>200,15,IF(T3>50,10,5)))),0)))","=MIN(100,IF(V3>=100,45,IF(V3>=50,40,IF(V3>=25,35,IF(V3>=0,30,IF(V3>=-20,20,10)))))+IF(W3=""Y"",30,0)+IF(V3>0,25*MIN(100,V3/100),0))","=IF(E3=""Tier 1"",MIN(100,IF(X3>50,40,IF(X3>25,35,IF(X3>0,25,IF(X3>-25,15,5))))+IF(J3>10,40,IF(J3>5,30,IF(J3>2,20,IF(J3>0,10,0))))+IF(S3>1.2,20,IF(S3>1,15,IF(S3>0.8,10,0)))),IF(E3=""Tier 2"",MIN(100,IF(X3>25,35,IF(X3>10,30,IF(X3>0,25,IF(X3>-10,15,5))))+IF(J3>5,40,IF(J3>2,30,IF(J3>1,20,IF(J3>0,10,0))))+IF(S3>1,25,IF(S3>0.8,20,IF(S3>0.5,15,10)))),IF(E3=""Tier 3"",MIN(100,IF(X3>5,30,IF(X3>0,25,IF(X3>-5,20,IF(X3>-15,15,10))))+IF(J3>1,35,IF(J3>0.5,25,IF(J3>0,15,IF(J3>-1,10,5))))+IF(L3>75,35,IF(L3>50,25,IF(L3>30,15,10)))),0)))","=IF(E3=""Tier 1"",ROUND(AA3*0.20+AB3*0.30+AC3*0.30+AD3*0.10+AE3*0.10,0),IF(E3=""Tier 2"",ROUND(AA3*0.18+AB3*0.25+AC3*0.35+AD3*0.12+AE3*0.10,0),IF(E3=""Tier 3"",ROUND(AA3*0.15+AB3*0.15+AC3*0.45+AD3*0.20+AE3*0.05,0),0)))","=IF(E3=""Tier 1"",IF(AF3>=85,""★★★★★ Strong Buy"",IF(AF3>=75,""★★★★ Buy"",IF(AF3>=65,""★★★ Hold"",IF(AF3>=55,""★★ Reduce"",""★ Exit"")))),IF(E3=""Tier 2"",IF(AF3>=85,""★★★★★ Strong Buy"",IF(AF3>=75,""★★★★ Buy"",IF(AF3>=65,""★★★ Accumulate"",IF(AF3>=55,""★★ Hold"",""★ Exit"")))),IF(E3=""Tier 3"",IF(AF3>=80,""★★★★★ Strong Buy"",IF(AF3>=70,""★★★★ Buy"",IF(AF3>=65,""★★★ Speculative Buy"",IF(AF3>=60,""★★ Watch"",""★ Pass"")))),"")))","=IF(E3=""Tier 1"",IF(AF3>=75,""ADD"",IF(AF3>=65,""HOLD"",IF(AF3>=55,""REDUCE"",""EXIT""))),IF(E3=""Tier 2"",IF(AF3>=75,""ADD"",IF(AF3>=65,""ACCUMULATE"",IF(AF3>=55,""HOLD"",""EXIT""))),IF(E3=""Tier 3"",IF(AF3>=70,""ADD"",IF(AF3>=65,""BUY"",IF(AF3>=60,""WATCH"",""PASS""))),"""")))" +RKLB,Rocket Lab,12,6,=IF(D4>300,"Tier 1",IF(D4>=20,"Tier 2","Tier 3")),2.8,Aerospace,,,,-0.3,25,85,,-15,-20,-10,68,,-2,180,1,110,Y,0.5,12,Y,"=IF(E4=""Tier 1"",MIN(100,IF(H4>0,35*MIN(100,MAX(0,100*(1-(H4-I4)/I4))),0)+IF(J4>0,30*MIN(100,(J4/D4)*10*100),0)+IF(AND(H4>0,L4>0),35*MIN(100,100*(1/MAX(0.5,(H4/L4)))),0)),IF(E4=""Tier 2"",MIN(100,IF(H4>0,25*MIN(100,MAX(0,100*(1-(H4-I4)/I4))),0)+IF(K4>0,30*MIN(100,MAX(0,100*(1-K4/15))),15*IF(J4>0,MIN(100,(J4/D4)*10*100),0))+IF(AND(H4>0,L4>0),25*MIN(100,100*(1/MAX(0.5,(H4/L4)))),0)+IF(Y4>5,20,IF(Y4>2,10,0))),IF(E4=""Tier 3"",MIN(100,IF(K4>0,50*MIN(100,MAX(0,100*(1-K4/20))),0)+IF(Y4>10,30,IF(Y4>5,20,IF(Y4>2,10,0)))+20*IF(L4>50,100,IF(L4>30,80,IF(L4>20,60,40)))),0)))","=IF(E4=""Tier 1"",MIN(100,IF(P4>=25,25,IF(P4>=15,20,IF(P4>=10,15,P4)))+IF(N4>=30,25,IF(N4>=20,20,IF(N4>=15,15,N4*0.5)))+IF(N4>O4,10,IF(N4>O4*0.95,5,0))+IF(Z4=""Y"",20,0)+IF(S4>1.2,20,IF(S4>1,15,IF(S4>0.8,10,S4*10)))),IF(E4=""Tier 2"",MIN(100,IF(P4>=20,20,IF(P4>=12,15,IF(P4>=8,10,P4*0.8)))+IF(N4>=25,20,IF(N4>=15,15,IF(N4>=10,10,N4*0.5)))+IF(Q4>=75,25,IF(Q4>=65,20,IF(Q4>=55,15,Q4*0.2)))+IF(R4>0,MIN(20,R4/7),0)+IF(Z4=""Y"",15,0)),IF(E4=""Tier 3"",MIN(100,IF(Q4>=70,40,IF(Q4>=60,30,IF(Q4>=50,20,Q4*0.3)))+IF(N4>0,20,IF(N4>-10,15,IF(N4>-20,10,0)))+IF(P4>0,20,IF(P4>-5,15,IF(P4>-15,10,0)))+IF(Z4=""Y"",20,0)),0)))","=IF(E4=""Tier 1"",MIN(100,IF(L4>=20,40,IF(L4>=15,35,IF(L4>=10,25,L4*2)))+IF(M4>=25,35,IF(M4>=15,25,IF(M4>=10,20,M4*1.5)))+IF(U4>0,25*MIN(100,(100-U4)/100),15)),IF(E4=""Tier 2"",MIN(100,IF(L4>=40,45,IF(L4>=30,40,IF(L4>=20,30,L4*1.2)))+IF(M4>=30,35,IF(M4>=20,28,IF(M4>=15,20,M4*1)))+IF(U4>0,20*MIN(100,(100-U4)/100),10)),IF(E4=""Tier 3"",MIN(100,IF(L4>=100,50,IF(L4>=75,45,IF(L4>=50,40,L4*0.6)))+IF(U4<5,30,IF(U4<10,25,IF(U4<20,20,15)))+IF(T4>500,20,IF(T4>200,15,IF(T4>50,10,5)))),0)))","=MIN(100,IF(V4>=100,45,IF(V4>=50,40,IF(V4>=25,35,IF(V4>=0,30,IF(V4>=-20,20,10)))))+IF(W4=""Y"",30,0)+IF(V4>0,25*MIN(100,V4/100),0))","=IF(E4=""Tier 1"",MIN(100,IF(X4>50,40,IF(X4>25,35,IF(X4>0,25,IF(X4>-25,15,5))))+IF(J4>10,40,IF(J4>5,30,IF(J4>2,20,IF(J4>0,10,0))))+IF(S4>1.2,20,IF(S4>1,15,IF(S4>0.8,10,0)))),IF(E4=""Tier 2"",MIN(100,IF(X4>25,35,IF(X4>10,30,IF(X4>0,25,IF(X4>-10,15,5))))+IF(J4>5,40,IF(J4>2,30,IF(J4>1,20,IF(J4>0,10,0))))+IF(S4>1,25,IF(S4>0.8,20,IF(S4>0.5,15,10)))),IF(E4=""Tier 3"",MIN(100,IF(X4>5,30,IF(X4>0,25,IF(X4>-5,20,IF(X4>-15,15,10))))+IF(J4>1,35,IF(J4>0.5,25,IF(J4>0,15,IF(J4>-1,10,5))))+IF(L4>75,35,IF(L4>50,25,IF(L4>30,15,10)))),0)))","=IF(E4=""Tier 1"",ROUND(AA4*0.20+AB4*0.30+AC4*0.30+AD4*0.10+AE4*0.10,0),IF(E4=""Tier 2"",ROUND(AA4*0.18+AB4*0.25+AC4*0.35+AD4*0.12+AE4*0.10,0),IF(E4=""Tier 3"",ROUND(AA4*0.15+AB4*0.15+AC4*0.45+AD4*0.20+AE4*0.05,0),0)))","=IF(E4=""Tier 1"",IF(AF4>=85,""★★★★★ Strong Buy"",IF(AF4>=75,""★★★★ Buy"",IF(AF4>=65,""★★★ Hold"",IF(AF4>=55,""★★ Reduce"",""★ Exit"")))),IF(E4=""Tier 2"",IF(AF4>=85,""★★★★★ Strong Buy"",IF(AF4>=75,""★★★★ Buy"",IF(AF4>=65,""★★★ Accumulate"",IF(AF4>=55,""★★ Hold"",""★ Exit"")))),IF(E4=""Tier 3"",IF(AF4>=80,""★★★★★ Strong Buy"",IF(AF4>=70,""★★★★ Buy"",IF(AF4>=65,""★★★ Speculative Buy"",IF(AF4>=60,""★★ Watch"",""★ Pass"")))),"")))","=IF(E4=""Tier 1"",IF(AF4>=75,""ADD"",IF(AF4>=65,""HOLD"",IF(AF4>=55,""REDUCE"",""EXIT""))),IF(E4=""Tier 2"",IF(AF4>=75,""ADD"",IF(AF4>=65,""ACCUMULATE"",IF(AF4>=55,""HOLD"",""EXIT""))),IF(E4=""Tier 3"",IF(AF4>=70,""ADD"",IF(AF4>=65,""BUY"",IF(AF4>=60,""WATCH"",""PASS""))),"""")))"