Root cause: both Claude & GPT-4o stuck in defensive assets (GLD/TLT/SLV)
while SPY rose +1.1%, losing ~ alpha. Models made emotion-driven
trades based on news headlines with no quantitative signal.
Changes:
- compute_technicals(): RSI-14, 20d momentum, 50MA signal per ticker
- Prompt now includes technical signal table + alpha feedback vs SPY
- Anti-defensiveness warning when defensive allocation >40%
- Anti-churn: max 2 trades/day (enforced), short-hold warning (<3 days)
- Prompt reframed: 'beat SPY in bull market requires being invested'
- rule_based portfolio: pure trend-following strategy as control group
(buys top momentum 强势 tickers, sells 弱势 tickers held 3+ days)
- --dry-run flag for testing without file writes
- Performance leaderboard printed at end of each run
- ai-portfolio.json: restructured for multi-model support
- ai-trading-decision.py: daily decision script queries each model API
- ai-trading.yml: GitHub Action runs daily at 4:30pm ET after market close
- index.html: leaderboard view with per-model holdings/trades tabs