Weekly Full Stack (15)
15 strong trends at the companies improving fastest, with extra safety checks, rebuilt weekly.
How it works
Weekly Full Stack (15) holds 15 of the 500 most actively traded US stocks: those with the strongest price trends over the past year, among companies that generate cash and whose profitability is improving. It puts much more money in the strongest trends and rebuilds the portfolio every week. Each rule is listed below in the order it is applied.
The rules, step by step
- When it decides. After the market closes on the last trading day of each week (usually Friday), using that day’s closing prices and only information available by then.
- The stock pool. US-listed common stocks and ADRs, not traded over the counter, closing at $5 or more. Each must have traded at least $10 million a day on average over 20 trading days at this decision and one and two months (21 and 42 trading days) before it. Of those, the 500 with the highest 20-day average trading value form the pool.
- Cash flow. Keeps only companies whose latest quarterly report, filed by the decision day, shows positive free cash flow.
- Improving profitability. Keeps only companies whose gross margin in the latest filed quarter is higher than in the same quarter a year earlier (as first reported).
- The fastest improvers. Of those, keeps only the half whose gross-margin improvement is at or above the median of the remaining stocks.
- No sudden spikes. Skips any stock that rose more than 40% over the last month (21 trading days).
- Not just before results. Does not buy a new stock whose next quarterly report is expected within 7 days (estimated as 91 days after its last report). Stocks already held may stay.
- The ranking. Ranks the remaining stocks by 12-1 momentum: the price change from twelve months ago (252 trading days) to one month ago (21 trading days), using prices adjusted for splits and dividends. The latest month is left out on purpose.
- The selection. Takes the 15 highest-ranked stocks, with at most two from any one industry sector: when a sector is full, the next-ranked stock from another sector takes the place. Stocks already held get no preference; each rebuild starts from the ranking.
- How much in each. In proportion to each stock’s 12-1 momentum raised to the power 2 (squared): a stock up 80% gets four times the money of one up 40%. (Momentum below 1% counts as 1%.)
- Less in look-alikes. Each stock’s amount is then reduced by up to half according to how closely its daily price moves over the last six months (126 trading days) have followed the largest holding’s, and the amounts are scaled back to 100%.
- A minimum per stock. No stock gets less than 3% of the portfolio; the difference is taken from the larger holdings in proportion to their size.
- The trades. Made at the next trading day’s closing price: stocks no longer selected are sold, new ones bought, and those that stay are resized to their new amounts. Every buy, sale and resize pays 0.10% of the amount traded.
- Between rebuilds. No trades. The holdings’ shares of the portfolio drift as their prices move until the next decision.
These rules are frozen (rules version 1) and are exactly what the record uses, every day since go-live and throughout the backtest. Changing any of them would make a new strategy with its own record. Key terms explained.
What to expect: Strong returns with smaller falls than the other weighted strategies, and more holdings than Weekly Leaders.
What would your money have done?
$10,000 put in at the close of Nov 1, 2017, worth at the close of Oct 16, 2026:
Growth of $10,000 against SPY
Fall from the highest value so far
The Bull Rhythm Weekly · every Friday after the close
Follow the strategies as they run live
Eight strategies with fixed rules, every decision made at the day’s close. Each Friday, see where the record stands: what each one made, what it bought and sold, and why.
- This week’s result and the running total since going live, next to the S&P 500
- Every buy and every sale, with the reason in plain words
- What each one holds now, with charts
- The good weeks and the bad ones, reported the same way
Returns over set periods
| Strategy | 1 month | 3 months | This year | 1 year | 3 years | 5 years | Since 2017 | Since go-live |
|---|---|---|---|---|---|---|---|---|
| Weekly Full Stack (15) | -6.9% | +9.0% (ahead of SPY) | +207.8% (ahead of SPY) | +181.6% (ahead of SPY) | +1,421.2% (ahead of SPY) | +1,619.3% (ahead of SPY) | +18,500.2% (ahead of SPY) | -11.6% |
| SPY (buy and hold) | +0.3% | +3.1% | +12.8% | +16.0% | +81.4% | +86.4% | +240.4% | -0.3% |
Year by year
Each calendar year on its own, newest first: the return (bold when ahead of SPY), the worst fall from a high within that year, how much the value swung (volatility, as a yearly figure), Sharpe, the best and worst month, the share of months that ended higher, and beta (how much it moved for each 1% SPY moved). The first and the current year are partial; years before going live are a backtest.
| Year | Return | SPY | Worst fall | SPY worst fall | Volatility | Sharpe | Best month | Worst month | Up months | Beta |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026 (partial) · live from Sep 28, 2026 | +207.8% (ahead of SPY) | +12.8% | -41.3% | -8.9% | 70.1% | 2.38 | +86.9% | -31.9% | 70% | 2.87 |
| 2025 | +48.9% (ahead of SPY) | +17.7% | -41.3% | -18.8% | 52.5% | 1.03 | +26.4% | -13.9% | 67% | 1.82 |
| 2024 | +124.6% (ahead of SPY) | +24.9% | -19.2% | -8.4% | 36.3% | 2.42 | +29.8% | -9.7% | 75% | 1.85 |
| 2023 | +64.9% (ahead of SPY) | +26.2% | -25.0% | -10.0% | 33.1% | 1.69 | +38.0% | -9.4% | 42% | 1.41 |
| 2022 | +10.5% (ahead of SPY) | -18.2% | -33.9% | -24.5% | 37.4% | 0.46 | +19.9% | -19.2% | 58% | 0.94 |
| 2021 | +38.8% (ahead of SPY) | +28.7% | -25.5% | -5.1% | 47.0% | 0.93 | +23.3% | -12.2% | 58% | 1.87 |
| 2020 | +209.5% (ahead of SPY) | +18.4% | -40.7% | -33.7% | 62.6% | 2.11 | +38.2% | -15.3% | 67% | 1.20 |
| 2019 | +105.9% (ahead of SPY) | +31.2% | -18.0% | -6.6% | 30.9% | 2.50 | +15.4% | -13.6% | 83% | 1.24 |
| 2018 | +16.0% (ahead of SPY) | -4.6% | -37.3% | -19.3% | 34.2% | 0.60 | +20.6% | -18.4% | 50% | 1.45 |
| 2017 (partial) | -3.3% | +4.2% | -12.3% | -1.0% | 24.8% | -0.74 | +0.1% | -3.5% | 50% | 1.39 |
The account, as a ledger
The strategy shown as one account that started with $10,000 on Nov 1, 2017 (change the amount above) and followed every trade. Shares are fractional; share counts include stock splits and reinvested dividends. Gains are measured on average cost. With a split chosen above, part of the account sits in BIL (a 1–3 month T-bill fund) and is put back to the split at every rebuild: each move is one BIL row below, and it buys or sells the same slice of every stock held.
What it holds now
At the close of Oct 16, 2026. It decides after the close on the last trading day of each week and trades at the next day's close. The weights drift with prices between rebuilds. This is the model’s position, published for education, not a recommendation to buy these stocks: a portfolio started today would differ in entry prices and results.
| Stock | Sector | Weight | Shares | Avg cost | Cost basis | Price | Value | Gain on cost | Since first bought | First bought | At | Why |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| SNDK | Technology | 33.7% | 481.796 | $1,783.17 | $859,125 | $1,299.30 | $625,998 | −$233,127 | -36.6% | Jun 29, 2026 | $2,050.39 | new: ranked 1 of 15, 12-1 momentum +3265% |
| AXTI | Technology | 22.0% | 7,935.702 | $62.02 | $492,211 | $51.47 | $408,451 | −$83,760 | -17.0% | Oct 12, 2026 | $61.98 | new: ranked 2 of 15, 12-1 momentum +1118% |
| TXG | Healthcare | 4.6% | 1,220.143 | $75.24 | $91,809 | $69.86 | $85,239 | −$6,570 | -7.1% | Oct 12, 2026 | $75.19 | new: ranked 3 of 15, 12-1 momentum +450% |
| DLTR | Consumer Defensive | 3.5% | 518.207 | $117.70 | $60,990 | $124.18 | $64,351 | +$3,361 | +5.6% | Oct 12, 2026 | $117.61 | new: ranked 14 of 15, 12-1 momentum +35% |
| CF | Basic Materials | 3.5% | 531.910 | $114.66 | $60,990 | $120.85 | $64,281 | +$3,291 | +5.5% | Oct 12, 2026 | $114.58 | new: ranked 12 of 15, 12-1 momentum +52% |
| ROST | Consumer Cyclical | 3.4% | 269.865 | $229.95 | $62,055 | $236.89 | $63,928 | +$1,873 | +3.3% | Sep 8, 2026 | $229.31 | new: ranked 11 of 15, 12-1 momentum +68% |
| VZ | Communication Services | 3.4% | 1,424.645 | $42.81 | $60,990 | $44.79 | $63,810 | +$2,819 | +4.7% | Oct 12, 2026 | $42.78 | new: ranked 15 of 15, 12-1 momentum +29% |
| CNC | Healthcare | 3.4% | 909.375 | $64.43 | $58,593 | $69.16 | $62,892 | +$4,300 | +8.5% | Aug 3, 2026 | $63.76 | new: ranked 7 of 15, 12-1 momentum +165% |
| VLO | Energy | 3.3% | 139.785 | $285.97 | $39,974 | $444.71 | $62,164 | +$22,190 | +76.8% | Jun 1, 2026 | $252.52 | new: ranked 10 of 15, 12-1 momentum +102% |
| NUE | Basic Materials | 3.3% | 242.014 | $242.44 | $58,674 | $256.29 | $62,026 | +$3,352 | +6.0% | Sep 21, 2026 | $242.40 | new: ranked 10 of 15, 12-1 momentum +77% |
| ROKU | Communication Services | 3.3% | 398.837 | $154.03 | $61,431 | $154.54 | $61,636 | +$205 | +1.8% | Aug 10, 2026 | $151.84 | new: ranked 11 of 15, 12-1 momentum +65% |
| TGT | Consumer Defensive | 3.3% | 396.734 | $160.32 | $63,603 | $154.26 | $61,200 | −$2,403 | -4.1% | Aug 31, 2026 | $160.88 | new: ranked 12 of 15, 12-1 momentum +52% |
| PBF | Energy | 3.3% | 716.846 | $72.62 | $52,058 | $84.52 | $60,588 | +$8,530 | +16.6% | Sep 21, 2026 | $72.48 | new: ranked 5 of 15, 12-1 momentum +149% |
| ATI | Industrials | 3.2% | 324.217 | $204.86 | $66,418 | $185.59 | $60,171 | −$6,246 | -10.5% | Sep 8, 2026 | $207.32 | new: ranked 4 of 15, 12-1 momentum +190% |
| BE | Industrials | 2.8% | 232.371 | $305.72 | $71,041 | $221.31 | $51,426 | −$19,615 | -14.5% | May 18, 2026 | $258.71 | new: ranked 2 of 15, 12-1 momentum +937% |
Every trade
8,558 trades in all; the latest 50 below, newest first (up to 300 here; the download has them all). Download the full ledger (CSV). A trade is decided at one day’s close and made at the next day’s close.
| Date | Stock | Action | Weight | Shares | Price | Amount | Fee | Realized gain | Account value | Gain vs start | Why |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Oct 12, 2026 | VZ | buy | 0.0% → to 3.0% | 1,425.675 | $42.78 | −$60,990 paid | $60.99 | $2,031,543 | +$2,021,543 | new: ranked 15 of 15, 12-1 momentum +29% | |
| Oct 12, 2026 | VLO | trim | 3.4% → to 3.0% | 17.401 | $436.00 | +$7,587 received | $7.59 | +$2,614 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | TXG | buy | 0.0% → to 4.5% | 1,221.026 | $75.19 | −$91,809 paid | $91.81 | $2,031,543 | +$2,021,543 | new: ranked 3 of 15, 12-1 momentum +450% | |
| Oct 12, 2026 | TGT | trim | 3.3% → to 3.0% | 34.087 | $153.62 | +$5,236 received | $5.24 | −$224 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | SNDK | trim | 53.5% → to 35.3% | 249.222 | $1,487.33 | +$370,675 received | $370.67 | −$73,409 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | ROST | trim | 3.2% → to 3.0% | 21.300 | $225.84 | +$4,810 received | $4.81 | −$84 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | ROKU | trim | 3.2% → to 3.0% | 30.802 | $152.81 | +$4,707 received | $4.71 | −$34 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | PBF | trim | 3.3% → to 3.0% | 66.324 | $85.02 | +$5,639 received | $5.64 | +$826 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | NUE | trim | 3.2% → to 3.0% | 20.153 | $251.83 | +$5,075 received | $5.08 | +$193 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | MU | sell | 4.3% → to 0.0% | 89.030 | $989.04 | +$88,054 received | $88.05 | −$6,723 | $2,031,543 | +$2,021,543 | Technology already has 2 stronger names |
| Oct 12, 2026 | HL | sell | 3.2% → to 0.0% | 3,877.439 | $16.84 | +$65,296 received | $65.30 | −$5,535 | $2,031,543 | +$2,021,543 | Basic Materials already has 2 stronger names |
| Oct 12, 2026 | FIVE | sell | 3.2% → to 0.0% | 305.447 | $213.58 | +$65,237 received | $65.24 | −$9,330 | $2,031,543 | +$2,021,543 | left the 500 most traded (or under $5) |
| Oct 12, 2026 | DLTR | buy | 0.0% → to 3.0% | 518.582 | $117.61 | −$60,990 paid | $60.99 | $2,031,543 | +$2,021,543 | new: ranked 14 of 15, 12-1 momentum +35% | |
| Oct 12, 2026 | CNC | trim | 3.4% → to 3.0% | 115.710 | $67.02 | +$7,755 received | $7.75 | +$305 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | CF | buy | 0.0% → to 3.0% | 532.295 | $114.58 | −$60,990 paid | $60.99 | $2,031,543 | +$2,021,543 | new: ranked 12 of 15, 12-1 momentum +52% | |
| Oct 12, 2026 | BE | add | 3.0% → to 3.0% | 2.449 | $262.28 | −$642 paid | $0.64 | $2,031,543 | +$2,021,543 | rebalance to target weight | |
| Oct 12, 2026 | AXTI | buy | 0.0% → to 24.2% | 7,941.441 | $61.98 | −$492,211 paid | $492.21 | $2,031,543 | +$2,021,543 | new: ranked 2 of 15, 12-1 momentum +1118% | |
| Oct 12, 2026 | ATI | trim | 3.2% → to 3.0% | 17.126 | $187.98 | +$3,219 received | $3.22 | −$286 | $2,031,543 | +$2,021,543 | rebalance to target weight |
| Oct 12, 2026 | AMGN | sell | 3.4% → to 0.0% | 163.669 | $417.57 | +$68,343 received | $68.34 | +$3,739 | $2,031,543 | +$2,021,543 | Healthcare already has 2 stronger names |
| Oct 5, 2026 | WBD | sell | 2.9% → to 0.0% | 2,039.654 | $30.95 | +$63,127 received | $63.13 | +$6,900 | $2,198,508 | +$2,188,508 | delisted or acquired: sold at its last close |
| Oct 5, 2026 | VLO | trim | 3.1% → to 3.0% | 4.406 | $419.33 | +$1,848 received | $1.85 | +$589 | $2,198,508 | +$2,188,508 | rebalance to target weight |
| Oct 5, 2026 | TGT | add | 2.8% → to 3.0% | 33.538 | $152.99 | −$5,131 paid | $5.13 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Oct 5, 2026 | SNDK | add | 35.8% → to 56.7% | 269.392 | $1,704.16 | −$459,087 paid | $459.09 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Oct 5, 2026 | ROST | add | 2.7% → to 3.0% | 25.695 | $226.37 | −$5,817 paid | $5.82 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Oct 5, 2026 | ROKU | add | 2.9% → to 3.0% | 17.349 | $153.41 | −$2,661 paid | $2.66 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Oct 5, 2026 | PBF | trim | 3.2% → to 3.0% | 63.100 | $84.16 | +$5,310 received | $5.31 | +$734 | $2,198,508 | +$2,188,508 | rebalance to target weight |
| Oct 5, 2026 | NUE | add | 3.0% → to 3.0% | 4.089 | $251.41 | −$1,028 paid | $1.03 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Oct 5, 2026 | MU | buy | 0.0% → to 4.3% | 89.080 | $1,063.96 | −$94,777 paid | $94.78 | $2,198,508 | +$2,188,508 | new: ranked 2 of 15, 12-1 momentum +426% | |
| Oct 5, 2026 | HL | add | 2.9% → to 3.0% | 174.424 | $17.01 | −$2,967 paid | $2.97 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Oct 5, 2026 | FIVE | add | 2.7% → to 3.0% | 29.192 | $215.93 | −$6,303 paid | $6.30 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Oct 5, 2026 | CNC | add | 2.9% → to 3.0% | 18.397 | $64.30 | −$1,183 paid | $1.18 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Oct 5, 2026 | BE | trim | 3.1% → to 3.0% | 9.540 | $286.65 | +$2,735 received | $2.73 | −$183 | $2,198,508 | +$2,188,508 | rebalance to target weight |
| Oct 5, 2026 | AXTI | sell | 26.2% → to 0.0% | 6,644.492 | $86.66 | +$575,812 received | $575.81 | +$130,727 | $2,198,508 | +$2,188,508 | up more than 40% in the last month |
| Oct 5, 2026 | ATI | trim | 3.1% → to 3.0% | 7.073 | $193.09 | +$1,366 received | $1.37 | −$81 | $2,198,508 | +$2,188,508 | rebalance to target weight |
| Oct 5, 2026 | AMGN | add | 2.8% → to 3.0% | 13.029 | $402.98 | −$5,251 paid | $5.25 | $2,198,508 | +$2,188,508 | rebalance to target weight | |
| Live forward test starts here: Sep 28, 2026. Above: decided each day from that day’s data. Below: backtest. | |||||||||||
| Sep 28, 2026 | WBD | trim | 3.1% → to 3.0% | 92.267 | $30.90 | +$2,851 received | $2.85 | +$308 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | VLO | trim | 3.1% → to 3.0% | 5.185 | $389.57 | +$2,020 received | $2.02 | +$539 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | TGT | trim | 3.1% → to 3.0% | 18.542 | $158.43 | +$2,938 received | $2.94 | −$41 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | SNDK | add | 23.4% → to 37.7% | 175.798 | $1,712.89 | −$301,123 paid | $301.12 | $2,100,844 | +$2,090,844 | rebalance to target weight | |
| Sep 28, 2026 | ROST | trim | 3.2% → to 3.0% | 18.122 | $237.09 | +$4,297 received | $4.30 | +$130 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | ROKU | trim | 3.1% → to 3.0% | 12.650 | $152.67 | +$1,931 received | $1.93 | −$14 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | PBF | trim | 3.2% → to 3.0% | 58.726 | $74.39 | +$4,369 received | $4.37 | +$111 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | NUE | trim | 3.2% → to 3.0% | 13.105 | $244.49 | +$3,204 received | $3.20 | +$26 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | HL | add | 2.9% → to 3.0% | 126.899 | $17.01 | −$2,159 paid | $2.16 | $2,100,844 | +$2,090,844 | rebalance to target weight | |
| Sep 28, 2026 | FIVE | trim | 3.0% → to 3.0% | 1.639 | $228.00 | +$374 received | $0.37 | −$31 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | CNC | trim | 3.0% → to 3.0% | 2.425 | $62.53 | +$152 received | $0.15 | −$4 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | BE | trim | 3.0% → to 3.0% | 0.860 | $262.87 | +$226 received | $0.23 | −$37 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | AXTI | trim | 36.4% → to 23.3% | 3,725.015 | $73.67 | +$274,422 received | $274.42 | +$24,972 | $2,100,844 | +$2,090,844 | rebalance to target weight |
| Sep 28, 2026 | ATI | add | 3.0% → to 3.0% | 1.717 | $180.67 | −$310 paid | $0.31 | $2,100,844 | +$2,090,844 | rebalance to target weight | |
| Sep 28, 2026 | AMGN | trim | 3.3% → to 3.0% | 16.285 | $418.13 | +$6,809 received | $6.81 | +$398 | $2,100,844 | +$2,090,844 | rebalance to target weight |