DMA/FGI Portfolio Rules v2 — reference strategy
Specification of the reference strategy, version 2 — signals, the five rules in priority order, cooldowns, what changed from version 1, and how its backtest is computed.
Status
Strategy ID: dma_fgi_portfolio_rules
The strategy is evaluated once a day on Zap Pilot-hosted servers. Its output is an advisory target allocation and a decision packet; nothing executes because a rule fired.
Version 2. The spec is pinned by version and behavior hash, and every backtest and daily suggestion names the version that produced it (reference/dma_fgi@2#ffc3614028fb). You cannot hold a version fixed yet: the hosted service runs the current one Planned. Version 1 is kept for the record.
Philosophy
Buy in fear, defend in greed. The rules add risk when trend and sentiment say the market is cheap and scared, and trim it when the market is stretched and euphoric.
Aim
Improve risk-adjusted results versus DCA Classic. This is a design goal, not a promise.
Sleeves
The target allocation spans three sleeves:
| Sleeve | Asset | Today |
|---|---|---|
| Equities | S&P 500 | Modeled only; no adapter can execute it yet Planned |
| Crypto | BTC and ETH | Modeled by the strategy |
| Stablecoins | Stablecoins | Modeled by the strategy |
Deposits do not follow the strategy's target: the app's default mix is a fixed starting point, and its S&P 500 sector stays at 0%.
Signals
- 200-day moving averages for SPY, BTC and ETH: which side of its average each asset is on, when it crosses, and how far above it trades.
- Fear & Greed: the crypto Fear & Greed index for BTC and ETH, and CNN's US-equity Fear & Greed index for SPY.
- ETH/BTC: the ratio against its own 200-day average, for rotation inside the crypto sleeve.
Rules, in priority order
On each daily snapshot the strategy walks this list top-down. The first rule whose trigger conditions are met produces that day's target allocation; the rest are skipped. A same-day cross-down always wins over a same-day cross-up. Exact thresholds and weights are owned by the strategy spec, apps/analytics-engine/src/config/strategies/reference/dma_fgi.json, rather than duplicated here.
1. Cross-down exit
When a risk asset closes below its 200-day average, the strategy moves out of that asset — and its peers in the same risk class — into stablecoins, in full and immediately. Each asset's exit has its own cooldown, so one asset's exit never holds back another's. Version 1's form of this rule, with one cooldown for the whole rule, can be recomputed on-chain for a recorded exit.
2. Cross-up equal-weight
When one or more risk assets close back above the average, the strategy resets risk to an equal split across the assets above it that day.
3. ETH/BTC ratio rotation
When the ETH/BTC ratio crosses above its own 200-day average, BTC and stablecoins move into ETH; when it crosses below, ETH moves into BTC.
4. ETH/BTC deviation DCA
When ETH/BTC deviates far from its long-term mean, the strategy leans toward the relatively cheap side in small, fixed steps.
5. DMA overextension DCA sell
When a risk asset trades far above its 200-day average, the strategy trims a small slice into stablecoins on each eligible day. Greed lowers the bar, so the trims start sooner when sentiment is greedy.
When no rule fires, the strategy holds. That is the common case.
Cooldowns
- Cross cooldown. After an actionable cross, repeat cross actions are suppressed for 30 days (14 for the S&P 500 sleeve), tracked per asset. A rotation starts the same 30-day cooldown on the ETH/BTC ratio.
- Rule cooldowns. After a rule acts it cannot fire again for a fixed spacing: 30 days for each asset's exit and for cross-up, 7 days for the overextension sell, and 14 days for ETH/BTC deviation steps (60 for the largest tier). The ratio rotation has no cooldown of its own; the ratio's cross cooldown spaces it.
What changed from version 1
Version 2 removes and re-routes; it moves no threshold, step or cooldown length.
- No FGI downshift sell. Version 1's sixth rule trimmed risk when sentiment left greed. It is gone.
- Trims go to stablecoins only. Version 1 bought the S&P 500 sleeve with half of every trim, even when the S&P 500 was the asset being trimmed, which left a run of shrinking orders.
- One exit cooldown per asset. In version 1 one asset's exit started a 30-day cooldown for the whole rule, and another asset's cross-down inside it was dropped, not delayed.
- No cooldown on the ratio rotation. Its 30 days changed no decision on any history the review ran: the ratio's own cross cooldown is as long and starts with every rotation.
Because it moves no number, version 2 was promoted on the structural track: on recorded production data it could not trail version 1 by more than 2 points of ROI or 3 points of max drawdown, and over a fixed set of nine synthetic histories its median ROI and median drawdown could not be worse.
Backtest method
The published backtest is hypothetical. It is recomputed daily over a rolling 500-day window, starting from $10,000, and compared with DCA Classic over the same window.
- Fills. Signals are read from a day's closing prices, so a simulated trade is filled the next day at that day's prices. A trade decided on the last day of the window is never filled.
- Costs. Every simulated trade pays a fixed 0.3% slippage. There is no separate gas or protocol-fee model.
- Assumed yield. Stablecoins earn an assumed fixed 3% APR. BTC, ETH and the S&P 500 sleeve earn nothing. DCA Classic receives the same assumption.
- Risk-adjusted ratios. Sharpe and Sortino measure returns above that 3%, not above zero.
- S&P 500 sleeve. The backtest holds an S&P 500 sleeve that Zap Pilot cannot execute today.
- Trades. Trade counts are simulated trades, not executed ones.
Hypothetical results
Past performance does not guarantee future results. Backtest results depend on the assumptions above and on data that can be revised.
Status boundary
These rules are evaluated daily and validated by backtests. They are not a claim of executed trades, a live account, automatic rebalancing, or an operating fallback policy. The on-chain research slice Research implements version 1's cross-down exit, which keeps one cooldown for the whole rule. No slice of version 2's per-asset exit cooldown is deployed, and the other four rules cannot be recomputed on-chain.
Track Record
Daily backtests, the unsigned snapshot chain, and the on-chain rule check — and what each one does and does not prove.
DMA/FGI Portfolio Rules v1 — previous reference strategy
Specification of the reference strategy — signals, the six rules in priority order, guards, and how its backtest is computed.