The rules
At 09:35 ET, buy any of 24 AI-related stocks trending up over about a month, or short one breaking down on heavy volume, with half the account each, and hold until the trend fails or a stop is hit; shorts also have a target and a three-session limit. It decides on five-minute bars built from one-minute data and counted from 09:30, so a full session has 78 five-minute bars and a one-minute bar for the 16:00 closing print, 79 in all (43 on a half day, which ends with a 13:00 closing-print bar), and it measures history in blocks of 79 bars. It counts bars, not days: a block holds exactly one session's worth of bars only while every session prints all 79, so a half day, a missing closing print or a five-minute window with no trades shifts every block behind it. It uses four measures: the return since the close 21 blocks (1,659 bars) earlier; the 20-block average, the mean of this close and the closes 1 to 19 blocks back; the volume ratio, the volume of the latest 79 bars over the average of the 20 blocks before them; and the average range of the latest 20 blocks, each block's high-to-low range stretched to include the close just before it. Entries are checked once per stock per session, on the 09:30 to 09:35 bar, when it holds none and has no order waiting: it buys when the return is above zero and the close is above the 20-block average, and shorts when the return is below zero, the close is below that average and below every close 1 to 20 blocks back, and the volume ratio is at least 1.5. A stock still held at that check is not bought or shorted that session, even if the check sells or covers it. Entry orders fill at the 09:35 minute's open, or at the first later minute with a trade. Each trade gets a fixed stop two widths from the decision bar's close, below a long and above a short; a width is the average range times the volume ratio divided by 1.5, but no less than one average range and no more than one and a half. A short also gets a target three widths below that close and is covered at the next minute's open once 237 bars, three full sessions, have closed since its fill, normally at 09:35 three sessions later; a long has neither. An entry is skipped if its stop, or a short's target, would be at or below zero. A long is sold when a 09:35 check finds the return at or below zero or the close at or below the 20-block average. A short is covered after any bar, the closing-print bar included, on which the return is at or above zero or the close is at or above that average. Exits fill the same way, at the next minute's open, which after the closing-print bar is normally the next session's open; stops and targets are checked against every one-minute bar's high and low, and a gap past a stop fills at the open. If a session's first bar is not the 09:30 to 09:35 bar, a five-minute window has no trades, the session ends at neither 16:00 nor 13:00, or a bar's prices or volume are not positive and consistent, it closes anything held at the next minute's open and trades no more that session; an entry is also skipped if any of the latest 1,659 bars, the decision bar included, fails that check, and if a close it reads from an earlier block is not positive, it closes anything held and skips that bar. Each position is 50% of equity at the decision, in whole shares, cut to fit or dropped if afterwards any holding would be worth more than 50% of equity or longs plus shorts more than 100%; when several stocks qualify, orders fill in alphabetical order of ticker, after that minute's exits. Each stock needs 1,659 bars of its own history before it decides; the test loads them from before its start. Positions still open when the test ends are not sold; they are valued at the last close.
- Universe
- Twenty-four AI-related stocks, from chips and software to power, data centers and copper: NVDA, AMD, AVGO, MU, ANET, MRVL, LRCX, MSFT, GOOGL, META, ORCL, PLTR, NET, DDOG, VRT, ETN, CEG, VST, DLR, EQIX, FCX, NBIS, CRWV and IREN
- Bars
- 1-minute
- Position size
- 50% of equity per position at the decision, in whole shares; a new position is cut to fit, or dropped, if any holding would then be worth more than 50% of equity or longs plus shorts more than 100%, so it holds at most two full positions
- Rebalance
- Every session: entries and long exits at 09:35, short exits after any bar, stops and targets every minute
Results
| Measure | Orbital test | SPY, same days |
|---|---|---|
| Window | Oct 10, 2024 to Oct 9, 2026 | Oct 10, 2024 to Oct 9, 2026 |
| Total return | +275.57% | +38.25% |
| CAGR | +94.06% | +17.62% |
| Sharpe | 1.67 | 0.83 |
| Discounted Sharpe | −0.84 | — |
| Max drawdown | −32.7% | −18.7% |
| Win rate | 32.9% | — |
| Profit factor | 2.15 | — |
| Trades | 143 | — |
Hypothetical: a backtest with modeled costs, not traded with real money.
Hypothetical growth of $10,000
N04 Morning trend long/short, broad AI 24 · +275.6% vs SPY +38.3%
Rebuild it in Orbital
Paste this into Orbital Chat. The Strategy Developer builds the workflow and asks before it runs any backtest.
Orbital Chat cannot set entry allocation limits yet, so a backtest it proposes runs without them, and on a margin account it can then hold up to four positions of 50% each. To match this test, run it from Backtesting and turn on Limit entry allocations in the Run dialog, at 50% per stock and 100% total gross.
Trade NVDA, AMD, AVGO, MU, ANET, MRVL, LRCX, MSFT, GOOGL, META, ORCL, PLTR, NET, DDOG, VRT, ETN, CEG, VST, DLR, EQIX, FCX, NBIS, CRWV and IREN, long and short, during regular hours, holding positions overnight with no end-of-day exit. Build it as a program that decides on 5-minute bars counted from 09:30, fills on 1-minute data and declares a warm-up of 1,659 bars; a full session then has 78 five-minute bars and a one-minute 16:00 bar, 79 in all, and a half day ends with a one-minute 13:00 bar. Count back in bars, not days. On each bar, the return is the close divided by the close 1,659 bars back, minus one, and the 20-block average is the mean of this close and the closes 79, 158 and so on up to 1,501 bars back. For an entry, also split the last 1,659 bars into 21 blocks of 79, newest first: a block's range is its highest high minus its lowest low, stretched to include the close of the bar just before it; the average range is the mean range of the newest 20 blocks; the volume ratio is the newest block's volume over the mean volume of the other 20. Check entries only on the 09:30 bar (the one ending at 09:35), once per stock per session, with no position and no order pending, so a stock sold or covered on that bar waits for the next session: buy if the return is above zero and the close is above the 20-block average; short if the return is below zero, the close is below that average and below every close 79, 158 and so on up to 1,580 bars back, and the volume ratio is at least 1.5. Let a width be the average range times the volume ratio divided by 1.5, kept between 1 and 1.5 times the average range. Set a fixed stop 2 widths from the close, below a long and above a short, and give a short a target 3 widths below the close and a time stop of 237 bars; skip the entry if that stop, or a short's target, would be zero or below. Apart from its stop and the data checks below, sell a long only on the 09:30 bar, when the return is zero or below or the close is at or below the 20-block average. Cover a short on any bar, the closing bar included, when the return is zero or above or the close is at or above that average. If a session's first bar is not the 09:30 bar, a five-minute window has no bar, the session ends at neither 16:00 nor 13:00, or a bar's open, high, low, close or volume is not positive or its high and low do not contain its open and close, exit anything held and trade no more that session; skip an entry if any of the last 1,659 bars fails that check, and exit anything held on any bar where a close 79, 158 and so on up to 1,659 bars back is not positive. Size each entry at 50% of equity in whole shares, with entry allocations limited to 50% per stock and 100% total gross, so no entry leaves a position above 50% of equity or long plus short value above 100%. Use a margin account so it can short. Backtest from October 10, 2024 to October 9, 2026 with $100,000.
Is it real?
- Versions tried
- 23 across the 12 strategies of the AI v7 to v15 series
- Discounted Sharpe
- −0.84: the raw 1.67 less the 2.51 the best of 23 tries would reach by luck
- Chance it beats luck
- 11.5% that its true Sharpe tops 2.51
- Beta to SPY
- 0.70
- Alpha vs SPY
- +63.1% a year
- Data
- 1-minute bars, 501 sessions
- Costs
- Alpaca's $0 commission, 0.05% slippage a side
Read this before you trust it
23 versions were tried across the 12 strategies of the AI v7 to v15 series, and their Sharpes ran from −2.76 to 1.67. The best of 23 tries with no real edge would be expected to reach about 2.51 by luck alone; this run's 1.67 falls 0.84 short of it, and the chance that its true Sharpe is above it is 11.5%. 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 24 stocks were picked in October 2026, with hindsight of how AI stocks had done. Putting 1/24 of equity into each on its first session in the test and holding to the end returned 201% in Orbital over the same two years, with a Sharpe of 1.36; that hold bought NBIS on October 22, 2024 and CRWV on March 31, 2025. This strategy could not trade NBIS until November 20, 2024 or CRWV until April 30, 2025, the first sessions with 1,659 bars of their own behind them. With room for only two full positions, 4,946 entry orders were turned away and 102 were cut to fit, so when more stocks qualified than there was room for, alphabetical order chose: AMD and ANET, first in the alphabet, closed the most trades, 14 each. Its 44 shorts lost $21,224 in all, and $49,655 of the $275,572 gain is in two longs, AMD and META, still open at the end and valued at the last close.