Published with figures from earlier studies on licence-restricted data redacted; the sha256 is of the unredacted file.

E1F: futures trend + carry on licensed per-contract data (SPEC, FROZEN 2026-10-25)

1. Hypothesis and mechanism

2. Expected net Sharpe (stated once) and power

Anchor: Carver's post-2013 Jumbo results. These are the latest out-of-sample-in-time figures for this exact rule family. Trend scores 0.79 and carry 0.56, net of spread and commission, since 2013 (AFTS Table 131, PDF pp. 491–492) [V]. 2013 is after MOP's publication (2012) and after Carver's EWMAC rules appeared in *Systematic Trading* (2015) [A: year from memory].

1. Breadth. Carver uses 100+ instruments chosen with hindsight; the universe here is at most MOP's list (§3), and at least the 13 minimum CME roots. His median single instrument earns 0.27 against 1.27 for the whole portfolio (Table 56, PDF p. 272; the 0.27 median is also Table 54's last column, PDF p. 270) [V]. So breadth carries most of the Sharpe, and a portfolio of 13 to 50 markets keeps roughly √(N_eff / 22) of it [I]. That is about 0.55 for N_eff ≈ 7 and 0.8 for N_eff ≈ 14 [I].

2. Parameters fitted in the span. The book was written in 2022–23, so its "since 2013" window is in-sample for Carver's choices of speeds, spans and scalars [I].

3. Costs. Ours are a flat per-contract cost. His are spread plus commission per instrument [I].

Power (fintech.claim.p_pass, one-sided p ≤ 0.05, SE 1/√T). All figures below were run on this branch [V]:

``` uv run --locked python -c "from fintech.claim import p_pass; print(p_pass(0.42, 15.5))" # 0.503

```

Span (years)8 (a 2018 split)13.514.615.516.5
P(PASS) at S = 0.420.3240.4600.4840.5030.524

3. Data, input schema and universe

Data. Daily data per individual outright contract, bought only under a recorded owner grant (fintech-wiki/decisions/2026-10-24-futures-data-REQUEST.md, "Data spec", and the quote draft fintech-wiki/research/2026-10-24-futures-quote-request.md). Fields needed: settlement price, open interest, and contract definitions (expiry, first notice, multiplier, tick value). OHLC and volume are stored but not used by the rule. For the forward record, a daily feed under the same licence is also needed (§11 Q2).

Input schema (strategy.py docstring; inputs() builds it):

Universe (fixed now, by name):

4. The rule (one primary, one reported variant; grid N = 2)

Both variants decide at each close from data up to that close. strategy.signals executes at the next close, the same lag as E1-prereg §5. The output is a target number of contracts per USD of equity on each root's held contract.

Roll and return chain (shared):

carver (PRIMARY, the verdict variant). This is AFTS strategy eleven with Carver's own defaults.

ParameterValueSource [V unless tagged]
Volatilityσ_price: EWMA std of daily price changes (price units), span 35, × √252 for annual. Carver's blend with a long-run average is left out [U: its weights were not read]AFTS PDF p. 204 ("span of 35 days"); price units, PDF pp. 240–241
Trend rulesEWMAC(16,64), (32,128), (64,256) on the back-adjusted price, divided by daily σ_priceAFTS PDF pp. 203–204; the faster speeds are dropped as too costly for expensive instruments (PDF p. 203, n. 120)
Trend scalars4.10, 2.79, 1.91AFTS Table 29, PDF p. 204
Carry rulesannualised carry ÷ annualised σ_price (both price units: an expected Sharpe ratio), EWMA-smoothed with spans 5, 20, 60, 120AFTS PDF pp. 240–241 (risk adjustment), p. 247 (spans)
Carry scalar30, the same for all four spansAFTS PDF p. 247
Forecast weights0.20 for each EWMAC, 0.10 for each carry span (60:40)AFTS Table 51, row "EWMAC16, 32, 64 / Carry5, 20, 60, 120", PDF p. 268
FDM1.29 (7 rules)AFTS Table 52, PDF p. 269
Cap±20 for each forecast and for the combined forecastAFTS PDF p. 248
Risk targetτ = 20 % a yearAFTS PDF p. 79
Instrument weightsequal risk across the classes present, equal within a class§3, MOP's groups [I: the user brief's "equal risk across asset classes"]
IDMby the number of eligible roots: 1.00, 1.20, 1.48, 1.56, 1.70, 1.90, 2.10, 2.20 (8–14), 2.30 (15–24), 2.40 (25–29), 2.50 (30+)AFTS Table 16, PDF p. 135
Positioncontracts per USD of equity = forecast/10 × τ × IDM × w_i / (σ_price,annual × multiplier × fx)AFTS strategy-three sizing [U: the page was not re-read]; FX as §3
Buffertrade only when the position leaves ±10 % of the forecast-10 position, and then only to the buffer edgeAFTS strategy eight [U: 10 % from memory]
Rebalancedaily, through the bufferAFTS

mop12 (reported, no decision role). This is MOP's diversified rule, eq. (5) [V, journal p. 236].

Why only two variants.

5. Costs (net of costs is the only scored series)

Ported from E1-prereg §6 [V, research/2026-10-14-e1-trend-carry/E1-prereg.md "6. Costs"]. Costs are charged per contract per side on the unrounded research book (strategy._run):

1. Commission and fees: $2.50 per contract per side, all in. It is converted to the contract's currency in contracts.parquet (§3) and back to USD at the day's fx.

2. Spread and slippage: 1 tick per side, at the contract's tick value. Daily data carry no quotes, so this is an assumption [A], not a measurement.

3. Roll cost: a roll is two trades, a sale of the old contract and a purchase of the new. Each pays items 1 and 2 (E1-prereg §6 item 3 [A: a conservative stand-in for a calendar spread]). _run charges it because both contracts' targets change.

4. Stress: all components × 2 (_run(x, w, 2.0)). The PASS rule (§7) needs the 2× mean > 0.

Reported, not gated: gross (k = 0) and 2× Sharpe; cost drag in Sharpe units, gross minus net, against E1-prereg's PF-3 speed limit of 0.13; 3× and the break-even cost multiple.

6. Tests on purchased history: the sealed split (proposed sealed.toml amendment)

The split.

Proposed amendment block. The orchestrator commits it to sealed.toml on main with the data grant and before the first pull. It is not edited here:

```toml [slice.futures_daily_post2010] source = "futures" # the licensed vendor, named in licences.toml at purchase (decision file of the grant) tables = "futures/daily" # partitions under data/sealed/tables/, listed by tables.open_slice start = 2010-06-01 rule = """Every per-contract daily row (open, high, low, close, settlement, volume, open interest) of every futures contract from the licensed futures vendor, dated from 2010-06-01 to the last session before family 39's forward start (SPEC research/2026-10-25-e1-futures-trend-carry/SPEC.md §8). The ingest writes these rows straight to data/sealed/tables/futures/daily/. It checks only schema, row counts and date coverage per contract, and computes or prints no price statistic. Rows from the forward start on are forward data. Rows before 2010-06-01 and the contract definitions (no prices) are tier 1.""" valid_for = """Futures price mechanisms (trend, carry, curve). Not valid for any mechanism tested on ETF or rate proxies of the same markets: families 1 and 6 saw 2005-2025 ETF analogues (E1-prereg F1; loop 01). Such a family must count their trials (joint_with). The period 2010-2025 is publicly known (it is post-publication, not blind)."""

```

Seen before (disclosed).

7. Tier-2 decision rule (fixed now)

The rule is applied to the carver trial's net daily returns from first_scored (the first session ≥ 2010-06-01 at which the book holds every class present, +2 sessions) to the slice end. Before any number is computed, the structural checks are run on dates and definitions only.

1. FAIL (structural, p = 1) if any of these holds:

2. PASS iff both hold:

3. KILL otherwise.

8. Forward record (starts the day data are available)

9. Counting

10. Registration and order of events

1. Commit this folder and tests/test_e1f_futures.py (the freeze commit). just check passes.

2. Merge to main. On a clean main the orchestrator appends the family event. The payload is in REGISTER.json (second commit: it holds this file's sha256 and the freeze commit, which cannot sit inside the file they hash). The command:

``` cd <main checkout> && git status --short # must print nothing uv run --locked python -c 'import json; from fintech import fingerprint, registry; e = json.load(open("research/2026-10-25-e1-futures-trend-carry/REGISTER.json")); assert fingerprint.sha256(e["spec"]) == e["spec_sha256"]; print(registry.append(e.pop("kind"), None, **e))'

`` The payload has this form: {"kind": "family", "family": 39, "joint_with": [1, 6], "name": "...", "spec": "research/2026-10-25-e1-futures-trend-carry/SPEC.md", "spec_commit": "<freeze commit>", "spec_sha256": "<sha256 of SPEC.md>", "spec_toml_sha256": "...", "strategy_sha256": "..."}`. If another branch takes 39 first, the number moves to the next free one, in a commit that changes only that number (as family 38 did).

3. Owner grant → data:

4. Structural checks (§7 item 1) from dates and definitions only, then tables.open_slice(39, "futures_daily_post2010", p_pass=claim.p_pass(0.42, <scored years>), spec_sha256=<SPEC sha256>).

5. python -m fintech.sweep run research/2026-10-25-e1-futures-trend-carry, then collect (2 trials, slice), then the §7 decision as a tier2 event from the same commit.

6. The forward_start event (§8), before the first month-end after arrival.

Nothing in steps 3–6 is authorised by this SPEC: each needs the owner's data grant first.

11. Open questions for the owner

1. Grant scope. Does the purchase include pre-2010 history (warm-up only here, no trial) and a daily feed? Without a feed there is no forward record.

2. Licence. Will the vendor allow derived results on delta.morphonomos.com? Decision 2026-10-25 item 7 allows numbers only for public data, our own captures or synthetic data. Until the vendor's terms allow display, this family shows its verdict and reason only.

3. Account size. The research book is unrounded. On $100k most bond and grain roots round to zero contracts (E1-prereg §7). An investable rounded book, with micros where they exist, is a later, separate decision.

4. Seen period. Is a PASS on 2010–26 (seen through proxies) worth one opening, given P(PASS) is only 0.50? The alternative is forward-only, with "slot": false, saving the opening for a book (iteration plan M5).

5. Unverified parameters. Carver's vol blend weights and his 10 % buffer were not read this session [U]. Both are frozen as written. Confirming them changes nothing unless they differ, and if they do, the frozen values still stand.

Sources

Revisions before registration

1. Carry and all signal arithmetic moved to Carver's price-unit form: arithmetic carry, σ in price units, a back-adjusted price, sizing in contracts with USD conversion, and P&L from contract counts. The draft's log and ratio of prices fail at zero or negative settlements. This changes the inputs (an fx column) and the signal arithmetic, not the published parameters.

2. A cost section (§5) was added and the cross-references fixed; the old §5–§10 are now §6–§11.

3. §2 now gives the span dates without pre-2010 data, the 0.35 pp margin over the gate, and the unsigned G3-B basis for dropping the base-rate shrink.

4. Citations: Jumbo results are Table 55 (PDF p. 271); the median vs Jumbo comparison is Table 56 (PDF p. 272); the 0.27 median also appears in Table 54 (PDF p. 270). Table 56 does exist: the review's "does not exist" was wrong.

5. FX: sizing now converts explicitly to USD (§3). The draft sized notional weights in USD on percent returns, which was currency-neutral too, but had no FX input to convert costs.