# KISS comparison: January 2018 through December 2025

This note compares the dashboard's `kiss-2.0.0` signal reconstruction and original two-close execution policy with the January 1, 2018–January 1, 2026 results shown in the supplied 42 Macro chart. The subsequent validation selected the 2-out/5-in execution policy for `kiss-2.1.0`. The dashboard figures are a retrospective reconstruction, not signals published live or audited performance.

## Comparable results

The dashboard analysis uses January 2, 2018 through December 31, 2025, the first and last trading sessions inside the chart's labeled range. It fetches data from January 2013 for indicator warmup, uses adjusted-total-return ETF prices, accrues DGS3MO on cash, charges the model's declared transaction costs and slippage, and implements confirmed allocation changes on the next session.

| Portfolio | Ending value from $100,000 | Total return | CAGR | Maximum drawdown |
| --- | ---: | ---: | ---: | ---: |
| Dashboard KISS, two-close confirmation | $240,470 | 140.5% | 11.6% | -10.4% |
| Dashboard 60/30/10, annual rebalance | $359,129 | 259.1% | 17.3% | -29.2% |
| Dashboard VT/AGG 60/40, annual rebalance | $173,982 | 74.0% | 7.2% | -22.3% |
| Supplied 42 Macro KISS snapshot | about $362,000 | 262% | 17% | -13% |
| Supplied 42 Macro 60/30/10 snapshot | about $400,000 | 300% | 19% | -25% |
| Supplied 42 Macro 60/40 snapshot | about $191,000 | 91% | 8% | -22% |

The dashboard's annual 60/30/10 result is much closer to the supplied 42 Macro KISS result than the dashboard KISS result is. Aligning the dates therefore does not eliminate the performance gap. The dashboard KISS reconstruction gave up substantial upside while producing a somewhat smaller drawdown.

This is expected to be a real signal-methodology difference. The public 42 Macro description says its top-down targets come from a proprietary Global Macro Risk Matrix and its exposure scaling comes from proprietary VAMS signals. The dashboard uses documented public-data approximations, so identical 60/30/10 maximum weights do not imply identical pivots. Cash vehicle, execution, costs, data vendors, and endpoint conventions add smaller differences. The public [42 Macro KISS FAQ](https://www.42macro.com/kiss-model-portfolio) also reports current figures that differ from the supplied snapshot, so comparisons should always identify the report date and range.

## Rebalance sensitivity

The default reconstruction generated 262 portfolio rebalance events, or 2.74 events per month. An event can trade several sleeves, so this is not necessarily the same unit as 42 Macro's statement that its model averaged two trades per month.

| Confirmation policy | Rebalance events | Events/month | CAGR | Maximum drawdown | Sortino |
| --- | ---: | ---: | ---: | ---: | ---: |
| 2 closes for every change (current) | 262 | 2.74 | 11.60% | -10.39% | 1.87 |
| 3 closes for every change | 159 | 1.66 | 11.38% | -10.33% | 1.78 |
| 5 closes for every change | 101 | 1.06 | 11.67% | -13.90% | 1.70 |
| 2 closes to reduce risk / 3 to add risk | 197 | 2.06 | 11.69% | -9.17% | 1.91 |
| 2 closes to reduce risk / 5 to add risk | 149 | 1.56 | 12.54% | -9.22% | 2.17 |
| 2 closes to reduce risk / 10 to add risk | 86 | 0.90 | 12.29% | -9.60% | 2.22 |

The strongest candidate in this sample is asymmetric confirmation: keep the current two-close response when reducing risk, but require five closes before adding risk. It cut rebalance events by about 43%, improved the reconstructed CAGR by about 0.94 percentage points, and reduced maximum drawdown by about 1.17 percentage points.

That result was then tested at adjacent 2-out/4-in and 2-out/6-in settings, across the pre-pandemic, COVID/recovery, 2022 shock, post-shock, and official reconstruction windows, and on both portfolio variants. The evidence supported promotion as `kiss-2.1.0`; the full decision record and limitations are in [KISS 2.1 confirmation-policy validation](/research/studies/kiss-2-1-confirmation-validation.md).

## Reproduce the analysis

Run:

```sh
MACRO_FRED_ALLOW_CSV_FALLBACK=1 npm run analyze:kiss-2018
```

The command fetches public source data, rebuilds the 2018–2025 diagnostic history from a 2013 warmup, and prints the exact full-precision results and gold-series provenance as JSON. It does not replace the official history beginning in 2020.
