The full methodology, backtests, and journals behind your weekly plan
Every month the contribution is split the same way, no matter what the market does. Goal: durable growth with controlled upside — ETFs do most of the compounding; the opportunistic sleeve takes only scored, risk-defined setups.
€150 / month
All-world (VWCE) + S&P 500 (VUAA) accumulating ETFs. Pure buy-and-hold DCA: fixed day, no timing, never sold to fund the other sleeves. This is the ballast — it roughly matches the benchmark by construction.
€50 / month
Deployed only when the weekly scan flags a setup (conviction ≥ threshold). Which stock? The highest-scoring names from your tactical watchlist — never the ETF core. Review every 7 or 14 days; exit at a 7% stop, a 10% profit target, or the maximum hold date. No setup → cash rolls forward.
Benchmark: S&P 500 at the deck's 8%/yr assumption. The opportunistic sleeve targets +3%/yr of alpha above the index, so the blended 75/25 plan runs ≈+0.75%/yr ahead of the benchmark — carried entirely by the 25% outside the core.
Check quarterly: portfolio total return vs CSPX/VUAA. If the sleeve trails the index for 12+ months, shift weight back toward the 75% core. Assumed returns are illustrative, not forecasts.
Use left/right arrows to continue. Change assumptions anytime. Double-click a card to jump to Portfolio Mix (pie).
€0
€0
€0
Expected vs upside/downside envelope by selected strategy — or check “overlay all” above.
Every line uses the expected return assumption for that strategy . Adjust sliders on the Projection Controls slide.
Next: pick one card on “Choose a Portfolio Style” or use Best Bet for a ranked pick.
Selected strategy: Follows your selected portfolio card
Goal:
Why these stocks make sense:
Quick Wins and Cushioned Quick Wins use stop/invalidation behavior from the scorecard: if price closes below stop, exit instead of averaging down.
Momentum and catalyst-driven sleeve: 4–12 week horizon, higher turnover and volatility than core ETFs.
Tickers are yours: the table below only scores symbols from your watchlist in data/quick-wins.json (set when you run the generator). It does not pick random stocks.
Live scores use the same engine as MCP build_quick_wins_context — regenerate before deploy.
swing-ibkr-gen-quick-wins from the repo (writes data/quick-wins.json)
Backtest of the 25% opportunistic sleeve from your 75/25 plan.
Rules live in autoresearch/strategy.py; charts below score those rules vs
CSPX.L. Regenerate: swing-ibkr-gen-autoresearch.
Primary metric: risk_adjusted_alpha = alpha − 0.35×|max drawdown|. Higher is better.
Simplified Yahoo backtest — for comparing rule changes, not a live P&L forecast.
How momentum drives picks (35% of conviction) and how to
improve the watchlist universe. Regenerate:
swing-ibkr-gen-momentum-universe.
Momentum buys recent strength; Sharpe penalizes bumpy paths. Tune weights in
autoresearch/strategy.py; tune candidates in config/news_themes.json.
Forward test of the 25% opportunistic sleeve — virtual executions with
conviction notes and news context. Regenerate: swing-ibkr-gen-paper-trial.
Paper trial state: reports/paper-trial-state.json. Advance with
swing-ibkr paper-trial run; mirror on Alpaca with
swing-ibkr alpaca execute --budget 20.
A short chapter on what the system actually does — and what it does not guess.
The engine only scores symbols you put on the watchlist (comma-separated list when you run the generator or MCP). It does not scan the market, read filings, or rank “the best stocks in the world.” If a symbol has no usable Yahoo Finance history, it disappears from the scorecard until data exists.
For each ticker it downloads roughly half a year of daily OHLCV via Yahoo. A name must have at least 60 trading days of bars to be scored at all; shorter histories are skipped.
Technical agent looks at the last price versus a 20-day and 50-day average, and at RSI(14). Price above the 20-day and the 20 above the 50 adds points; RSI deeply oversold adds a bit, extreme overbought subtracts.
Momentum agent rewards positive 30-day and 10-day returns and penalizes clear negative drift.
Risk agent starts from a generous baseline then penalizes high annualized volatility (from the last 20 daily returns) and large drawdown from the recent peak.
Those three scores (0–100 each) are blended into a single conviction score: 40% technical, 35% momentum, 25% risk — then rounded to an integer.
Quick Wins uses a score threshold (default 72) from the memo config. At or above threshold + 8 → “Buy”; at or above threshold → “Add”; softer bands → Hold, Trim, or Exit. That is pure rule arithmetic — not a discretionary story about the company.
Entry band is built from the minimum of last close and the 20-day average, ±1%. The invalidation line is roughly 7% below last close (formatted as “< price”). Position size % scales from conviction when action is Buy/Add or Hold — again a formula, not chat advice.
Every surviving ticker gets a row; rows are sorted by conviction, highest first. So “who wins” on the scorecard is whoever scored highest under the same rules — not a separate AI vote per row.
The Robinhood-style growth curves on other slides use hand-picked annual return assumptions per strategy (core ETF, AI, etc.) to illustrate compounding — they are not outputs of the Yahoo scoring pipeline. Only the Quick Wins table is tied to live (or demo-fallback) JSON from the generator.
Nothing here is investment advice; it is a transparent description of mechanics so you can judge limits and change the watchlist, thresholds, or code if you disagree with the design.
Hover the faint ? circles for exact rule reminders.
Slice amounts show your share of capital if total deployed is between €100 and €200 (same percentages scale to any size).
Loading recommendation...
cd /Users/uzzielperez/Desktop/swing-trader-ibkr
npx wrangler pages deploy portfolio-reveal-site --project-name alphatrade-portfolio
Live at alphatrade-portfolio.pages.dev. Requires npx wrangler login once. The dashboard at index.html is the daily view; this deck is the study companion.