Momentum
One-minute bars are resampled to four-hour bars. Long entry requires two conditions at once: the fast EMA (30 resampled bars, five days) above the slow EMA (90, fifteen days), and the close at or above the 40-bar Donchian high — trend plus breakout, so neither signal fires alone. Short entry is the mirror: fast EMA below slow, close at or below the 40-bar Donchian low. Position size is capital · min(1, target_vol / realized_vol): when annualised realized volatility exceeds the 60% target, exposure shrinks proportionally.
Exit
Two exits, whichever comes first: price moving more than 4 × ATR(14) against the position — below the peak since entry for longs, above the trough for shorts (trailing stop) — or the fast EMA crossing back through the slow (trend gone). Both flatten the whole position.
Why the cadence changed
This strategy previously resampled to 15-minute bars with a 20 / 60 EMA pair and a 3 × ATR trail. At that cadence it re-evaluated 96 times a day and the EMA-cross exit whipped on every stretch of chop: over the 90-day window it took 116 / 111 / 122 fills on SOL / ETH / BTC and paid 19.66% / 18.49% / 20.32% of capital in fees and slippage. Gross of cost the signal lost 3.48% / 6.53% / 8.12%; net of it the curves lost 23.14% / 25.02% / 28.44%. Cost was not a drag on the result, it was the result. The 240-minute resample with a 30 / 90 pair and a 4 × ATR trail takes 2 fills on every market and pays 0.31% / 0.41% / 0.40% — fills down 58x / 55x / 61x, cost down 63x / 45x / 51x — for net returns of +1.78% / +5.11% / +0.30% on gross of +2.09% / +5.52% / +0.70%.
The cost reduction is mechanical and certain: fewer fills cost less, and that arithmetic holds in any window. The returns establish nothing at all. Two fills is one completed round trip per market in ninety days — a single trade a quarter — and three positive numbers drawn from one trade each are not statistically meaningful under any reading. A strategy trading once a quarter and holding through everything between is close to buy-and-hold with a stop attached. The new curves are evidence that the old ones were dominated by turnover, not evidence that the strategy makes money. Parameters were chosen for consistency across all three markets rather than the best result on any single one.
Venue
This strategy runs live on SOL-PERP, ETH-PERP and BTC-PERP at Phoenix perpetuals with a hard 2x leverage cap enforced in the risk gate. On BTC-PERP the venue's 0.0001 base lot is coarse against a $10 bot: an entry rounds up to about $13, and the rounding happens in the adapter after the risk gate has priced the order, so the cap does not catch it.
Indicator settings are identical on all three markets. target_vol is a desk-wide risk unit rather than a per-market tuning knob — one 0.60 target is what makes a $10 position on each market carry comparable risk. At the volatilities measured over the last ninety days SOL sizes to about 0.97 of its allocation and ETH and BTC to a full 1.0.
| Parameter | Default | Meaning |
|---|---|---|
| fast / slow | 30 / 90 | EMA spans on four-hour resampled closes. |
| breakout | 40 | Donchian-high lookback (resampled bars). |
| atr_period / atr_mult | 14 / 4.0 | Trailing stop: peak minus mult × ATR. |
| target_vol | 0.60 | Annualised volatility target for sizing. |
| resample_min | 240 | Resample interval in minutes. |
Backtest vs live
The momentum backtests differ from the live bots in two ways, both deliberate and neither the same kind of thing. Scale is the harmless one: $165 of initial cash against a $10 live allocation, so the published curve is not shaped by the lot-rounding a $10 book runs into. Direction is not harmless. The backtest configs are long-only, and as of 11 August 2026 so are the live bots — the short entry is switched off rather than left running past a gate that never covered it. Until that date the live bot took shorts the published curve did not.
That is a limit of the engine, not a choice about which strategy is interesting. The engine is long-only at the ledger — it clips a sell to the position on hand — so a short entry from a flat book fills nothing while the buy that closes it still transacts. Enabling allow_short in a backtest config does not model the short side; it produces phantom longs and a ledger that disagrees with the strategy's own position belief. A coherent long-only curve is worth more than an incoherent long/short one, so the configs stay long-only.
The cost of that decision belongs in the open. The short half of the momentum strategy has never been backtested, here or anywhere on this site, and no equity curve published for it tests that behaviour. Every bot on the desk is supposed to clear a backtest gate before it goes live; for this one the gate covered half the strategy while the live bot traded both halves. The one short the desk took — SOL-PERP, opened 9 August 2026 and closed for a $1.71 loss — ran on the uncovered half, and was the whole of the desk's drawdown at the time. Rather than keep trading a path no curve had tested, the three momentum bots were set to allow_short: false on 11 August 2026. Live and backtested now trade the same direction; the engine still cannot model the other one, so the gate is narrower rather than fixed. Perp funding payments are not yet itemized. Read the live numbers for the live strategy — the backtest is evidence about cost, not about direction.
Known failure modes
Chop is the tax: repeated entry-stop round trips bleed fees while the trend filter is technically satisfied. The four-hour resample makes those round trips rarer, not impossible. The volatility estimate shares the slow EMA's 90-bar span, so early in a session it is noisy and sizing can be too confident until the lookback fills. That session is now long: the strategy needs 92 four-hour groups before it evaluates at all — 15.3 days — and nothing seeds the buffer from stored candles, so a restarted bot is flat and blind for that whole stretch.