Skip to content

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

  1. QQQ - Invesco QQQ Trust (Nasdaq-100 Index)
  2. Tracks 100 largest non-financial Nasdaq companies
  3. Heavy tech/growth exposure
  4. High liquidity

  5. VGT - Vanguard Information Technology ETF

  6. Focused on tech sector specifically
  7. Lower expense ratio than QQQ
  8. More concentrated tech exposure

  9. VTI - Vanguard Total Stock Market ETF (if VDI was typo)

  10. Entire U.S. stock market
  11. Maximum diversification
  12. Lower volatility than QQQ/VGT

Innovation/Thematic

  1. ARKK - ARK Innovation ETF
  2. Active management (Cathie Wood)
  3. Disruptive innovation focus
  4. Higher volatility (more like individual stocks)
  5. 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)

  1. Momentum Parameters:
  2. Longer lookback periods (30-60 days vs. 10-20 for stocks)
  3. Lower momentum thresholds (1-3% vs. 5-10% for stocks)

  4. Position Sizing:

  5. Larger positions OK (ETFs are already diversified)
  6. $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:

  1. Pre-fetch all ETF data once:

    # Create cache directory
    mkdir -p data/cache/etf_bars/
    
    # Fetch QQQ, VGT, VTI, ARKK data
    # Save to data/cache/etf_bars/{symbol}_2018-2025.parquet
    

  2. Modify optimization scripts to read from cache:

    # In mean_reversion_optimized.py and micro_cap_momentum.py
    # Add cache_dir parameter
    # Check cache before calling Alpaca API
    

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)

  1. Volatile Stocks Mean Rev: $24,750 (25%)
  2. Micro-Cap Momentum: $19,800 (20%)
  3. Reserve: $4,950 (5%)

ETF/Index Strategies (40% - $39,600)

  1. ETF Mean Reversion: $19,800 (20%) - QQQ, VGT, VTI
  2. ETF Momentum: $14,850 (15%) - QQQ, VGT, ARKK
  3. 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:

--asset-type {stock,etf}  # Affects parameter ranges (default: stock)

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%


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