AQAI QuantAI research lab for systematic strategies

Automated analysis

This analysis was drafted by our research engine and has not been checked by a human editor. It may contain errors. It separates the paper’s own results from our tests, and any figures called ours come from our own backtest.

Our automated analysisOur backtest

Trend-following Sharpe rebuilt from realized autocorrelation

A closed-form identity fits 84 futures at 0.99 in sample, with implementation choices left to the builder.

2026-07-26 · 4 min read

Reviewing: Read it on arxiv

Our backtest of this idea

Our automated quick test, not the paper's

ETF Adapted Spectral EWMA Trend Following with Volatility-Normalized Returns

Backtest period 2015-01-01 to 2025-01-01 · hypothetical, net of modelled costs

Why these figures are not the paper's (1)

Our own audit found this run does not follow the paper faithfully (7)

  • deviation left undescribed by the audit (invalidates: Exact continuous European position-size results no longer apply to realized ETF trades; turnover and Sharpe formulas are span-selection diagnostics rather than exact realized-return identities)
  • deviation left undescribed by the audit (invalidates: Exact f_t = sigma_target/sqrt(a) * S_{t-1} z_t does not hold for sign-discretized long/cash ETF execution; paper's continuous-system Sharpe and skewness predictions become qualitative diagnostics for this implementation)
  • deviation left undescribed by the audit (invalidates: ARFIMA closed-form long-memory span-optimality is not used directly in this ETF implementation; long-memory predictions remain qualitative unless separately estimated)
  • Span-selection gate uses continuous-European-signal closed forms (eqs 5.12/5.13/4.16) while the strategy trades a sign-discretized long/cash position: Candidates are ranked and gated by require_positive_net_sharpe using the continuous-signal net Sharpe, but realized returns come from sign(S_t) long/cash execution, which the paper shows carries a sqrt(2/pi)~0.80 benchmark and a measured slope of 0.73. (invalidates: The paper's Section 7.3 pooled correlation 0.99 / slope 0.96 mapping of the closed-form net Sharpe to realized performance, and the eq 5.12/5.13 net-Sharpe rankings, do not describe the sign-discretized selection actually traded.)

3 further finding(s) are described in the note.

These are our findings about our own implementation, not criticisms of the paper. Read the figures below as a description of what we ran.

Jan 2015Total 8.4%Dec 2024
Sharpe
0.10
Total Return
8.4%
Max Drawdown
-30.4%
CAGR
0.8%
Volatility
8.1%
Trades
4,356

What the paper reports for its own strategy

  • European TF net-of-fee annualized Sharpe 0.47 (31 Dec 1999 to 30 Jun 2026, after 2%/20% fees and transaction costs)
  • American TF net-of-fee annualized Sharpe 0.50 (same period and cost/fee basis)
  • TSMOM net-of-fee annualized Sharpe 0.55 (same period and cost/fee basis)
  • In-sample European gross-backtest Sharpe ratios reproduced by closed form with pooled correlation 0.99, slope 0.96 (84 futures, spans 5-520 days, gross excess returns)
  • Realized European cross-sectional median gross Sharpe runs from 0.48 (short span) to 0.39 (long span), 4%-14% below total prediction

Sepp and Lucic give an exact accounting identity: the cumulative P&L of a standard EWMA trend system on volatility-normalized returns decomposes into a filter-weighted sum of sample autocorrelations plus a squared-drift term. From that they derive a closed-form Sharpe ratio, and on 84 liquid futures (earliest contract July 1959, grid 1997 to 2026) the sample autocorrelation function and drift reproduce the realized European Sharpe across spans of 5 to 520 days with a pooled correlation of 0.99 and a regression slope of 0.96. Read that as an attribution result, not a forecast. The authors say as much: the inputs are estimated on the same sample as the backtest, and they write that out-of-sample application is left for future work.

What is pinned down

The specification is unusually complete for a paper making a theoretical point. The EWMA volatility span is 33 days. The chosen long-short filter is LS(250,20), giving realized costs of 1.7%, which they call typical for a real CTA. The annualization factor is a=260. The kurtosis correction enters through a single loading, and they bound it: heavy tails with excess kurtosis 3 lower the pooled gross Sharpe by at most 0.009, and a 20bp cost lowers the long-short Sharpe by at most 0.02. The analytic Sharpe tracks their own Monte Carlo (1000 paths of 50 years) within 0.05 across white noise, AR-1 and ARFIMA. For ARFIMA d=0.1 the long-short gross Sharpe is 0.696 analytic against 0.670 simulated. You can rebuild these from the equations and check them against the numbers in Table 6.1, which is what a replication note wants.

The three-systems claim also holds up on their data. European, American and TSMOM are close variants once lookbacks and volatility scaling line up. They correlate with the SG Trend Index at 80% on average, and the European and American versions correlate at 95%. Net of 2/20 fees and costs they deliver Sharpe ratios of 0.47, 0.50 and 0.55 against 0.47 for the index over 2000 to 2026, with Ledoit-Wolf p-values of 0.96, 0.82 and 0.62. The authors are honest that failing to reject Sharpe equality is not evidence of equivalence, and that the index earns interest income they cannot strip out, which tilts the comparison toward the index.

Where you have to make a call

The turnover model is the first place an implementer is on their own. The closed-form net Sharpe charges cost against a signal-turnover proxy that is exact only for the signal increment under independent Gaussian returns. It omits the volatility-update component. Their own text says realized pipeline turnover exceeds the proxy by up to a factor of two at the 33-day volatility span, and by 1.6 to 2.3 for the long-short filter. So the proxy gives 393% per year for a single 250-day filter and 88% for LS(250,20), a genuine reduction because the two legs carry identical loading on the contemporaneous innovation and it cancels. But the net Sharpe you get in practice depends on how you model the turnover the proxy drops.

The cost threshold is the part that should worry anyone trading the fast end. For AR-1 with phi=0.05, the break-even proxy cost sits at 37bp to 41bp across all spans, below realistic costs of 40bp to 60bp. Their reading, which I agree with, is that short-memory first-lag momentum is not exploitable net of frictions on liquid futures. Profit comes from longer-memory autocorrelation, which is why slow spans survive under ARFIMA while AR-1 alpha is a knife-edge that scales as one over the square root of the span in both the signal and the cost drag. The universe-wide lag-1 autocorrelation of normalized returns fell from about 0.04 in the 1990s to about 0.01 after 2010, which pushes the viable region slower still.

Two more judgment calls. The 250/20 spans are picked off a grid, and the authors flag that a max-Sharpe grid choice overstates out-of-sample value. And forward use requires debiasing the squared drift, which carries an in-sample bias of a/T, about 0.17 at their six-year minimum sample.

Our build

We adapted the European system to 32 liquid US ETFs, long-or-cash, weekly rebalance, 2015 to 2025, selecting the filter span per instrument by positive debiased net Sharpe and sizing to a 15% instrument volatility target with a 10% cap. Our pass produced a weak result. Those figures are ours, and they do not line up with the paper's 0.47-versus-SG-0.47 result, for reasons that trace to our choices. We dropped the short leg, so we lose the symmetric convexity the paper leans on. Roughly half our names are equity ETFs, with eleven S&P sector slices collinear with SPY, against 21 of 84 equity contracts in the paper and far broader agriculture and FX. And 2015 to 2025 is one mostly-rising equity regime, not a 27-year multi-asset window. A weak result here says something about this ETF proxy and this decade first, before it says anything about the identity, which is arithmetic and does not depend on our universe.

The skewness claim is the cleanest thing to carry away, and it is easy to reproduce. Aggregated trend returns are positively skewed at every horizon beyond one day, peaking near half the filter span, and this holds exactly under zero-drift white noise where expected return is zero. Empirically the cross-sectional median skewness reaches 2.33 at a 55-day horizon against a closed-form 2.35. That convexity is structural and separate from any evidence of positive expected return. Treat the positive skew as a property of the filter, and treat the 0.99 fit as a decomposition you can trust in sample and must re-estimate, debiased, on rolling windows before you trade it forward.

How our backtest worked

The steps the code we ran actually executed, from its strategy card. Ours, not the paper's — it is one automated implementation of the idea, not the authors' own.

For each ETF and each trading day:
  Load close and dollar volume.
  Compute close-to-close return r_t = close_t / close_{t-1} - 1.
  Estimate daily volatility with EWMA span 33 on r_t^2.
  Form normalized return z_t = r_t / sigma_{t-1}; skip if sigma is missing or zero.

Candidate signals:
  Build variance-preserving EWMA filters for spans {5, 10, 21, 63, 125, 250, 500}.
  Build long-short EWMA filter LS(250, 20) using normalized loadings.

At each weekly rebalance close:
  For each ETF passing 63-day average dollar volume >= 25MM:
    Estimate filter diagnostics over the historical estimation window.
    Debias squared drift by subtracting a/T, floored at zero.
    Compute analytic gross/net Sharpe and turnover proxy for each candidate.
    Select the best candidate with positive estimated net Sharpe.
    If selected signal S_t > 0: target long exposure.
    If S_t <= 0 or no valid candidate: target cash.

Position sizing:
  raw_weight = 0.15 / (sqrt(260) * sigma_t)
  target_weight = min(raw_weight, 10%) for positive signals, else 0
  Do not scale active positions to a portfolio risk budget.
  Enforce overall leverage limit of 4.0.

Execution:
  Submit market-on-close ETF orders at the rebalance close using data available through that close.
  Missing execution prices or missing volume cause the symbol to be skipped.