Shock Engine research · shock-engine-2026.10.13
Shock Engine BTC/ETH Portfolio
BTC-calibrated strategy · applied unchanged to Ethereum
Executive summary
Ethereum parameters were inherited from Bitcoin and were not calibrated on ETH.
New positions are only opened in the calm volatility regime, and short entries only when the daily trend regime is bearish. Both conditions were set in October 2026 with knowledge of the historical data: the figures are in-sample, not an independent out-of-sample test.
Historical simulation after modeled transaction costs. Not live performance.
Every figure in this report. Frozen rules replayed on historical 15-minute bars, 2018-09-01 → 2026-09-30, with a commission of 0.045 % per order. No slippage, no funding and no market impact are modeled.
None in this report. No figure here comes from live trading, paper trading or a forward test. Forward results, when they exist, are to be reported separately, from the date the rules were frozen, and never blended with this simulation.
1Scope and method
Two sleeves run the same Shock Engine: the adaptive-volatility 15-minute preset (two parameter sets, calm and agitated, selected by a causal daily volatility regime), with full entry signals, except that new positions are only opened while the regime is calm (an open position keeps its exits if the regime changes) and a short entry after a shock is only allowed when the daily trend regime, computed causally on closed days, is bearish. The preset was selected on Bitcoin; Ethereum runs it unchanged (identical parameter hash c6ac30464bce14dd… for both sleeves).
| Sleeve | Data | Simulated from (after warm-up) | Validated reference | Trades in common period |
|---|---|---|---|---|
| BTC | BTC/USD, Bitstamp spot, 15 min | 2017-01-01 (warm-up from 2016-01-01) | shock-15m-zeroshot-btc-calm.json | 358 |
| ETH | ETH/USDT, Binance spot, 15 min | 2018-09-01 (warm-up from 2017-08-17) | shock-15m-zeroshot-ethusdt-calm.json | 358 |
Common period
Rule: first UTC day on which both strategies are simulated after warm-up (ETH simulation start) → last complete UTC day covered by both. Result: 2018-09-01 → 2026-09-30, 2,952 days (8.08 years). BTC, ETH and the portfolio are all measured on exactly these days.
Capital
Initial capital 100. At t0 the BTC sleeve receives 50 and the ETH sleeve 50. Each sleeve compounds only its own capital: it opens every position with 100 % of its own equity, one position at a time, without leverage. The portfolio value is the sum of the two sleeves:
VP(t) = 50 · EBTC(t) / EBTC(t0) + 50 · EETH(t) / EETH(t0)
where E is each strategy's equity as computed by the validated backtest. The engine sizes positions as a fraction of equity without lot rounding, so a sleeve of 50 behaves exactly like the strategy's own account rescaled. Neither sleeve ever uses the other's capital: when both are invested, gross notional exposure is about 100 % of the portfolio, not 200 %. Measured exposure: average gross 16.0%, maximum 103.6% (above 100 % only through price moves against open shorts and the entry commission).
Aggregation and conventions
- Daily returns: UTC close to close, using the equity of the last 15-minute bar of each day (bars are stamped at their open, so the 23:45 bar closes at midnight). No interpolation; both sleeves have a bar on every day of the common period.
- Portfolio return: (VBTC(t) + VETH(t)) / (VBTC(t−1) + VETH(t−1)) − 1, i.e. sleeve returns weighted by the previous close's drifting weights. Returns are never added across sleeves.
- Sharpe, Sortino and volatility: daily returns, √365.25 annualization (24/7 market), risk-free rate 0, population standard deviation. Validated reports quote a Sharpe on 15-minute returns; both conventions are reconciled in section 2.
- Costs: exactly the validated assumptions. Commission 0.045 % per order on every entry and exit fill. Slippage 0 (as in the validated BTC and ETH runs). No funding, no leverage.
- Official portfolio: A, 50/50 at t0, independent sleeves, no rebalancing, decided before any result. B (monthly rebalancing) is a diagnostic; C (equal risk) is exploratory.
2Reconciliation with the validated backtests
Before any portfolio calculation, the script replays both validated backtests with the same code path and checks that the full-period results match the stored reports. Any difference stops the run.
| Validated run (full history) | Total return | CAGR | Sharpe (15-min) | Max DD (15-min) | Trades | vs stored report |
|---|---|---|---|---|---|---|
| BTC · costs ×0 | 3967% | 46.2% | 1.75 | −24.8% | 396 | identical |
| BTC · costs ×1 | 2754% | 41.0% | 1.59 | −26.5% | 396 | identical |
| BTC · costs ×2 | 1903% | 36.0% | 1.43 | −28.1% | 396 | identical |
| ETH · costs ×0 | 15842% | 87.3% | 2.19 | −25.6% | 358 | identical |
| ETH · costs ×1 | 11490% | 80.0% | 2.05 | −26.7% | 358 | identical |
| ETH · costs ×2 | 8324% | 73.1% | 1.92 | −28.7% | 358 | identical |
The headline figures of the validated reports (BTC: Sharpe 1.59, CAGR 41.0%, max DD −26.5%, 396 trades; ETH: 2.05, 80.0%, −26.7%, 358 trades) use the full history of each asset and Sharpe ratios on 15-minute returns. The BTC history (2017-01-01 → 2026-10-04) is longer than the common period, and the daily convention used in this report gives slightly lower Sharpe ratios:
| Common period | Sharpe 15-min | Sharpe daily | Max DD 15-min | Max DD daily | CAGR | Trades |
|---|---|---|---|---|---|---|
| BTC | 1.55 | 1.46 | −26.5% | −24.8% | 39.6% | 358 |
| ETH | 2.05 | 1.93 | −26.7% | −24.1% | 80.0% | 358 |
| Portfolio 50/50 | 2.13 | 2.02 | −19.6% | −17.8% | 67.7% | 716 |
- ETH's validated run starts on the first common day and ends on the last one, so the ETH sleeve is the validated run itself.
- BTC: the validated run started in 2017. It held no position at the start of the common period, so the sleeve starts flat. As a check, a BTC run started on 2018-09-01 gives the same result (Sharpe 1.46, 358 trades; portfolio Sharpe 2.02).
- The 15-minute portfolio Sharpe uses a common 15-minute grid on which a missing bar carries the last known value (0.04% of BTC slots and 0.11% of ETH slots); it is shown for reconciliation only.
3Performance on the common period
| Metric | BTC | ETH | Portfolio 50/50 |
|---|---|---|---|
| Total return | 1381% | 11490% | 6436% |
| CAGR | 39.6% | 80.0% | 67.7% |
| Annualized volatility | 25.0% | 33.3% | 27.4% |
| Sharpe | 1.46 | 1.93 | 2.02 |
| Sortino | 3.23 | 4.62 | 4.73 |
| Max drawdown (daily closes) | −24.8% | −24.1% | −17.8% |
| Max drawdown (15-min marks) | −26.5% | −26.7% | −19.6% |
| Calmar (CAGR / max DD) | 1.60 | 3.31 | 3.79 |
| Skewness of daily returns | 4.25 | 4.09 | 3.65 |
| Downside deviation (annualized) | 11.3% | 13.9% | 11.7% |
| Profit factor (trades) | 1.93 | 2.73 | 2.59 |
| Profit factor (daily returns) | 1.63 | 1.82 | 1.79 |
| Exposure: time in market | 14.8% | 17.1% | 24.7% |
| Exposure: average gross notional | 14.4% | 16.4% | 16.0% |
| Turnover (one-way, per year) | 44× | 43× | 43× |
| Transaction costs (% of equity per year) | 4.0% | 3.9% | 3.9% |
| Number of trades | 358 | 358 | 716 |
| Winning trades | 106 (30%) | 117 (33%) | 223 (31%) |
| Average winner | 5.31% | 7.43% | 3.45% |
| Average loser | −1.03% | −1.35% | −0.62% |
| Payoff ratio | 5.18 | 5.52 | 5.58 |
| Best day | 18.5% 2019-04-02 | 19.9% 2018-09-05 | 16.2% 2026-08-19 |
| Worst day | −7.2% 2020-06-02 | −7.6% 2020-09-03 | −6.2% 2026-02-06 |
| Best month | 30.3% 2022-06 | 62.1% 2018-11 | 45.8% 2018-11 |
| Worst month | −8.8% 2022-02 | −15.2% 2022-02 | −13.9% 2022-02 |
| Best year | 105.2% 2024 | 224.3% 2018* | 120.3% 2018* |
| Worst year | 1.2% 2025 | −9.0% 2019 | 8.0% 2019 |
Sleeve trades: return = PnL / sleeve equity at entry (validated convention). Portfolio trades: the 716 sleeve trades pooled, each expressed as its contribution to portfolio equity at entry, so the average winner and loser are roughly half the sleeve figures. Both sleeves trade different instruments and never net against each other, so a sleeve trade is a well-defined portfolio trade. *2018 covers September–December and 2026 covers January–September.
Equity (log scale, 100 at 2018-09-01)
Drawdown from previous peak (daily closes)
Rolling 12-month Sharpe (365-day window)
| Rolling 12-month Sharpe | Windows | Median | Minimum | Share > 0 | Share > 1 |
|---|---|---|---|---|---|
| BTC | 2,588 | 1.40 | −0.26 | 99% | 79% |
| ETH | 2,588 | 1.80 | −0.34 | 99% | 86% |
| Portfolio 50/50 | 2,588 | 1.94 | 0.27 | 100% | 93% |
Sub-periods (diagnostic; the official period is unchanged)
| Period | BTC Sharpe | ETH Sharpe | Portfolio Sharpe | Portfolio CAGR | Portfolio max DD | BTC/ETH correlation |
|---|---|---|---|---|---|---|
| Full common period 2018-09-01 → 2026-09-30 | 1.46 | 1.93 | 2.02 | 67.7% | −17.8% | 0.36 |
| First half 2018-09-01 → 2022-09-15 | 1.39 | 2.05 | 2.12 | 78.7% | −17.8% | 0.31 |
| Second half 2022-09-16 → 2026-09-30 | 1.57 | 1.81 | 1.98 | 50.9% | −15.2% | 0.44 |
| From 2019 (without Sep–Dec 2018) 2019-01-01 → 2026-09-30 | 1.44 | 1.66 | 1.86 | 50.9% | −17.7% | 0.36 |
The portfolio Sharpe is lower in the second half than in the first (1.98 against 2.12): higher for BTC (1.57 against 1.39) and lower for ETH (1.81 against 2.05), while the correlation between the sleeves is higher (0.44 against 0.31).
4Rebalancing
| Variant | Sharpe | CAGR | Volatility | Max DD | Calmar | Rebalancing cost / yr | Rebalances | BTC weight at end |
|---|---|---|---|---|---|---|---|---|
| A · 50/50, no rebalancing (official) | 2.02 | 67.7% | 27.4% | −17.8% | 3.79 | 0.000% | 0 | 11% |
| B · 50/50, monthly rebalancing (diagnostic) | 2.08 | 61.3% | 24.3% | −17.4% | 3.52 | 0.002% | 97 | 50% |
| C · equal risk, 90-day vol, monthly (exploratory) | 2.00 | 56.0% | 23.6% | −20.4% | 2.74 | 0.013% | 97 | 64% |
A is the official portfolio and stays so whatever this table shows. B and C were defined before the results as mechanical diagnostics. They are not candidates to replace A after seeing them.
What rebalancing does here. Without rebalancing, the sleeve that compounds faster takes a growing share of the capital. ETH gained 224% between September and December 2018, so the BTC weight fell to 26% by the end of 2018. Over the period it ranged from 11% to 50%, with an average of 25%, and ended at 11%. Variant A was therefore on average an ETH-overweight portfolio, with less diversification than 50/50. Monthly rebalancing (B) puts the weights back to 50/50 at each month end. This has two effects. It keeps the mix closer to the diversified point (A held on average 75% in ETH). And it systematically sells the sleeve that has just outperformed to buy the other, which adds return when relative performance does not trend and costs return when it does. In this sample B had lower volatility (24.3% against 27.4%), a lower CAGR (61.3% against 67.7%) and a higher Sharpe (2.08 against 2.02). That is a property of this history, not a rule. Its cost is negligible: 0.002% a year, because only the part of each transfer that sits in an open position has to be traded.
C (exploratory / secondary): the BTC weight is proportional to 1/σBTC, with σ the volatility of daily sleeve returns over the 90 days ending at the rebalancing close (causal). Weights sum to 1, there is no leverage, and the allocation is 50/50 until 90 days of history exist. The BTC weight ranged from 8% to 82% (median 56%). Its Sharpe is 2.00, against 2.08 for B and 2.02 for A.
| A: BTC weight at year end | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 |
|---|---|---|---|---|---|---|---|---|---|
| BTC sleeve / portfolio | 26% | 38% | 29% | 25% | 19% | 24% | 28% | 16% | 11% |
5Transaction costs
| Series | Commissions / yr | Slippage / yr | Total cost / yr | Turnover one-way / yr | Turnover two-way / yr | CAGR lost to costs |
|---|---|---|---|---|---|---|
| BTC | 4.0% | 0.0% | 4.0% | 44× | 88× | 5.6% |
| ETH | 3.9% | 0.0% | 3.9% | 43× | 87× | 7.2% |
| Portfolio 50/50 | 3.9% | 0.0% | 3.9% | 43× | 87× | 6.8% |
Costs are in % of average equity per year. Turnover is traded notional per year divided by average equity: one-way counts entries only (the validated reports' convention), two-way counts entries and exits. CAGR lost to costs is CAGR at zero cost minus CAGR at modeled cost. Slippage is 0 in the validated BTC and ETH reference runs; it is not added here. The cost stress below is the way to read sensitivity to it.
Cost stress (nothing else changes: same signals, same rules)
| Costs | Commission / order | BTC Sharpe | ETH Sharpe | Portfolio Sharpe | Portfolio CAGR | Portfolio max DD | Portfolio costs / yr | B (monthly) Sharpe |
|---|---|---|---|---|---|---|---|---|
| ×0 | 0.000% | 1.62 | 2.05 | 2.17 | 74.5% | −17.2% | 0.0% | 2.25 |
| ×1 | 0.045% | 1.46 | 1.93 | 2.02 | 67.7% | −17.8% | 3.9% | 2.08 |
| ×2 | 0.090% | 1.29 | 1.80 | 1.88 | 61.2% | −19.7% | 7.8% | 1.92 |
Costs take about 7% of CAGR a year at ×1: the strategy turns its capital over about 43× a year. Doubling costs (0.09 % per order, which is equivalent to adding 0.045 % of slippage on every fill) lowers the portfolio Sharpe to 1.88. Execution quality is the first-order implementation risk.
6BTC/ETH correlation
| Measure (strategy returns) | Value | Observations |
|---|---|---|
| A. Pearson, daily | 0.358 | 2,952 days |
| B. Spearman, daily | 0.268 | 2,952 days |
| C. Pearson, weekly (complete ISO weeks) | 0.387 | 421 weeks |
| D. Pearson, monthly | 0.370 | 97 months |
| Pearson, daily, days when both sleeves were exposed | 0.542 | 423 days |
| For reference: BTC vs ETH spot (buy and hold), daily | 0.820 | 2,952 days |
| Rolling Pearson | Windows | Median | P10 | P90 | Min | Max |
|---|---|---|---|---|---|---|
| E. 30 days | 2,228 | 0.36 | −0.05 | 0.84 | −1.00 | 0.99 |
| F. 90 days | 2,741 | 0.35 | 0.02 | 0.66 | −1.00 | 0.90 |
| G. 252 days | 2,701 | 0.33 | 0.19 | 0.60 | 0.00 | 0.75 |
The two underlying markets are highly correlated (0.82). The two strategies are much less so (0.36): each is out of the market most of the time (BTC 15%, ETH 17% of the time in a position), and the correlation is diluted by days when only one of them is exposed. On days when both are exposed it rises to 0.54. Weekly correlation is higher than daily (0.39) and monthly higher (0.37, on only 97 points). The 30-day measure is noisy (P10 −0.05, P90 0.84). The 252-day correlation stayed between 0.00 and 0.75.
Rolling 90-day correlation of daily strategy returns
Daily strategy returns: BTC vs ETH
Each dot is one day. 1,860 days (63%) sit at the origin: neither sleeve held a position. Points beyond ±15 % are drawn on the edge of the frame. The line is the least-squares fit of ETH on BTC (slope 0.48).
The cloud is dominated by the axes: on most active days only one of the two sleeves moves (669 days with one sleeve only, 423 with both).
7Downside and crisis correlation
| Days used | Days | Pearson | Spearman | Constant-dependence benchmark, mean [5–95 %] | Reading |
|---|---|---|---|---|---|
| All days | 2,952 | 0.36 | 0.27 | — | |
| BTC strategy < 0 | 394 | 0.20 | 0.23 | 0.27 [0.16, 0.37] | within benchmark |
| ETH strategy < 0 | 418 | 0.29 | 0.20 | 0.26 [0.17, 0.36] | within benchmark |
| Both strategies < 0 | 153 | 0.56 | 0.52 | 0.20 [0.06, 0.36] | above benchmark |
| Portfolio < 0 | 591 | 0.04 | −0.30 | 0.06 [−0.03, 0.15] | within benchmark |
| Worst 10 % portfolio days | 296 | 0.11 | −0.08 | −0.00 [−0.13, 0.14] | within benchmark |
| Worst 5 % portfolio days | 148 | 0.21 | 0.00 | −0.07 [−0.24, 0.12] | above benchmark |
| Portfolio more than 10 % below its peak | 308 | 0.16 | 0.25 | — | |
| Decline phases of the 5 deepest portfolio drawdowns | 402 | 0.38 | 0.31 | — | |
| Market crash days (worst 5 % of BTC+ETH spot) | 148 | 0.53 | 0.59 | — | |
| Crypto bear market (BTC+ETH spot > 30 % below 1-year high) | 1,370 | 0.38 | 0.26 | — | |
| Named stress episodes (pooled) | 289 | 0.62 | 0.35 | — | |
| Non-stress days (no crash day, no bear market, no episode) | 1,459 | 0.32 | 0.28 | — | |
| Both sleeves exposed during the day | 423 | 0.54 | 0.57 | — |
Why a benchmark. Selecting days on returns changes a correlation mechanically, even when the dependence does not change (truncation bias). Keeping only days when BTC lost, for example, shrinks BTC's range and lowers the measured correlation. The benchmark applies the same selection to 400 simulated histories that keep each sleeve's actual daily returns (each simulated series is a permutation of the real one) and join them with a Gaussian copula calibrated to the full-sample correlation (copula parameter 0.56). A value inside the band is what constant dependence would produce; above it means losses are more joint than that. Selections on dates (drawdowns, spot stress) are not return-conditioned in the same way and are compared with the full-period 0.36 and the 90-day rolling range. "Portfolio < 0" uses the average portfolio weight for the benchmark; with actual weights the observed Pearson is 0.02. Market stress is defined only from spot prices: crash days are the worst 5 % of the equal-weight BTC+ETH spot return (≤ −5.6%), and the bear-market filter is the same index more than 30 % below its trailing 365-day high.
Joint losses
| Probability | Observed | Under independence | Constant-dependence benchmark [5–95 %] |
|---|---|---|---|
| P(ETH < 0 | BTC < 0) | 38.8% | 14.2% | 41.8% [38.3%, 45.4%] |
| P(ETH in its worst 10 % days | BTC in its worst 10 % days) | 33.4% | 10.0% | 36.1% [32.1%, 39.9%] |
| P(ETH in its worst 5 % days | BTC in its worst 5 % days) | 27.7% | 5.0% | 28.2% [23.0%, 33.1%] |
Named stress episodes (windows fixed from known market events; spot moves shown for reference)
| Episode | Window | Days | BTC spot | ETH spot | BTC strategy | ETH strategy | Portfolio | Daily Pearson |
|---|---|---|---|---|---|---|---|---|
| 2018 Q4 capitulation | 2018-11-08 → 2018-12-15 | 38 | −51.1% | −61.8% | +25.7% | +52.1% | +41.7% | 0.84 |
| COVID-19 crash | 2020-03-01 → 2020-03-31 | 31 | −24.7% | −38.9% | −0.8% | 0.0% | −0.3% | — |
| May–July 2021 sell-off | 2021-05-10 → 2021-07-20 | 72 | −48.9% | −54.5% | +1.9% | +11.6% | +9.0% | 0.02 |
| Terra/LUNA and 3AC | 2022-05-05 → 2022-06-30 | 57 | −49.8% | −63.6% | +50.4% | +25.2% | +30.2% | 0.65 |
| FTX collapse | 2022-11-06 → 2022-11-30 | 25 | −19.4% | −20.4% | −0.6% | +0.8% | +0.5% | 0.49 |
| August 2024 carry unwind | 2024-08-01 → 2024-08-10 | 10 | −5.7% | −19.3% | +4.4% | 0.0% | +1.2% | — |
| Oct–Nov 2025 deleveraging | 2025-10-06 → 2025-11-30 | 56 | −26.8% | −33.7% | +3.0% | +8.5% | +7.6% | 0.79 |
Reading. Correlation is higher in market stress than on non-stress days, within the range of 90-day rolling correlations. Non-stress days: 0.32. Spot crash days: 0.53. Bear-market days: 0.38. Named episodes pooled: 0.62 (full period 0.36, 90-day rolling range 0.02–0.66 between P10 and P90). The portfolio's own drawdowns: decline phases 0.38, more than 10 % under water 0.16. Losses are not more frequent together than constant dependence implies: P(ETH < 0 | BTC < 0) is 39% against 42% for the benchmark. On the 153 days when both sleeves lost, the size of their losses is more aligned than the benchmark (0.56 against 0.20); some losing trades are the same shock traded on both markets and stopped out together (section 8). Over the 7 named episodes, the portfolio was positive in 6. In the portfolio's deepest drawdown (2022-01-22 → 2022-03-03, section 11), BTC moved −17.4% and ETH −18.0%.
8Trade overlap
| Window | ETH trades with a same-direction BTC entry | chance level | BTC trades with a same-direction ETH entry | chance level | ETH trades with an opposite BTC entry |
|---|---|---|---|---|---|
| ±15 min | 23.5% | 0.1% | 23.5% | 0.1% | 0.0% |
| ±1 h | 25.4% | 0.5% | 25.4% | 0.5% | 0.0% |
| ±2 h | 27.9% | 1.0% | 27.9% | 1.1% | 0.3% |
| ±4 h | 31.8% | 2.1% | 32.1% | 2.2% | 1.7% |
| ±8 h | 33.2% | 4.1% | 34.1% | 4.2% | 2.2% |
Entry times are bar closes (UTC). "±15 min" means the two entries are on the same bar or adjacent bars. Chance level: the same measure after shifting the other sleeve's entries by a random offset (200 circular shifts of 30 days or more), which keeps each sleeve's clustering and removes any timing link.
| Share of time (15-min slots) | Value |
|---|---|
| No position | 75.3% |
| BTC only | 7.5% |
| ETH only | 9.8% |
| BTC and ETH | 7.3% |
| · both long (LONG/LONG) | 4.5% |
| · both short (SHORT/SHORT) | 2.7% |
| · BTC long, ETH short | 0.0% |
| · BTC short, ETH long | 0.1% |
| Trade-level overlap in time | Share |
|---|---|
| ETH trades that overlap a BTC position in the same direction | 51.4% |
| ETH trades that overlap a BTC position in the opposite direction | 2.8% |
| BTC trades that overlap an ETH position in the same direction | 52.5% |
| BTC trades that overlap an ETH position in the opposite direction | 3.1% |
| ETH long trades overlapping a BTC long (LONG/LONG) | 48.8% |
| ETH short trades overlapping a BTC short (SHORT/SHORT) | 57.0% |
23% of ETH entries occur within 15 minutes of a same-direction BTC entry, against 0.1% by chance: the same market-wide shock often triggers both sleeves. 67% of ETH entries have no same-direction BTC entry even within ±8 hours. The two sleeves almost never take opposite sides at the same time (0.1% of the time). Most of the time at most one of them is exposed: 17% one sleeve only, 7% both.
9Risk contribution
| Sleeve | Capital weight | Volatility (ann.) | Marginal risk contribution | Component risk contribution | Share of portfolio variance |
|---|---|---|---|---|---|
| 50/50: BTC | 50.0% | 25.0% | 0.191 | 0.095 | 39.6% |
| 50/50: ETH | 50.0% | 33.3% | 0.291 | 0.146 | 60.4% |
| A average weights: BTC | 25.3% | 25.0% | 0.137 | 0.035 | 12.5% |
| A average weights: ETH | 74.7% | 33.3% | 0.325 | 0.243 | 87.5% |
σP = √(w′Σw) from daily returns, annualized (24.1% at 50/50). Marginal contribution = (Σw)i / σP; component = wi × marginal; the components sum to σP and their shares sum to 100 %.
50/50 in capital is not 50/50 in risk. ETH is the more volatile sleeve (ETH 33%, BTC 25%); ETH carries 60% of the variance at 50/50 and BTC 40%. With the realized average weights of variant A (BTC 25%), the split becomes 12% / 88%.
| Year | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 |
|---|---|---|---|---|---|---|---|---|---|
| BTC share of variance at 50/50 | 22% | 58% | 40% | 33% | 41% | 51% | 57% | 25% | 38% |
| BTC/ETH correlation | 0.39 | 0.27 | 0.27 | 0.34 | 0.41 | 0.23 | 0.48 | 0.45 | 0.72 |
10Diversification
| Measure | Value | Reading |
|---|---|---|
| Sharpe portfolio / max(Sharpe BTC, Sharpe ETH) | 1.050 | +5.0% vs the better sleeve |
| Sharpe portfolio / Sharpe BTC | 1.390 | +39.0% |
| Sharpe portfolio / Sharpe ETH | 1.050 | +5.0% |
| Theoretical ratio for two equal-Sharpe, equal-vol sleeves at ρ = 0.36 | 1.214 | √(2 / (1 + ρ)) |
| Max DD portfolio / max DD BTC | 0.721 | −17.8% vs −24.8% |
| Max DD portfolio / max DD ETH | 0.739 | −17.8% vs −24.1% |
| Volatility portfolio / weighted sleeve volatility | 0.939 | volatility reduction 6.1% |
| Volatility portfolio / BTC, / ETH | 1.095 · 0.822 | 27.4% vs 25.0% and 33.3% |
| Diversification ratio DR = w′σ / √(w′Σw) | 1.208 | 1 = no diversification; √2 ≈ 1.414 = two independent equal-vol sleeves |
| Effective number of independent bets, DR² | 1.46 | out of 2 (Choueifaty) |
| Effective number of bets, principal components | 1.21 | out of 2 (entropy of principal-component risk shares, Meucci) |
The portfolio is better than each sleeve on Sharpe, Calmar and maximum drawdown: Sharpe 2.02 against 1.46 (BTC) and 1.93 (ETH); Calmar 3.79 against 1.60 and 3.31; maximum drawdown −17.8% against −24.8% and −24.1%. The gain over the better sleeve (+5%) is below the textbook +21% for two identical sleeves at this correlation; the sleeves do not have equal Sharpe or volatility and A drifts away from 50/50. The DR of 1.21 amounts to 1.46 independent bets out of a possible 2; the principal-component measure is 1.21. ETH adds a partial second stream, not an independent one.
11Drawdowns
Underwater curves are in section 3. Episodes run from a peak to the next new high, on daily closes. A drawdown that had not recovered by 2026-09-30 is marked as such, and its duration runs to that date.
Portfolio 50/50
| # | Start (peak) | Trough | Recovery | Depth | Duration (days) | Recovery (days) | BTC over peak → trough | ETH over peak → trough |
|---|---|---|---|---|---|---|---|---|
| 1 | 2022-01-22 | 2022-03-03 | 2022-06-12 | −17.8% | 141 | 101 | −17.4% | −18.0% |
| 2 | 2019-09-18 | 2020-01-11 | 2020-02-12 | −17.8% | 147 | 32 | −4.2% | −24.1% |
| 3 | 2026-02-05 | 2026-05-31 | 2026-08-19 | −14.3% | 195 | 80 | −13.0% | −14.5% |
| 4 | 2022-07-18 | 2022-10-21 | 2023-01-11 | −13.1% | 177 | 82 | +1.9% | −16.2% |
| 5 | 2020-09-01 | 2020-10-08 | 2021-03-29 | −12.8% | 209 | 172 | −3.4% | −16.5% |
| 6 | 2024-11-11 | 2025-02-17 | 2025-02-28 | −11.7% | 109 | 11 | −10.6% | −12.1% |
| 7 | 2021-10-20 | 2021-12-27 | 2022-01-12 | −11.1% | 84 | 16 | +5.7% | −15.6% |
| 8 | 2020-08-01 | 2020-08-07 | 2020-09-01 | −9.8% | 31 | 25 | −8.2% | −10.5% |
| 9 | 2019-02-10 | 2019-05-07 | 2019-05-15 | −9.7% | 94 | 8 | +10.6% | −17.5% |
| 10 | 2025-08-13 | 2025-09-30 | 2025-10-06 | −8.2% | 54 | 6 | −6.5% | −8.6% |
BTC
| # | Start (peak) | Trough | Recovery | Depth | Duration (days) | Recovery (days) | ETH over peak → trough | Portfolio over peak → trough |
|---|---|---|---|---|---|---|---|---|
| 1 | 2026-02-05 | 2026-08-09 | not recovered | −24.8% | 237 | — | −8.7% | −11.0% |
| 2 | 2022-01-22 | 2022-05-05 | 2022-06-10 | −19.9% | 139 | 36 | −11.2% | −13.1% |
| 3 | 2024-11-11 | 2025-02-27 | 2025-11-04 | −12.7% | 358 | 250 | +1.7% | −2.3% |
| 4 | 2022-07-12 | 2022-07-18 | 2023-01-12 | −12.2% | 184 | 178 | +24.6% | +16.4% |
| 5 | 2023-04-11 | 2023-05-18 | 2023-06-21 | −12.1% | 71 | 34 | +2.1% | −1.7% |
| 6 | 2019-11-24 | 2020-03-07 | 2020-06-01 | −10.6% | 190 | 86 | +13.9% | +5.1% |
| 7 | 2019-09-08 | 2019-11-18 | 2019-11-24 | −10.4% | 77 | 6 | −8.9% | −9.4% |
| 8 | 2020-10-27 | 2021-04-10 | 2021-07-26 | −10.2% | 272 | 107 | +25.5% | +13.9% |
| 9 | 2020-06-01 | 2020-07-14 | 2020-07-27 | −9.0% | 56 | 13 | −4.9% | −6.2% |
| 10 | 2019-02-23 | 2019-03-05 | 2019-04-02 | −8.3% | 38 | 28 | −4.5% | −5.7% |
ETH
| # | Start (peak) | Trough | Recovery | Depth | Duration (days) | Recovery (days) | BTC over peak → trough | Portfolio over peak → trough |
|---|---|---|---|---|---|---|---|---|
| 1 | 2019-09-18 | 2020-01-11 | 2020-02-09 | −24.1% | 144 | 29 | −4.2% | −17.8% |
| 2 | 2022-01-22 | 2022-02-28 | 2022-06-12 | −18.0% | 141 | 104 | −16.0% | −17.6% |
| 3 | 2019-02-10 | 2019-05-07 | 2019-08-09 | −17.5% | 180 | 94 | +10.6% | −9.7% |
| 4 | 2020-09-01 | 2020-10-19 | 2021-03-29 | −16.9% | 209 | 161 | −1.4% | −12.6% |
| 5 | 2022-07-18 | 2022-10-24 | 2023-01-14 | −16.2% | 180 | 82 | +2.2% | −13.1% |
| 6 | 2021-10-20 | 2021-12-23 | 2022-01-20 | −15.6% | 92 | 28 | +7.1% | −10.8% |
| 7 | 2026-02-05 | 2026-05-31 | 2026-06-05 | −14.5% | 120 | 5 | −13.0% | −14.3% |
| 8 | 2024-11-11 | 2025-02-13 | 2025-02-26 | −12.1% | 107 | 13 | −9.2% | −11.2% |
| 9 | 2026-06-06 | 2026-07-23 | 2026-08-19 | −11.4% | 74 | 27 | −10.8% | −11.3% |
| 10 | 2020-08-01 | 2020-08-05 | 2020-09-01 | −10.5% | 31 | 27 | −5.2% | −9.0% |
Does one sleeve help when the other is in drawdown?
| Drawdowns considered | Count | Other sleeve positive | Other sleeve, mean return | Own mean depth | Portfolio, mean return |
|---|---|---|---|---|---|
| 10 largest BTC drawdowns: ETH | 10 | 50% | +2.9% | −13.0% | −1.4% |
| 10 largest ETH drawdowns: BTC | 10 | 30% | −4.0% | −15.7% | −12.7% |
| BTC drawdowns deeper than 15 %: ETH | 2 | 0% | −10.0% | −22.3% | −12.0% |
| ETH drawdowns deeper than 15 %: BTC | 6 | 50% | −0.3% | −18.0% | −13.6% |
During the 10 largest drawdowns of one sleeve, the other one was positive in 50% (ETH during BTC drawdowns) and 30% (BTC during ETH drawdowns) of cases. Over these windows the portfolio lost 11% of the BTC drawdown and 81% of the ETH drawdown. The largest ETH drawdown (−24.1%, 2019-09-18 → 2020-01-11) coincided with a −4.2% BTC move, and the portfolio lost 17.8%. Portfolio drawdowns are, almost by construction, periods when both sleeves lose: in 7 of the portfolio's 10 largest drawdowns both sleeves fell over the decline. The deepest (−17.8% from 2022-01-22) combined BTC −17.4% and ETH −18.0%.
12Years and months
| Year | Days | BTC return | ETH return | Portfolio return | BTC Sharpe | ETH Sharpe | Portfolio Sharpe | Portfolio max DD | B (monthly) return |
|---|---|---|---|---|---|---|---|---|---|
| 2018* | 122 | +16.2% | +224.3% | +120.3% | 1.71 | 5.42 | 5.22 | −6.4% | +102.4% |
| 2019 | 365 | +55.5% | −9.0% | +8.0% | 1.52 | −0.23 | 0.45 | −14.3% | +20.6% |
| 2020 | 366 | +21.2% | +77.5% | +56.1% | 0.87 | 1.86 | 1.82 | −12.8% | +48.5% |
| 2021 | 365 | +28.3% | +60.4% | +50.9% | 1.42 | 1.71 | 1.80 | −11.1% | +44.4% |
| 2022 | 365 | +40.1% | +94.5% | +80.9% | 1.31 | 1.98 | 2.00 | −17.8% | +69.0% |
| 2023 | 365 | +59.3% | +22.3% | +29.5% | 1.98 | 0.94 | 1.35 | −7.1% | +41.4% |
| 2024 | 366 | +105.2% | +66.3% | +75.6% | 3.03 | 2.67 | 3.13 | −4.7% | +85.4% |
| 2025 | 365 | +1.2% | +112.7% | +81.6% | 0.15 | 2.38 | 2.24 | −8.6% | +49.4% |
| 2026* | 273 | +13.8% | +63.9% | +56.1% | 0.86 | 2.02 | 1.95 | −14.3% | +37.3% |
*Partial years: 2018-09-01 → 2018-12-31 and 2026-01-01 → 2026-09-30. Yearly Sharpe ratios use the days of that year only. Max DD is measured within the year, from its first day.
Annual returns
Portfolio monthly returns (%)
Blue: gain; red: loss; color intensity in steps of 4 % (capped at 20 %). Values in %. The "Year" column is the calendar-year return (partial in 2018 and 2026).
13Distribution and concentration
Distribution of daily returns (days with a non-zero return)
Bins of 0.5 %; returns beyond −10 % or +15 % are counted in the end bins. Heights are shares of the non-zero days of each series.
Concentration of results
| Unit | Count | Top 1 % share | Top 5 % share | Top 10 % share | CAGR | CAGR without top 5 % | Skew |
|---|---|---|---|---|---|---|---|
| Portfolio · trades | 716 | 36% | 99% | 135% | 67.7% | −0.3% | 4.42 |
| BTC · trades | 358 | 34% | 108% | 154% | 39.6% | −2.7% | 3.22 |
| ETH · trades | 358 | 27% | 83% | 118% | 80.0% | 10.8% | 3.28 |
| Portfolio · days | 2,952 | 63% | 171% | 221% | 67.7% | −30.6% | 3.36 |
| BTC · days | 2,952 | 94% | 231% | 275% | 39.6% | −35.5% | 3.84 |
| ETH · days | 2,952 | 69% | 180% | 230% | 80.0% | −37.6% | 3.70 |
Definition. A portfolio trade is one sleeve trade, since the sleeves trade different instruments and never net, measured as log(1 + PnL / portfolio equity at entry). Daily: log(1 + daily return). Share = sum of the top k values / sum of all values, which is the total log growth; above 100 % means the remaining trades or days lose in aggregate. "CAGR without top 5 %" removes those log contributions from the realized growth. Overlapping positions make trade contributions approximately, not exactly, additive, so the day-based figures are given as a check. In currency (not log) terms, the top 5 % of portfolio trades carry 124% of the PnL (later trades weigh more there because equity compounds).
The edge sits in the right tail. The best 5 % of trades (36 out of 716) account for 99% of the portfolio's log growth. Without them, the CAGR would be −0%. This is the profile of a strategy with many small losses (69% of trades lose) and a few large winners (payoff 5.58). The top 5 % share is 108% for BTC and 83% for ETH. A period without large winning trades will be a losing period for the portfolio.
14Bootstrap
Block bootstrap by calendar month: 5,000 replications, each a history of 97 months drawn with replacement from the 97 months of the common period (seed 20261008). The same months are drawn for BTC and ETH, so their dependence within each month is preserved. Each replication replays variant A (50/50, no rebalancing) on the drawn path.
| Statistic | Historical | Bootstrap median | 90 % interval | 95 % interval |
|---|---|---|---|---|
| Portfolio Sharpe | 2.02 | 2.03 | 1.53 to 2.51 | 1.44 to 2.60 |
| Portfolio CAGR | 67.7% | 67.8% | 40.1% to 107.1% | 36.8% to 116.5% |
| Portfolio max drawdown | −17.8% | −19.7% | −30.6% to −13.7% | −33.6% to −12.8% |
| BTC Sharpe (same draws) | 1.46 | 1.44 | 0.99 to 1.91 | 0.89 to 2.00 |
| ETH Sharpe (same draws) | 1.93 | 1.92 | 1.38 to 2.42 | 1.27 to 2.53 |
| Probability (share of replications) | Value |
|---|---|
| P(Sharpe portfolio > 0) | 100.0% |
| P(Sharpe portfolio > 1) | 100.0% |
| P(Sharpe portfolio > Sharpe BTC) | 100.0% |
| P(Sharpe portfolio > Sharpe ETH) | 87.5% |
| P(Sharpe portfolio > both) | 87.5% |
| P(max DD portfolio smaller than BTC) | 49.8% |
| P(max DD portfolio smaller than ETH) | 99.2% |
Limits: the bootstrap resamples history; it is not a forecast. Monthly blocks keep dependence within a month but break longer episodes, so the drawdown interval understates multi-month losing streaks. It cannot represent a regime that never occurred in 2018–2026, and the strategy parameters are held fixed (no selection uncertainty is added).
15Capacity and implementation proxies
| Proxy | BTC | ETH | Portfolio |
|---|---|---|---|
| Trades per year | 44 | 44 | 89 |
| Turnover per year, one-way (entries) | 44× | 43× | 43× |
| Turnover per year, two-way (entries + exits) | 88× | 87× | 87× |
| Holding time, mean | 29.4 h | 33.9 h | 31.6 h |
| Holding time, median | 11.5 h | 14.9 h | 13.0 h |
| Time in market | 14.8% | 17.1% | 24.7% (any sleeve) |
| Simultaneous positions (share of time) | — | — | 7.3% |
| Average gross exposure | 14.4% | 16.4% | 16.0% |
| Average net exposure | — | — | 4.9% |
| Maximum gross exposure | 103.7% | 106.3% | 103.6% |
Execution costs are measured in a separate study. This simulation fills at the 15-minute close or at the stop level, without slippage, about 89 round trips a year across the two markets. Every execution since 2020 was replayed on real Binance perpetual-futures trades to measure what an order of the portfolio’s size would have paid, and how much capital the strategy can carry (institutional dossier). Capacity on Hyperliquid, the intended venue, and the strategy’s own market impact are not yet measured.
16Research evidence
Results already established by earlier, separate studies. They are not re-run here; the figures are read from the stored reports. Sharpe ratios in these tables use the 15-minute convention of those reports, over each asset's full test period.
| Asset | Data | Period | Sharpe | CAGR | Max DD | Trades | Event study: shock → continuation | Random entries beaten | +1 bar delay: share of edge kept | Status |
|---|---|---|---|---|---|---|---|---|---|---|
| BTC | BTC/USD · Bitstamp | 2017-01-01 → 2026-10-04 | 1.59 | 41.0% | −26.5% | 396 | yes | 100% | 97% | calibration asset |
| ETH | ETH/USDT · Binance | 2018-09-01 → 2026-09-30 | 2.05 | 80.0% | −26.7% | 358 | yes | 100% | 94% | zero-shot transfer |
| ETH (replication) | ETH/USD · Dukascopy | 2019-01-01 → 2026-09-30 | 1.82 | 57.5% | −23.6% | 206 | yes | 100% | 73% | independent data source · zero-shot transfer |
| Gold | XAU/USD spot · Dukascopy | 2013-01-01 → 2026-09-30 | 0.39 | 1.8% | −11.8% | 319 | no | 100% | 115% | partial transfer |
| SOL | SOL/USDT · Binance | 2021-09-01 → 2026-09-30 | 0.57 | 16.0% | −54.0% | 251 | yes | 93% | 80% | partial transfer |
| TAO | TAO/USDT · Binance | 2024-08-15 → 2026-09-30 | 0.01 | −7.3% | −39.2% | 95 | no | 55% | n/m | failed |
Random entries: 200 placebo runs with the same exits, the same regime and the same number of trades, entries drawn at random. +1 bar delay: average trade gain when every entry is taken one 15-minute bar late, as a share of the on-time gain (n/m: not meaningful when the on-time gain is negative).
Local parameter robustness (all preset parameters perturbed jointly, 300 neighbors per level)
| Asset · perturbation | Preset Sharpe | Neighbor median | Neighbor P10 – P90 | Preset beats | Neighbors keeping ≥ 80 % of the preset Sharpe | Neighbors profitable |
|---|---|---|---|---|---|---|
| BTC · ±5 % | 1.59 | 1.49 | 1.42 – 1.58 | 92% | 100% | 100% |
| BTC · ±10 % | 1.59 | 1.42 | 1.32 – 1.52 | 99% | 97% | 100% |
| BTC · ±20 % | 1.59 | 1.35 | 1.23 – 1.47 | 100% | 83% | 100% |
| ETH · ±5 % | 2.05 | 2.05 | 1.91 – 2.19 | 55% | 100% | 100% |
| ETH · ±10 % | 2.05 | 2.03 | 1.81 – 2.21 | 55% | 100% | 100% |
| ETH · ±20 % | 2.05 | 1.94 | 1.76 – 2.14 | 76% | 99% | 100% |
- BTC. The event study shows continuation after shocks in the direction of the 60-minute trend. The strategy beats 100% of the random-entry placebos, and entering one bar late keeps 97% of the average trade gain. Walk-forward test (36 months of calibration, 3-month tests, plateau selection, 28 windows, 2020-01-01 → 2026-10-04): out-of-sample Sharpe 0.83 (15-min), CAGR 14.3 %, max DD −27.6 %. With longer windows (12 pre-registered designs: calibration of 36, 48 or 60 months or an expanding window, tests of 3, 6 or 12 months, same test period), the out-of-sample Sharpe has a median of 0.97 (range 0.83 to 1.36), every design below the fixed preset (1.55): window length does not explain the gap. In the robustness test the preset ranks above 92% to 100% of its neighbors, at the top of its neighborhood, which is consistent with having been selected on this data; 100% of neighbors remain profitable.
- ETH. Runs the BTC preset with no ETH calibration (zero-shot). The event study shows continuation, the strategy beats 100% of the random-entry placebos, and a one-bar delay keeps 94% of the edge. An independent replication on Dukascopy ETH/USD (2019-01-01 → 2026-09-30) passes every criterion: Sharpe 1.82, 206 trades. In the robustness test the preset ranks above 55% to 76% of its ETH neighbors: a plateau, not a peak.
- Gold: partial (Sharpe 0.39, 319 trades; event study does not show continuation; beats random entries; max DD −11.8%). SOL: partial (Sharpe 0.57, 251 trades; event study shows continuation; beats random entries; max DD −54.0%). TAO: failed (Sharpe 0.01, 95 trades; event study does not show continuation; does not beat random entries; max DD −39.2%), on about 2.1 years of data.
17Interpretation
Do the two sleeves produce two distinct return streams?
Partly. They are the same engine on two markets whose prices are correlated at 0.82, and they share a common component: 23% of ETH entries occur within 15 minutes of a same-direction BTC entry (0.1% by chance). The overlap ends there. Strategy returns correlate at 0.36, one sleeve trades alone 17% of the time against 7% for both, and the effective number of independent bets is 1.46 out of 2. This is one strategy with a meaningful second stream, not two independent alphas.
How much diversification does ETH bring?
A meaningful amount. Against BTC alone, the Sharpe ratio rises by +39% (1.46 → 2.02) and the maximum drawdown falls from −24.8% to −17.8%. Volatility is 6% below the weighted average of the two sleeves. The diversification ratio is 1.21. Portfolio Sharpe against the better sleeve: 2.12 against 2.05 in the first half, 1.98 against 1.81 in the second, when the correlation between the sleeves was higher (0.44 against 0.31).
Does correlation rise sharply in crises?
It rises on stress days, but stays within the range of 90-day rolling correlations. Correlation is 0.32 on non-stress days and 0.53 and 0.38 on spot crash and bear-market days (full period 0.36). Joint losses are not more frequent than constant dependence implies. When both sleeves lose on the same day, the sizes of their losses are more aligned than the benchmark (0.56 against 0.20). In the deepest portfolio drawdown (2022-01-22 → 2022-03-03) BTC moved −17.4% and ETH −18.0%.
Does the portfolio improve the return/risk ratio?
Yes, historically. The portfolio is better than each sleeve on Sharpe, Calmar and maximum drawdown: Sharpe 2.02, Sortino 4.73, Calmar 3.79. Its CAGR (68%) compares with 40% for BTC and 80% for ETH. In the joint monthly bootstrap, the portfolio Sharpe exceeds BTC's in 100% of replications and ETH's in 88%. The 90 % interval of the portfolio Sharpe is 1.53–2.51.
Does the result depend on a single period?
Not on a single year. The portfolio return is positive in 9 of 9 calendar years and its Sharpe is above 1 in 8 of 9. The weakest full year is 2019 (+8.0%). The portfolio Sharpe is 1.98 in the second half (2022-09-16 → 2026-09-30) against 2.12 in the first (2018-09-01 → 2022-09-15), with a higher correlation between the sleeves (0.44 against 0.31). Starting in 2019, which leaves out ETH's +224% in late 2018, gives 1.86 with a CAGR of 51% (diagnostic only; the official period is unchanged). The result does depend on a small number of trades: the best 5 % carry 99% of the net gain. The rolling 12-month Sharpe was positive 100% of the time.
What are the main risks not modeled?
See section 20: slippage and market impact (zero in the simulation, with 87× two-way annual turnover), perpetual funding, the difference between the data venues (Bitstamp BTC/USD, Binance ETH/USDT) and the execution venue, exchange and stablecoin risk, latency and stop execution in live markets, and the fact that the BTC preset was selected on 2017–2026 data that contains the whole common period. ETH is a transfer across assets, not across time.
Assessment. Good, not excellent, diversification. On this history the 50/50 combination improves risk-adjusted returns and drawdowns over each sleeve, although correlation was higher on stress days. The two sleeves share a common driver and carry unequal risk (40% / 60%).
18Future hypotheses
Observations made while measuring the frozen portfolio. None of them changes the official portfolio. Each would need to be specified in advance and tested on data not used here (forward period).
- Rebalancing. Monthly rebalancing (B) had a Sharpe of 2.08 and equal risk (C) 2.00, against 2.02 for A, which drifted to an average BTC weight of 25%. Hypothesis: a calendar rebalancing rule improves the frozen portfolio out of sample. If tested, the rule should be fixed now and judged on forward data only.
- Shared shocks. 23% of ETH entries coincide with a same-direction BTC entry, and losses on days when both lose are more aligned than the benchmark. Hypothesis: simultaneous same-direction entries carry most of the common risk. Studying this would mean changing the strategy, which is out of scope here.
- Risk balance. At 50/50 in capital, ETH carries 60% of the variance. Whether risk balance helps out of sample is the same open question as the rebalancing one; it is not answered by this history.
19Sanity checks
| Check | Result | Detail |
|---|---|---|
| BTC ×0: detailed loop = simulate() | pass | max |Δequity| 0, trades 396 / 396 |
| BTC ×0: full-period metrics = validated report | pass | research/reports/shock-15m-zeroshot-btc-calm.json, worst relative gap 0.0e+0 |
| BTC ×1: detailed loop = simulate() | pass | max |Δequity| 0, trades 396 / 396 |
| BTC ×1: full-period metrics = validated report | pass | research/reports/shock-15m-zeroshot-btc-calm.json, worst relative gap 0.0e+0 |
| BTC ×2: detailed loop = simulate() | pass | max |Δequity| 0, trades 396 / 396 |
| BTC ×2: full-period metrics = validated report | pass | research/reports/shock-15m-zeroshot-btc-calm.json, worst relative gap 0.0e+0 |
| BTC: equity = capital + Σ trade PnL (+ open position) | pass | residual 0.000000000 (open position at end: false) |
| BTC: commissions charged once per fill | pass | Σ fees vs 0.045 % × (entries + exits), relative gap 7.8e-16 |
| BTC: no leverage at entry | pass | max entry notional / sleeve equity = 1.000000000000 |
| ETH ×0: detailed loop = simulate() | pass | max |Δequity| 0, trades 358 / 358 |
| ETH ×0: full-period metrics = validated report | pass | research/reports/shock-15m-zeroshot-ethusdt-calm.json, worst relative gap 0.0e+0 |
| ETH ×1: detailed loop = simulate() | pass | max |Δequity| 0, trades 358 / 358 |
| ETH ×1: full-period metrics = validated report | pass | research/reports/shock-15m-zeroshot-ethusdt-calm.json, worst relative gap 0.0e+0 |
| ETH ×2: detailed loop = simulate() | pass | max |Δequity| 0, trades 358 / 358 |
| ETH ×2: full-period metrics = validated report | pass | research/reports/shock-15m-zeroshot-ethusdt-calm.json, worst relative gap 0.0e+0 |
| ETH: equity = capital + Σ trade PnL (+ open position) | pass | residual 0.000000000 (open position at end: false) |
| ETH: commissions charged once per fill | pass | Σ fees vs 0.045 % × (entries + exits), relative gap 5.7e-16 |
| ETH: no leverage at entry | pass | max entry notional / sleeve equity = 1.000000000000 |
| BTC: timestamps on the UTC 15-min grid | pass | 283277 bars, 0 off-grid, 0 non-increasing (bar-open timestamps, ms UTC) |
| ETH: timestamps on the UTC 15-min grid | pass | 283081 bars, 0 off-grid, 0 non-increasing (bar-open timestamps, ms UTC) |
| BTC: one close per day, no interpolation | pass | 2952 days, 0 days without a bar (carried, return 0) |
| BTC: zero-return days are days without a position | pass | 2234 zero-return days, 2234 of them flat all day |
| ETH: one close per day, no interpolation | pass | 2952 days, 0 days without a bar (carried, return 0) |
| ETH: zero-return days are days without a position | pass | 2155 zero-return days, 2155 of them flat all day |
| Capital: BTC sleeve 50 + ETH sleeve 50 = 100 at t0 | pass | each sleeve compounds only its own 50 |
| Capital: portfolio = BTC sleeve + ETH sleeve, every day | pass | max |V − (V_BTC + V_ETH)| = 0.0e+0 |
| Sleeve value = 50 × strategy equity / equity at t0 (engine is scale-invariant) | pass | max relative gap 5.3e-15 |
| No double compounding: Π(1 + r_portfolio) reproduces the portfolio value | pass | max relative gap 6.3e-15 |
| Portfolio return = drifting-weight average of sleeve returns | pass | max |r_p − (w_BTC r_BTC + w_ETH r_ETH)| = 3.3e-16, weights from the previous close |
| 15-min portfolio marks agree with daily closes | pass | max relative gap at 23:45 bars 2.4e-15 |
| BTC/ETH timestamps not shifted (15-min underlying returns peak at lag 0) | pass | -4: -0.002 · -3: 0.005 · -2: -0.025 · -1: 0.012 · 0: 0.813 · +1: 0.005 · +2: -0.033 · +3: 0.005 · +4: -0.003 |
| Correlation recomputed independently (z-score formula) | pass | 0.357515 vs 0.357515 |
| Max drawdown recomputed independently (episodes vs running peak) | pass | -17.8499 % |
| Sharpe recomputed independently (Welford vs two-pass) | pass | 2.024208 |
| CAGR recomputed independently (log-sum vs end value) | pass | 67.7273 % |
| Equal-risk weights causal (window ends at the rebalancing close) | pass | 97 monthly targets; truncating the series after the rebalancing day leaves each weight unchanged |
| Gross exposure of the 50/50 portfolio | pass | max 103.6 % of portfolio equity (100 % = both sleeves fully invested; above 100 % only through price moves against open shorts and the entry commission) |
| ETH runs the BTC preset unchanged | pass | parameter hash c6ac30464bce14dd… identical for both sleeves |
| walk-forward : référence 36/3 = synthèse des fenêtres longues | pass | 0.83 contre 0.83 |
| Stress: zero-slippage portfolio Sharpe = this report (research/shock/published-stress.ts) | pass | 2.0242078889 |
Look-ahead: the engine computes every indicator, the daily volatility regime (closed days only) and every decision causally, and its parity with the bar-by-bar live engine is covered by the project's tests (npm run test:research). The portfolio layer only uses closes up to the current day: drifting weights come from the previous close, rebalancing happens at the month-end close with information up to that close, and the equal-risk weights use the 90 days ending at that close.
20Limitations and unmodeled risks
- In-sample entry conditions. The calm-regime restriction and the daily-trend condition on short entries were set with knowledge of the BTC and ETH data, so both sleeves are in-sample for them; they are not an independent out-of-sample result.
- In-sample selection for BTC. The preset was chosen on BTC 2017–2026, which contains the whole common period. In the walk-forward study (section 16), settings re-selected every quarter on past data only give an out-of-sample Sharpe of 0.83 on BTC from 2020; the BTC sleeve figures here are in-sample. ETH is zero-shot across assets, not across time.
- Execution costs. Slippage is zero and fills happen at the bar close or at the stop level. At about 87× two-way turnover a year, each 0.01 % of average slippage per fill costs about 0.9% of equity a year. Cost ×2 lowers the portfolio Sharpe to 1.88.
- Market impact and capacity are not in this simulation; execution costs measured on real trades are summarised in section 15.
- Funding. The simulation trades spot-like instruments without funding. Live execution on perpetual futures pays or receives funding while a position is open (about 25% of the time). Stress tests (positions charged or credited at each funding time, correct sign for shorts): historical Binance perpetual funding (2020 onwards; constant +0.01 % per 8 h before 2020): Sharpe 1.97, CAGR 64.7%, max drawdown −17.9%; same, with Hyperliquid funding from May 2023: Sharpe 1.95, CAGR 64.0%, max drawdown −17.9%; stress: shorts pay 0.01 % per 8 h at all times: Sharpe 2.00, CAGR 66.7%, max drawdown −18.1%. Slippage per order: 0.00 % → Sharpe 2.02, 0.01 % → Sharpe 1.99, 0.02 % → Sharpe 1.96, 0.05 % → Sharpe 1.86.
- Data and venues. BTC/USD from Bitstamp and ETH/USDT from Binance. The execution venue (Hyperliquid perpetuals for the bot) has different prices, liquidity, fees and stop mechanics. ETH/USDT also carries USDT risk.
- Live mechanics. Candle availability, latency and stop-trigger behavior observed on the live exchange can differ from the simulator's intrabar path (see the bot documentation).
- Right-tail dependence. The best 5 % of trades carry 99% of the net gain. A market in which large trending moves after shocks disappear would remove the edge, and the bootstrap cannot represent such a regime.
- Counterparty, custody and operational risks are not part of a backtest.
Files and reproducibility
Produced by node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON research/shock/portfolio.ts --variant calm (deterministic, fixed seeds). Next to this report: portfolio_daily_returns.csv, portfolio_monthly_returns.csv, portfolio_annual_returns.csv, portfolio_drawdowns.csv, portfolio_correlation_rolling.csv, portfolio_summary.json (machine-readable, for later integration) and shock-engine-manifest.json (git commit, dataset and script hashes, parameter hash, assumptions).