# EA28 v1.01 public execution contract

EA28 v1.01 is a spot-FX implementation of a cross-sectional currency-momentum rule. It is a versioned execution variant of the **Cross-Sectional Currency Momentum** article, not a claim that every operational detail in that broader article is implemented, and not a profitability claim.

## What the EA does

The EA reads completed D1 bars from a synchronized eligible currency universe. It normalizes USD-base quotations by reciprocal, requires 300 common observations and at least six eligible currencies, ranks the 60-day normalized spot return, and takes the highest and lowest thirds. PFCommon and the daily risk path run only when a host tick arrives and those common D1 bars are available, so missing or unsynchronized common data can delay a daily loss check. It uses 60 daily log returns for volatility and covariance, builds inverse-volatility long and short tails, and limits the resulting portfolio by an 8% annualized-volatility target, 150% gross weight and 20% absolute single-currency weight.

A monthly decision creates a pending plan. It can execute only on the first common trading day, during London 08:00–16:00, converted from the broker's UTC+2/UTC+3 clock using historical DST rules. It uses current executable ask for buys and bid for sells. Sizing uses the symbol contract size, USD FX-notional convention, volume-step flooring, native margin calculation and a 90% equity/free-margin limit.

The implementation closes all its existing positions before opening a new monthly basket. It does not retain and resize selected positions across a rebalance.

## Required configuration and safety gates

The source defaults are deliberately non-trading: `PortfolioEnableDemoTrading=false` and `PortfolioDedicatedAccount=false`. The other defaults are `PortfolioSymbols=AUDUSD,USDCAD,USDCHF,EURUSD,GBPUSD,USDJPY,USDNOK,NZDUSD,USDSEK`, `PortfolioForwardFile=TFData\portfolio-forwards.csv`, `PortfolioForwardMaxAgeHours=72`, `PortfolioServerClock=2`, `PortfolioFixedServerUtcOffsetMinutes=120`, `PortfolioDeviationPoints=20`, and `PortfolioDiagnostics=true`. Outside Strategy Tester, initialization rejects execution unless all these conditions are satisfied: the dedicated-account setting is true, the account currency is USD, and the account is a demo account with demo trading explicitly enabled. Strategy Tester also requires the dedicated-account setting, USD account currency and server clock mode 2, although it bypasses the live-demo switch. It rejects any external position, a position with another magic/symbol, or any pending order. OnTick returns while such external exposure exists, before the normal liquidation and risk branches, so a genuinely separate account is essential rather than merely a setup preference.

The versioned production test used these execution inputs:

- Custom symbols: `AUDUSD.TFQ1, USDCAD.TFQ1, USDCHF.TFQ1, EURUSD.TFQ1, GBPUSD.TFQ1, USDJPY.TFQ1, USDNOK.TFQ1, NZDUSD.TFQ1, USDSEK.TFQ1`
- `PortfolioDedicatedAccount=true`
- `PortfolioEnableDemoTrading=false` in Strategy Tester only
- `PortfolioForwardFile=TFData\portfolio-forwards.csv`, `PortfolioForwardMaxAgeHours=72`
- `PortfolioServerClock=2`, `PortfolioFixedServerUtcOffsetMinutes=120`, `PortfolioDeviationPoints=20`, diagnostics enabled.

EA28 does not use the forward file for its ID28 momentum score, but the setting remains part of the configuration identity. The EA can use standard broker mappings or custom-symbol mappings; the `.TFQ1` mapping was specific to the controlled native test. In that test installation USDNOK.TFQ1 and USDSEK.TFQ1 were unavailable, so the executable proceeded with seven available majors because it requires at least six eligible symbols. A live or demo deployment must make its mapping explicit and must not substitute symbols silently.

## Loss, cash and failure behaviour

There is no per-position stop-loss or take-profit order. At the completed New York daily close, an open portfolio is marked with the last executable bid for a long or ask for a short in the preceding five minutes, plus booked swap. The reference `pf_month_nav` is set to equity immediately after a completed basket entry, rather than to a calendar-month opening balance. If that marked NAV is 6% or more below this stored post-entry baseline, the EA enters its cash/liquidation path. This is an exit trigger, not a guaranteed maximum loss: the market can gap, no executable quote can be available, and closing can occur worse than the threshold.

An initial preflight failure waits without entry while the London window remains open. Once the EA has entered the staged-entry transition, a stale or invalid quote, remaining-margin failure, or rejected or partial entry selects the cash path. An invalid NAV mark, storage fault or missed London entry deadline can also select cash without a new staged entry. The EA asks to close its own positions and remains in cash after successful liquidation. It does not create substitute fills, relax a minimum lot, or continue a partially filled basket.

## Article-variant differences

The public article's spot-rank, normalization, 300-common-day, R60, covariance and weight-cap rules are the core used by EA28. The v1.01 variant differs in these material ways:

- It trades mapped spot-FX symbols, using custom symbols in the controlled test. It does not hold or roll forward contracts, despite the broader article discussing forward-roll discipline.
- Its execution universe can be seven eligible majors rather than a fully traded nine-currency universe.
- It closes and reopens baskets monthly rather than adjusting surviving legs.
- It permits a fill anywhere in the London 08:00–16:00 first-common-day window, rather than promising an 08:00 fill.
- Its direct test used native bid/ask, native margin/profit calculations and booked swap. It did not add a research commission, delay or slippage overlay, and it did not validate historical funding representativeness.

## Exact-production test evidence and limits

The exact unmodified v1.01 EX5 was tested in MT5 Strategy Tester with Model 4 real ticks, EURUSD.TFQ1 D1 host, a USD 10,000 tester account, and the required custom mapping. The public evidence summary is `TEST-STATUS.json`, also available as https://trade-forex.info/wp-content/uploads/2026/09/TF-portfolio28-v101-test-status.json .

That run reconciled eight native entries: four April positions closed by the ordinary May monthly rebalance, and four May positions closed by the tester at the end of the requested interval. It recorded zero native commission and $1.87 booked native swap. Its native cash change was $64.02, composed of $62.15 price result and that swap. The four tester-end closes are test-window mechanics, not strategy exits, and none of these numbers establishes expected return or profitability.

The receipt proves this exact production binary compiled cleanly and completed a bounded native lifecycle/cash reconciliation on the stated data. It does not independently export or replay the 300 daily inputs, ranking, planned weights, request return codes, native magic, persistence under a real crash, historical funding, commission, slippage, or out-of-sample profitability.


## Earlier negative research results

The separate February 2024 and February–March 2024 pilots returned -28.37 USD and -14.49 USD, respectively, after the declared USD3.50 per lot per side research fee overlay and unverified native swap. These overlapping pilots differ from the direct production test and must not be combined. The monthly academic-family research already published in the article is a further distinct method. None establishes profitability of this EA.

## Complete input reference

| Input | Source default | Meaning |
|---|---|---|
| `PortfolioEnableDemoTrading` | `false` | Keep false for tester use; real accounts are rejected. A demo opt-in is not a recommendation. |
| `PortfolioDedicatedAccount` | `false` | Must be true for initialization, including Strategy Tester; requires exclusive ownership of the USD account. |
| `PortfolioSymbols` | `AUDUSD,USDCAD,USDCHF,EURUSD,GBPUSD,USDJPY,USDNOK,NZDUSD,USDSEK` | Exactly nine ordered mappings; suffixes accepted after each six-character FX pair; at least six require eligible synchronized history. |
| `PortfolioForwardFile` | `TFData\portfolio-forwards.csv` | Not read by strategy 28; part of the configuration identity. |
| `PortfolioForwardMaxAgeHours` | `72` | Must be positive; unused for ID28 ranking. |
| `PortfolioServerClock` | `2` | Required NY-close broker clock: UTC+2 winter, UTC+3 under the US DST schedule. |
| `PortfolioFixedServerUtcOffsetMinutes` | `120` | Fallback parameter passed to the clock; fixed clock mode is not accepted by this portfolio EA. |
| `PortfolioDeviationPoints` | `20` | Requested execution deviation in points, not pips or a guaranteed fill limit. |
| `PortfolioDiagnostics` | `true` | Print portfolio diagnostics to the tester/terminal log. |
