← All strategies

N03Orbital Strategies · 5-min

Beat SPY

Twice-daily trend long with volatility exits, AI growth 21

The rules

At 10:00 and 15:50 ET each session, buy any of 21 AI growth stocks that is above its 20-day average (at 10:00, only if the previous session's close was above it too) and sell any held one that has fallen below it; each buy also gets a target and a stop scaled to the stock's recent volatility, and a time limit of 10 to 40 sessions. The program is handed a 5-minute bar every five minutes, built from 1-minute data and starting at 09:30, with the closing minute, 16:00 (13:00 on a half day), as each session's last, one-minute bar, but it checks only the 09:55 and 15:45 bars (the 12:45 bar on a half day), and its orders fill at the open of the next minute the stock trades, normally 10:00, 15:50 or 12:50. Its 20-day average is the checked bar's close plus the closes of the previous 19 sessions, divided by 20. On the 09:55 bar it buys a stock it does not hold if the bar's close and the previous session's close are both above that average; on the 15:45 bar the bar's close alone must be above it. On either bar it sells a stock it holds whose close is below the average. Each buy is scored from 0 to 1: half from how near the price is to the highest of itself and the previous 19 session closes (1 at that high, 0 at 10% or more below it, in a straight line between), and half from the share of the previous 10 sessions that closed above their own 10-session average. It spends 5% of equity plus 20% times the score, in whole shares counted at the decision. It then sets a target above the decision price by (1 + score + 0.5v) × σ × √h and a stop below it by (1.5 − 0.5v) × σ × √10, both as fractions of that price, and a time limit of h sessions. Here σ is the standard deviation of the stock's last 19 daily log returns, counting the move from the previous close to the current price as today's; h is 10 + 30 × score; and v runs from 0, when the day's volume so far is at or below its 14-session average for the same part of the day, to 1 when it is twice that or more, in a straight line between. Stops and targets are checked against every 1-minute bar's high and low from the minute the buy fills, and a price that opens beyond either fills at that open. The time limit is 79 × h bars, rounded down, with the one-minute 16:00 bar counted as one, and once that many of the stock's bars have closed since the buy it sells at the open of the next minute the stock trades. After any sale it can buy the stock again at the next check. It never sells short. It trades a cash account: at each minute, sales go first, then buys in alphabetical order of ticker, and a buy the remaining cash cannot pay for in full is turned away; the program asks again at the next check if the stock still qualifies. It finds earlier sessions by counting back 79 bars per session, so a session with fewer bars throws off what it reads: for up to 18 sessions after each of the test's seven half days, which have 43 bars, the closes it reads for sessions before the half day come from earlier in those days, and for up to 14 its volume comparison is shifted the same way. A stock with no trade during one of its bars has no bar there: if that is the 09:55 or 15:45 bar it skips that check, and either way its counting back is shifted the same way. A stock can trade only once it has 1,600 bars of its own, about 20 sessions. ALAB, RBRK, TEM and CRWV, which listed after the test began, joined on April 19, 2024, May 24, 2024, July 18, 2024 and April 29, 2025; the other 17 had that much history before it began and could trade from its first session. Positions still open when the test ends are not sold; they are valued at the last close.

Universe
Twenty-one AI growth stocks: NVDA, GOOGL, MSFT, META, AVGO, MU, AMD, PLTR, LRCX, ORCL, ANET, MRVL, NET, SNOW, DDOG, VRT, ALAB, CRWV, CRDO, RBRK and TEM
Bars
5-minute
Position size
5% of equity plus 20% times the entry score, so 5% to 25% per stock, in whole shares counted at the decision; on a cash account, so a buy the cash left cannot cover in full is turned away
Rebalance
Every session: checks the 09:55 and 15:45 five-minute bars (12:45 on a half day) and trades at 10:00 and 15:50 (12:50 on a half day); stops and targets can sell at any minute, and time limits at the start of any bar

Results

MeasureOrbital testSPY, same days
WindowNov 1, 2023 to Oct 2, 2026Nov 1, 2023 to Oct 2, 2026
Total return+645.66%+88.84%
CAGR+99.05%+24.34%
Sharpe1.911.26
Discounted Sharpe−2.87—
Max drawdown−37.6%−18.7%
Win rate31.7%—
Profit factor1.80—
Trades521—

Hypothetical: a backtest with modeled costs, not traded with real money.

Hypothetical growth of $10,000

N03 Twice-daily trend long with volatility exits, AI growth 21 · +645.7% vs SPY +88.8%

Rebuild it in Orbital

Paste this into Orbital Chat. The Strategy Developer builds the workflow and asks before it runs any backtest.

Trade NVDA, GOOGL, MSFT, META, AVGO, MU, AMD, PLTR, LRCX, ORCL, ANET, MRVL, NET, SNOW, DDOG, VRT, ALAB, CRWV, CRDO, RBRK and TEM during regular hours. Build it as a program that decides on 5-minute bars, fills on 1-minute bars and has a warm-up of 1,600 five-minute bars. The 5-minute bars start at 09:30 and each session ends with a one-minute bar at 16:00, so a full session has 79. Number each bar n by its start time, minutes after 09:30 divided by 5, so the 09:55 bar is 5 and the 15:45 bar is 75. Take the previous session's close as the close n + 1 bars back, and each earlier session's close by stepping back 79 more bars at a time, even across a half day or a missing bar. The 20-day average is the current bar's close plus the previous 19 session closes, divided by 20. Act only on the 09:55 bar and the 15:45 bar (12:45 on a half day). On both, sell a stock it holds if the bar closes below the 20-day average. On the 09:55 bar, buy a stock it does not hold if the bar's close and the previous session's close are both above the average; on the 15:45 bar, buy if the bar's close is above it. Score each buy from 0 to 1: half is ((close ÷ the highest of the close and the previous 19 session closes) − 0.9) ÷ 0.1, kept between 0 and 1, and half is the fraction of the previous 10 sessions whose close was above the average of that close and the 9 session closes before it. Spend 5% + 20% × score of equity on each buy. At each buy, let σ be the population standard deviation of the 19 daily log returns running from the close 19 sessions ago to the current close; let v be the total volume of the current bar and the n bars before it, divided by the average volume of the same n + 1 bars in each of the previous 14 sessions (stepping back 79 bars per session), minus 1, kept between 0 and 1; and let h be 10 + 30 × score. Set a target at close × (1 + (1 + score + 0.5v) × σ × √h), a stop at close × (1 − (1.5 − 0.5v) × σ × √10) and a time stop of 79 × h five-minute bars, rounded down. Orders fill at the next 1-minute bar's open. Long only, on a cash account with no margin; pass the score with each buy but do not rank by it. Backtest from November 1, 2023 to October 2, 2026 with $100,000.

Is it real?

Versions tried
75 across the three AI Growth Trend strategies
Discounted Sharpe
−2.87: the raw 1.91 less the 4.79 the best of 75 tries would reach by luck
Chance it beats luck
less than 0.1% that its true Sharpe tops 4.79
Beta to SPY
1.31
Alpha vs SPY
+47.3% a year
Data
5-minute bars, 732 sessions
Costs
Alpaca's $0 commission, 0.03% slippage a side

Read this before you trust it

75 versions were tried across the three AI Growth Trend strategies, and their Sharpes ran from −7.76 to 2.13. The best of 75 tries with no real edge would be expected to reach about 4.79 by luck alone; this run's 1.91 falls 2.88 short of it, and the chance that its true Sharpe is above it is less than 0.1%. Many versions ran over windows of six months to a year, whose Sharpes swing far more than a multi-year run's; that spread raises the bar, so the discount errs on the strict side. The 21 stocks were picked in October 2026, with hindsight of how AI stocks had done, and four of them were not yet trading when the test began. Cash often ran short: 9,144 buy orders, counting repeats at each check, were turned away because the cash left could not pay for them, and buys on the same minute were filled in alphabetical order of ticker, so which stocks it held depends partly on where their tickers fall in the alphabet. Sessions with fewer bars are not only half days: NET's last position, bought at 10:00 on September 10, 2026 and still held at the end, lasted 1,325 of its bars, 12 fewer than 79 a session would give. The run assumed slippage of 0.03% a side, below Orbital's default of 0.05%; a backtest built from the prompt in Chat assumes the default, so it comes out a little lower.