Find Entry Candidates - 5 New Positions¶
Created: 2025-10-28 Goal: Find 5 stocks matching trend following entry criteria Time Required: 30-45 minutes
🎯 Entry Criteria Reminder¶
Need 2+ of 3 criteria:
- ✅ Price > 20-day MA AND 50-day MA (uptrend)
- ✅ RSI 50-70 OR ADX > 25 (momentum)
- ✅ Volume > 20-day average (institutional buying)
Optional filters: - Sector strength (stock outperforming sector) - Market environment (SPY > 50-day MA) - Price range: $2-500 (avoid penny stocks and mega-expensive)
🛠️ Screening Tools (Choose One)¶
Option 1: TradingView (FREE - RECOMMENDED)¶
Setup (5 minutes, one-time):
- Go to: https://www.tradingview.com/screener/
- Click "Filters"
- Add these filters:
Price & Volume: - Price: between $2 and $500 - Volume: > 500,000 (liquid stocks) - Average Volume (30d): > 500,000
Technical Indicators: - MA20 Simple: Price > MA20 - MA50 Simple: Price > MA50 - RSI (14): between 50 and 70 - Volume: > SMA Volume 20
- Click "Screener" → Save as "Trend Following"
- Review results (typically 50-200 stocks)
Manual check (for top 10 results): - Check ADX > 25 (if RSI not in range) - Check recent price action (clean uptrend?) - Check sector strength
Option 2: ThinkorSwim (Schwab/TD Ameritrade)¶
Setup:
- Open ThinkorSwim desktop app
- Go to: Tools → Stock Hacker
- Add filters:
Price: $2 to $500
Volume: > 500,000
Price > SMA(20)
Price > SMA(50)
RSI(14) between 50 and 70
Volume > SMA(20, volume)
- Run scan
- Sort by "% Above MA50" (strongest trends first)
- Review top 20 results
Option 3: Finviz (FREE)¶
Quick screening:
- Go to: https://finviz.com/screener.ashx
- Select filters:
Descriptive: - Average Volume: Over 500K
Technical: - Price: Over $2 - 20-Day Simple Moving Average: Price above SMA20 - 50-Day Simple Moving Average: Price above SMA50 - RSI (14): 50 to 70 - Volume: Above Average
- Click "Filters" → Review results
- Export list (free: 20 stocks, elite: all)
Option 4: Python Screener (Automated)¶
cd ~/mem-agent-mcp
# Create screener script
cat > /tmp/screen_entries.py << 'EOF'
#!/usr/bin/env python3
"""
Trend Following Stock Screener
Finds stocks matching entry criteria
"""
import yfinance as yf
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# Universe: S&P 500 + popular growth stocks
# (In production, use full universe or sector-specific lists)
symbols = [
# Tech
'NVDA', 'AMD', 'MSFT', 'AAPL', 'GOOGL', 'META', 'TSLA', 'NFLX',
# Crypto-related
'COIN', 'MARA', 'RIOT', 'CLSK', 'MSTR',
# Healthcare
'LLY', 'JNJ', 'UNH', 'PFE', 'ABBV',
# Finance
'JPM', 'BAC', 'GS', 'MS', 'C',
# Energy
'XOM', 'CVX', 'COP', 'SLB', 'OXY',
# Add more sectors...
]
print("Screening for trend following candidates...")
print("=" * 80)
candidates = []
for symbol in symbols:
try:
ticker = yf.Ticker(symbol)
hist = ticker.history(period="3mo")
if len(hist) < 50:
continue
# Calculate indicators
hist['SMA20'] = hist['Close'].rolling(20).mean()
hist['SMA50'] = hist['Close'].rolling(50).mean()
hist['Volume_SMA20'] = hist['Volume'].rolling(20).mean()
# RSI calculation
delta = hist['Close'].diff()
gain = (delta.where(delta > 0, 0)).rolling(14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(14).mean()
rs = gain / loss
hist['RSI'] = 100 - (100 / (1 + rs))
# Latest values
latest = hist.iloc[-1]
price = latest['Close']
sma20 = latest['SMA20']
sma50 = latest['SMA50']
rsi = latest['RSI']
volume = latest['Volume']
avg_volume = latest['Volume_SMA20']
# Check criteria
criteria_met = 0
reasons = []
# Criterion 1: Price > MA20 and MA50
if price > sma20 and price > sma50:
criteria_met += 1
reasons.append("✅ Uptrend")
# Criterion 2: RSI 50-70
if 50 <= rsi <= 70:
criteria_met += 1
reasons.append(f"✅ RSI {rsi:.1f}")
# Criterion 3: Volume > avg
if volume > avg_volume:
criteria_met += 1
reasons.append("✅ Volume")
# Need 2+ criteria
if criteria_met >= 2:
candidates.append({
'symbol': symbol,
'price': price,
'sma20': sma20,
'sma50': sma50,
'rsi': rsi,
'volume_ratio': volume / avg_volume,
'criteria_met': criteria_met,
'reasons': ', '.join(reasons)
})
except Exception as e:
continue
# Sort by criteria met, then RSI
candidates.sort(key=lambda x: (x['criteria_met'], -abs(60 - x['rsi'])), reverse=True)
print(f"\nFound {len(candidates)} candidates:\n")
print("=" * 80)
for i, c in enumerate(candidates[:10], 1): # Top 10
print(f"{i}. {c['symbol']:6s} @ ${c['price']:7.2f}")
print(f" Criteria: {c['criteria_met']}/3 | {c['reasons']}")
print(f" SMA20: ${c['sma20']:.2f} | SMA50: ${c['sma50']:.2f}")
print(f" RSI: {c['rsi']:.1f} | Vol Ratio: {c['volume_ratio']:.2f}x")
print()
print("=" * 80)
print("\nNext: Manually review charts for these top 10 candidates")
EOF
# Install yfinance if needed
uv add yfinance
# Run screener
uv run python3 /tmp/screen_entries.py
📊 Manual Chart Review (Critical Step!)¶
For each candidate from screener:
1. Visual Chart Check (TradingView)¶
Go to: https://www.tradingview.com/chart/
- Enter symbol (e.g., NVDA)
- Add indicators:
- SMA(20) - blue line
- SMA(50) - red line
- RSI(14) - below chart
-
Volume - bottom pane
-
Look for:
- ✅ Clean uptrend (higher highs, higher lows)
- ✅ Price well above MAs (not just touching)
- ✅ Recent volume surge
- ❌ Avoid: Choppy sideways action
- ❌ Avoid: Just broke resistance (wait for pullback)
- ❌ Avoid: Parabolic move (RSI >80)
2. Entry Timing¶
Wait for pullback if: - RSI > 70 (overbought) - Price >10% above SMA20 (extended) - Recent vertical move (gap up 5%+)
Enter now if: - RSI 55-65 (sweet spot) - Price 2-5% above SMA20 (not extended) - Consolidating after breakout
3. Risk Assessment¶
Before entering, calculate:
Entry: [Current price]
Stop: Entry × 0.95 (-5%)
Target: Entry × 1.15 (+15%)
Position size: (Account × 0.02) / 0.05
Example (NVDA at $450):
Entry: $450
Stop: $427.50 (-5%, risk $22.50/share)
Target: $517.50 (+15%, reward $67.50/share)
R/R: 3:1 ✅
Alpaca Paper ($100k × 0.02 = $2k risk):
Position: $2,000 / 0.05 = $40,000
Shares: $40,000 / $450 = 88 shares
Capped at: $5,000 = 11 shares max
Actual risk: 11 × $22.50 = $247.50
🎯 Example: 5 Candidates (As of Oct 28, 2025)¶
Note: These are examples. Run fresh screen for current candidates!
Candidate 1: NVDA (Nvidia)¶
- Price: $450
- Criteria: 3/3 ✅
- Price > MA20 ($430) ✅
- Price > MA50 ($410) ✅
- RSI: 62 ✅
- Volume: Above avg ✅
- Entry: Wait for pullback to $440-445
- Stop: $418 (-5%)
- Target: $506 (+15%)
Candidate 2: COIN (Coinbase)¶
- Price: $215
- Criteria: 2/3 ✅
- Uptrend ✅
- RSI: 58 ✅
- Volume: Below avg ❌
- Entry: Monitor for volume surge
- Stop: $204 (-5%)
- Target: $247 (+15%)
Candidate 3: AVGO (Broadcom)¶
- Price: $365 (you already own this!)
- Status: Currently +3.1%
- Action: Hold for target ($407)
Candidate 4: LLY (Eli Lilly)¶
- Price: $825
- Criteria: 2/3 ✅
- Uptrend ✅
- RSI: 54 ✅
- Volume: Average ⚠️
- Entry: $820-830 range
- Stop: $783 (-5%)
- Target: $946 (+15%)
Candidate 5: META (Meta Platforms)¶
- Price: $575
- Criteria: 3/3 ✅
- Strong uptrend ✅
- RSI: 65 ✅
- Volume surge ✅
- Entry: Current or pullback to $565
- Stop: $546 (-5%)
- Target: $661 (+15%)
✅ Entry Checklist (Before Placing Order)¶
For each candidate:
- [ ] Passes 2+ entry criteria
- [ ] Chart looks clean (no choppy action)
- [ ] Not overextended (RSI <75)
- [ ] Stop loss calculated (entry × 0.95)
- [ ] Profit target calculated (entry × 1.15)
- [ ] Position size calculated (2% risk rule)
- [ ] Within max position limit ($5k paper, $500 live, $1k Schwab)
- [ ] Maintains 50%+ cash reserve
- [ ] Stop loss will be set IMMEDIATELY after entry
- [ ] Trade documented in log
🚨 Common Screening Mistakes¶
❌ Mistake #1: "This stock moved 20%, I should chase it"¶
Reality: You'll buy at the top of the move. Fix: Wait for pullback to MA20.
❌ Mistake #2: "Only 1 criterion met but it looks good"¶
Reality: "Looks good" is not a criterion. Fix: Strict 2+ criteria or skip.
❌ Mistake #3: "I'll check fundamentals first"¶
Reality: This is a technical strategy, fundamentals don't matter. Fix: Trust the technicals.
❌ Mistake #4: "I found 20 great setups!"¶
Reality: You can't track 20 positions effectively. Fix: Pick top 5, enter 1-2 per week max.
📅 Screening Schedule¶
Daily (10 min): - Check existing positions for target/stop hits - Review watchlist for entry signals
Weekly (30 min): - Run full screener - Update watchlist with new candidates - Remove stale candidates
Monthly: - Review screening process - Adjust criteria if needed (after 30+ trades)
🎯 Your Action Plan¶
Today (45 minutes):
- Choose screening tool (TradingView recommended)
- Run initial screen (get 20-50 candidates)
- Chart review top 10 (visual inspection)
- Select 5 best (cleanest trends)
- Calculate entries/stops/targets for each
- Add to watchlist (for monitoring)
This Week:
- Enter 1-2 positions (don't rush all 5 at once)
- Set stops immediately
- Document entries in trade log
- Monitor daily
Patience: You don't need to enter all 5 today. Wait for best setups.
📝 Watchlist Template¶
Create: ~/Documents/memory/entities/trading/watchlist-2025.md
# Trend Following Watchlist
## Active Candidates
### NVDA - Nvidia
- **Screened**: 2025-10-28
- **Price**: $450
- **Criteria**: 3/3 ✅
- **Entry Target**: $440-445 (waiting for pullback)
- **Stop**: $418
- **Target**: $506
- **Status**: Monitoring
### COIN - Coinbase
- **Screened**: 2025-10-28
- **Price**: $215
- **Criteria**: 2/3 (need volume)
- **Entry Target**: $215-220 (if volume picks up)
- **Stop**: $204
- **Target**: $247
- **Status**: Waiting for volume
[Add 3 more...]
## Rejected
### TSLA - Tesla
- **Screened**: 2025-10-28
- **Price**: $220
- **Reason**: Only 1/3 criteria (below MA50)
- **Status**: Skip
Status: 🎯 Ready to screen Time: 45 minutes for initial screening Goal: Find 5 solid candidates, enter 1-2 this week