ETF/Index Strategy Plan - 2025-11-01¶
Date: November 1, 2025 Category: ETF/Index Trading (Separate from Individual Stocks) Status: Planning Phase
🎯 Objective¶
Create separate ETF/Index strategies distinct from individual stock strategies. ETFs have different characteristics: - Lower volatility than individual stocks - Broader diversification within each position - Different holding periods (often longer) - Lower correlation to individual stock moves
📊 Target ETFs/Indexes¶
Technology/Growth Indexes¶
- QQQ - Invesco QQQ Trust (Nasdaq-100 Index)
- Tracks 100 largest non-financial Nasdaq companies
- Heavy tech/growth exposure
-
High liquidity
-
VGT - Vanguard Information Technology ETF
- Focused on tech sector specifically
- Lower expense ratio than QQQ
-
More concentrated tech exposure
-
VTI - Vanguard Total Stock Market ETF (if VDI was typo)
- Entire U.S. stock market
- Maximum diversification
- Lower volatility than QQQ/VGT
Innovation/Thematic¶
- ARKK - ARK Innovation ETF
- Active management (Cathie Wood)
- Disruptive innovation focus
- Higher volatility (more like individual stocks)
- Note: Already included in "Volatile Stocks" strategy
🔬 Strategy Design Considerations¶
Why ETFs Need Different Strategies¶
Volatility Differences: - Individual stocks (TSLA, GME): Daily moves of 5-15% - ETFs (QQQ, VGT): Daily moves of 1-3% - ARKK exception: Daily moves of 3-8% (hybrid behavior)
Strategy Implications: 1. Mean Reversion Parameters: - Wider Bollinger Bands (2.5-3.0 std vs. 2.0-2.4 for stocks) - Lower RSI thresholds (25/75 vs. 27/63 for stocks) - Longer holding periods (signals less frequent)
- Momentum Parameters:
- Longer lookback periods (30-60 days vs. 10-20 for stocks)
-
Lower momentum thresholds (1-3% vs. 5-10% for stocks)
-
Position Sizing:
- Larger positions OK (ETFs are already diversified)
- $1,500-2,000 per position vs. $673 for individual stocks
📋 Proposed ETF Strategies¶
Strategy 1: ETF Mean Reversion (Conservative)¶
Symbols: QQQ, VGT, VTI Rationale: Low-volatility ETFs for mean reversion
Expected Characteristics: - Trade Frequency: 5-10 trades per year (vs. 18 for volatile stocks) - Win Rate: 65-70% (higher than individual stocks) - Sharpe: 0.8-1.2 (similar to volatile stocks) - Max Drawdown: 10-15% (lower than individual stocks)
Parameter Ranges (for optimization):
{
"base_position_size": [1500, 2000], # Larger positions
"bb_std": [2.5, 3.5], # Wider bands
"max_positions": [2, 3], # Fewer positions
"rsi_overbought": [70, 80], # More extreme
"rsi_oversold": [20, 30], # More extreme
"stop_loss_pct": [0.08, 0.15] # Tighter stops OK
}
Strategy 2: ETF Momentum (Trend Following)¶
Symbols: QQQ, VGT, ARKK Rationale: Ride tech sector trends
Expected Characteristics: - Trade Frequency: 8-15 trades per year - Win Rate: 50-55% (lower, but bigger wins) - Sharpe: 0.5-0.9 - Holding Period: 20-60 days (vs. 5-15 for stocks)
Parameter Ranges (for optimization):
{
"lookback_period": [30, 60], # Longer trends
"momentum_threshold": [0.02, 0.05], # 2-5% moves
"position_size": [1500, 2000],
"stop_loss_pct": [0.10, 0.18],
"take_profit_pct": [0.15, 0.30] # Ride trends longer
}
Strategy 3: ARKK Volatility Play (Hybrid)¶
Symbols: ARKK only Rationale: ARKK has individual-stock-like volatility
Expected Characteristics: - Trade Frequency: 12-20 trades per year - Win Rate: 55-60% - Sharpe: 0.6-1.0 - Behavior: Similar to volatile stocks (TSLA, GME)
Note: ARKK already performs well in "Volatile Stocks" strategy (502% return). This would be a dedicated ARKK-only strategy.
🔄 Optimization Plan¶
Phase 1: Data Collection (With Caching)¶
Before running experiments, implement data caching to avoid rate limits:
-
Pre-fetch all ETF data once:
-
Modify optimization scripts to read from cache:
Time: 1 hour to implement + 30 minutes to fetch data
Phase 2: Run Optimizations (Sequential)¶
Launch experiments sequentially (not parallel) to avoid rate limits:
Experiment 1: QQQ/VGT/VTI Mean Reversion
uv run python3 tools/optimize_strategy.py \
--strategy mean_reversion \
--symbols QQQ,VGT,VTI \
--train-start 2020-01-01 --train-end 2024-03-31 \
--val-start 2024-04-01 --val-end 2025-10-30 \
--population 20 --generations 20 \
--param-ranges etf_mean_reversion \
--output reports/etf_mean_reversion_conservative.json \
--plot reports/pareto_etf_mean_rev.png
Wait 10 minutes, then:
Experiment 2: QQQ/VGT/ARKK Momentum
uv run python3 tools/optimize_strategy.py \
--strategy etf_momentum \
--symbols QQQ,VGT,ARKK \
--train-start 2020-01-01 --train-end 2024-03-31 \
--val-start 2024-04-01 --val-end 2025-10-30 \
--population 20 --generations 20 \
--output reports/etf_momentum.json \
--plot reports/pareto_etf_momentum.png
Wait 10 minutes, then:
Experiment 3: ARKK Solo Volatility
uv run python3 tools/optimize_strategy.py \
--strategy mean_reversion \
--symbols ARKK \
--train-start 2020-01-01 --train-end 2024-03-31 \
--val-start 2024-04-01 --val-end 2025-10-30 \
--population 20 --generations 20 \
--output reports/arkk_volatility.json \
--plot reports/pareto_arkk.png
Total Time: 3-4 hours (with wait times)
📊 Expected Results¶
Conservative Estimate (Based on ETF Characteristics)¶
| Strategy | Symbols | Trades/Year | Sharpe | Return | Win Rate |
|---|---|---|---|---|---|
| ETF Mean Rev | QQQ, VGT, VTI | 5-10 | 0.8-1.2 | 40-80% | 65-70% |
| ETF Momentum | QQQ, VGT, ARKK | 8-15 | 0.5-0.9 | 60-120% | 50-55% |
| ARKK Solo | ARKK | 12-20 | 0.6-1.0 | 80-150% | 55-60% |
Comparison to Individual Stock Strategies¶
| Metric | Individual Stocks | ETFs (Expected) |
|---|---|---|
| Volatility | High (15-30% annual) | Low (10-20% annual) |
| Trade Frequency | 15-36 trades/year | 5-15 trades/year |
| Win Rate | 53-61% | 60-70% (more predictable) |
| Max Drawdown | 20-30% | 10-20% (lower risk) |
| Sharpe Ratio | 0.19-1.08 | 0.5-1.2 (more consistent) |
🎯 Capital Allocation Plan¶
Portfolio Structure (After All Optimizations Complete)¶
Total Capital: $99,000 (Alpaca Paper Account)
Individual Stock Strategies (50% - $49,500)¶
- Volatile Stocks Mean Rev: $24,750 (25%)
- Micro-Cap Momentum: $19,800 (20%)
- Reserve: $4,950 (5%)
ETF/Index Strategies (40% - $39,600)¶
- ETF Mean Reversion: $19,800 (20%) - QQQ, VGT, VTI
- ETF Momentum: $14,850 (15%) - QQQ, VGT, ARKK
- ARKK Solo (optional): $4,950 (5%)
Cash Reserve (10% - $9,900)¶
- For rebalancing and opportunities
🔧 Implementation Requirements¶
1. Modify Optimization Scripts ✅ COMPLETED¶
ETF-specific parameter ranges have been implemented:
File: tools/mean_reversion_optimized.py (line 51)
Added asset_type parameter to constructor:
def __init__(self, symbols, initial_capital=10000.0, api_key=None, api_secret=None, asset_type='stock')
ETF parameter ranges in get_parameter_space() (when asset_type='etf'):
{
"rsi_oversold": (20, 30), # More extreme for low-volatility ETFs
"rsi_overbought": (70, 80), # More extreme for low-volatility ETFs
"bb_std": (2.5, 3.5), # Wider bands for lower volatility
"stop_loss_pct": (0.08, 0.15), # Slightly tighter stops
"base_position_size": (1500, 2000), # Larger positions (ETFs are diversified)
"max_positions": (2, 3), # Fewer positions (less frequent signals)
}
File: tools/optimize_strategy.py (line 76)
Added --asset-type CLI argument:
Verification Results:
Stock: bb_std (1.5, 3.0), position (300, 1000), max_pos (3, 8)
ETF: bb_std (2.5, 3.5), position (1500, 2000), max_pos (2, 3)
2. Create Data Caching System ✅ COMPLETED¶
File: tools/data_cache.py (277 lines)
Features:
- ✅ Fetch and cache stock/ETF bars from Alpaca API
- ✅ Store in parquet format for efficient I/O
- ✅ Rate limiting: 2-second delays between API calls
- ✅ Cache management: list, clear, info commands
- ✅ Lazy loading of API credentials from trading-command-center/.env
Usage:
# Fetch and cache ETF data (2018-2025)
python3 tools/data_cache.py --fetch QQQ VGT VTI ARKK
# List cached files
python3 tools/data_cache.py --list
# Show cache statistics
python3 tools/data_cache.py --info
# Clear cache for specific symbol
python3 tools/data_cache.py --clear QQQ
Cache Location: data/cache/etf_bars/
Cache Status:
Files: 4
Size: 0.43 MB
Symbols: ARKK, QQQ, VGT, VTI
Bars per symbol: 1968 (2018-01-01 to 2025-10-30)
3. Create ETF Channel Configs¶
Directory: trading_agents/config/channel_configs/etf/
Files to create:
- etf_mean_reversion.yaml
- etf_momentum.yaml
- arkk_volatility.yaml
📅 Timeline¶
Week 1 (Nov 1-8)¶
- [x] Document ETF strategy plan (this file)
- [x] Implement data caching system (
tools/data_cache.py) - [x] Pre-fetch QQQ, VGT, VTI, ARKK data (4 files, 0.43 MB, 1968 bars each)
- [x] Modify optimization scripts for ETF parameters (
--asset-type etf) - [ ] Run 3 ETF optimization experiments (sequential)
Week 2 (Nov 9-15)¶
- [ ] Analyze ETF optimization results
- [ ] Create ETF channel configs
- [ ] Deploy best ETF strategy to paper trading
- [ ] Monitor individual stock strategies (week 1 results)
Week 3 (Nov 16-22)¶
- [ ] Deploy second ETF strategy if first validates
- [ ] Continue monitoring all strategies
- [ ] Begin options strategy design
🔍 Key Differences: ETF vs. Individual Stocks¶
| Aspect | Individual Stocks | ETFs |
|---|---|---|
| Volatility | 15-30% annual | 10-20% annual |
| BB Std Dev | 1.6-2.4 | 2.5-3.5 |
| RSI Levels | 27/63 | 20/75 |
| Position Size | $673 | $1,500-2,000 |
| Max Positions | 3-5 | 2-3 |
| Trade Frequency | 15-36/year | 5-15/year |
| Holding Period | 5-15 days | 20-60 days |
| Win Rate | 53-61% | 60-70% |
| Risk Profile | Higher risk/reward | Lower risk/steady |
✅ Success Criteria¶
For Each ETF Strategy¶
Minimum Thresholds: - ✅ Trades >= 5 per year (lower than stocks) - ✅ Win Rate >= 60% (higher than stocks) - ✅ Sharpe >= 0.5 - ✅ Max Drawdown <= 20%
Ideal Targets: - 🎯 Trades >= 10 per year - 🎯 Win Rate >= 65% - 🎯 Sharpe >= 0.8 - 🎯 Max Drawdown <= 15%
🔗 Related Documentation¶
Current Strategies:
- docs/status/OPTIMIZATION_ANALYSIS_2025-11-01.md (Individual stocks)
- reports/mean_reversion_volatile_stocks.json (BEST individual stock strategy)
Architecture:
- trading_agents/orchestrator/portfolio_manager.py
- trading_agents/config/portfolio_config.yaml
Tools:
- tools/genetic_optimizer.py
- tools/optimize_strategy.py
- tools/mean_reversion_optimized.py
To Be Created:
- tools/data_cache.py (ETF data caching)
- tools/etf_momentum.py (ETF momentum strategy)
- trading_agents/config/channel_configs/etf/ (ETF configs)
Prepared by: Claude Code Date: 2025-11-01 Status: Planning Complete - Ready for Implementation Next Step: Implement data caching system before running experiments