Skip to content
All strategies

Strategies

Faithful QuantConnect Seven-ETF Global Rotation

Outcome: Abandoned

FaithfulQuantConnectSevenEtfGlobalRotation

Outcome Summary

The strategy implemented a seven-ETF rotation based on one- and three-month performance. After three iterations, it still lacked minute bars for five required ETFs, so no backtest metrics were produced. It was abandoned for unavailable data before later review stages.

Hypothesis

QuantConnect's Apache-2.0 ETFGlobalRotationAlgorithm starts on 2007-01-01 with $25,000 cash and evaluates seven ETFs on minute data. Its growth and safety labels do not affect selection: the code ranks all seven together. On this platform, use the exact seven USEQ instruments, whole shares, the $100,000 backtest starting balance, and modeled spread and impact with zero commissions. The source's performance is unverified. A faithful backtest is currently blocked because five ETFs are absent from the configured USEQ collection universe and minute history begins in 2026.

The only code change replaces the banned market-calendar import with the allowed standard-library UTC timezone. USEQ session bars close on the same calendar date in UTC and New York, preserving the daily grouping. The original seven instruments, ranking, rotation, and whole-share sizing remain intact. A faithful historical backtest remains limited by missing ETF collection coverage and minute history beginning in 2026.

data_unavailable: backtest data for MDY.USEQ could not be collected after 5 retries: - bars (bar_type=MDY.USEQ-1-MINUTE-LAST-EXTERNAL): got 0, needed 500, or 3+ days span - bars (bar_type=IEV.USEQ-1-MINUTE-LAST-EXTERNAL): got 0, needed 500, or 3+ days span - bars (bar_type=ILF.USEQ-1-MINUTE-LAST-EXTERNAL): got 0, needed 500, or 3+ days span - bars (bar_type=EPP.USEQ-1-MINUTE-LAST-EXTERNAL): got 0, needed 500, or 3+ days span - bars (bar_type=EDV.USEQ-1-MINUTE-LAST-EXTERNAL): got 0, needed 500, or 3+ days span The data layer (not the strategy) is the blocker — re-evaluate this hypothesis once collection is fixed / the symbol is backfilled.

Implementation

Ranks seven USEQ ETFs by weighted 30-session and 90-session momentum every 30 calendar days, holds the highest scoring ETF when its score is positive, and otherwise holds cash.

Iteration History

Verification failed (Layer 1 — static analysis): - Import outside the sandbox allowlist: from zoneinfo — strategies may import __future__, abc, bisect, calendar, collections, copy, dataclasses, datetime, decimal, enum, fractions, functools, heapq, itertools, json, math, nautilus_trader, numpy, operator, re, src, statistics, string, typing (line 7)

Verification failed (Layer 1 — static analysis): - Banned import: src.data.market_calendar — strategies may only import the framework bases and helpers (src.strategies.base_template, src.strategies.rolling_options_template, src.strategies.polymarket_series_template, src.strategies.helpers); collectors, the database, the backtest engine and the registry are outside the sandbox. (line 10)

Outcome Summary

Backfill the missing ETF minute data before reevaluating this hypothesis.

The run was abandoned after five failed collection retries. MDY, IEV, ILF, EPP, and EDV each had zero required minute bars; later review stages were not reached.

It sought to rotate among seven USEQ ETFs using combined one- and three-month performance scores.

No backtest results or trade metrics are available because required minute bars could not be collected.

Analysis

ETFGlobalRotationAlgorithm

Backtest and paper results are hypothetical. Trading involves risk of loss.