Kipnis Defensive Adaptive Asset Allocation (KDA)
Ilya Kipnis's Defensive Adaptive Asset Allocation (KDA) combines the canary of Keller and Keuning's Defensive Asset Allocation with the universe of Adaptive Asset Allocation. Emerging-market stocks and US bonds act as canaries: each one with positive momentum puts half the portfolio into the up to five strongest of ten asset classes with positive momentum, weighted so calmer assets get more. The rest goes to intermediate Treasuries while their momentum is positive, and otherwise to Treasury bills.
Designed by Ilya Kipnis, 2019. Implemented and tracked by Tactfolio.
| Apr 2008 – Sep 2026 | Strategy | SPY |
|---|---|---|
| Annual return (CAGR) | 6.9% | 11.9% |
| Worst drawdown | -19.1% | -51.5% |
| Sharpe ratio | 0.70 | 0.67 |
| Volatility | 10.2% | 19.7% |
| Annual return since publication (Feb 2019) | 5.6% | 16.4% |
| Dec 1987 – Sep 2026 | Strategy | SPY |
|---|---|---|
| Annual return (CAGR) | 9.8% | 11.6% |
| Worst drawdown | -19.1% | -55.2% |
| Sharpe ratio | 1.07 | 0.70 |
| Volatility | 9.2% | 18.0% |
| Annual return since publication (Feb 2019) | 5.6% | 16.4% |
Kipnis Defensive Adaptive Asset Allocation (KDA) was published by Ilya Kipnis on his QuantStrat TradeR blog in January 2019. It combines the canary signal of Keller and Keuning's Defensive Asset Allocation with the ten-asset universe and risk-based weighting of Adaptive Asset Allocation: two canaries set how much of the portfolio takes risk, and momentum picks up to five assets for that share.
The idea#
Kipnis took a different part from each parent. From Defensive Asset Allocation he took the canary universe: emerging-market stocks and US bonds are sensitive to trouble, so their momentum decides how much risk to take, before the holdings themselves weaken. He also took its fast 1/3/6/12 momentum, which weights the most recent month heavily. From Adaptive Asset Allocation he took a broad universe of global stocks, real estate, bonds, commodities, and gold, and the idea of sizing positions by risk rather than equally.
The result aims to stay invested in whatever is working in good markets and to scale down quickly, in halves, when the canaries turn.
How it works#
At the close of the last trading day of each month:
- Score ten asset classes by 13612W momentum (a weighted average of 1-, 3-, 6-, and 12-month returns that emphasizes the latest month): SPY, VGK, EWJ, EEM, VNQ, RWX, IEF, TLT, DBC, and GLD.
- Select the top five that also have positive momentum, or fewer if fewer are positive.
- Weight the selected assets by inverse 21-day volatility, so calmer assets get more.
- Check the canaries, emerging-market stocks (VWO) and US bonds (BND). If both have positive momentum, the selected assets fill the whole portfolio; if one does, half; if neither, none. If no asset qualifies in step 2, that share goes to Treasury bills (BIL).
- The rest of the portfolio goes to intermediate Treasuries (IEF) if IEF's own momentum is positive, and otherwise to Treasury bills.
Kipnis weights the selected assets by minimum variance, a quadratic optimization that uses the correlations between them as well as their volatility. Tactfolio's builder has no minimum-variance optimizer, so this version uses inverse-volatility weights, which ignore correlations. It also uses his base case without leverage, and months of 21 trading sessions rather than calendar months.
What the backtest shows#
The ETF test starts in April 2008. KDA compounded about 7% a year with a worst drawdown of about 19%, compared with more than half for the S&P 500. Its risk-adjusted return edged out the S&P 500's but trailed a 60/40 portfolio, which also returned more.
Its defense worked in 2008, when it finished the rest of the year up 5% while the S&P 500 lost about a third, and it gained 29% in the 2009 recovery. The cost was long stretches behind rising stock markets: it gained 9% in 2013 and 4% in 2019 while the S&P 500 gained more than 30% in each. Its worst drawdown ran from September 2021 to July 2023, as rising rates weakened its bond canary, its bond holdings, and many of its ten assets at once. It lost 7% in 2022, far less than the S&P 500, but did not regain its high until September 2025.
Since publication in early 2019 it has compounded between 5% and 6% a year. With simulated history the test starts at the end of 1987 and looks much better: nearly 10% a year with a risk-adjusted return well above the S&P 500's, and gains in each of 2000, 2001, and 2002 while stocks fell. The 2021–2023 drawdown remains its worst.
When it struggles#
- Rising interest rates. Bonds serve as a canary, a candidate, and the safe asset, so a bond bear market strikes all three roles.
- Strong, narrow stock rallies. With a canary weak, half or all of the portfolio sits in bonds or bills while stocks climb.
- Timing. Kipnis found its results depend heavily on trading at month-end; the same rules traded a few days later did noticeably worse.
Using it on Tactfolio#
The live strategy above runs Kipnis's selection, canary, and crash-protection rules with inverse-volatility weights in place of minimum variance. Copy it to try the Allocate Smartly canaries (EEM and AGG), a different number of holdings, or the 60-day volatility of Adaptive Asset Allocation.
Year by year
| Year | Strategy | SPY |
|---|---|---|
| 2026* | 3.1% | 14.0% |
| 2025 | 18.1% | 17.7% |
| 2024 | 4.1% | 24.9% |
| 2023 | 1.4% | 26.2% |
| 2022 | -6.8% | -18.2% |
| 2021 | 3.7% | 28.7% |
| 2020 | 18.7% | 18.3% |
| 2019 | 3.6% | 31.2% |
| 2018 | 1.3% | -4.6% |
| 2017 | 14.9% | 21.7% |
| 2016 | 2.5% | 12.0% |
| 2015 | -4.9% | 1.2% |
| 2014 | 3.0% | 13.5% |
| 2013 | 8.9% | 32.3% |
| 2012 | 11.6% | 16.0% |
| 2011 | 7.9% | 1.9% |
| 2010 | 7.9% | 15.1% |
| 2009 | 28.5% | 26.4% |
| 2008* | 5.1% | -32.3% |
| Year | Strategy | SPY |
|---|---|---|
| 2026* | 3.1% | 14.0% |
| 2025 | 18.1% | 17.7% |
| 2024 | 4.1% | 24.9% |
| 2023 | 1.4% | 26.2% |
| 2022 | -6.8% | -18.2% |
| 2021 | 3.7% | 28.7% |
| 2020 | 18.7% | 18.3% |
| 2019 | 3.6% | 31.2% |
| 2018 | 1.3% | -4.6% |
| 2017 | 14.9% | 21.7% |
| 2016 | 2.5% | 12.0% |
| 2015 | -4.9% | 1.2% |
| 2014 | 3.0% | 13.5% |
| 2013 | 8.9% | 32.3% |
| 2012 | 11.6% | 16.0% |
| 2011 | 7.9% | 1.9% |
| 2010 | 7.9% | 15.1% |
| 2009 | 28.5% | 26.4% |
| 2008 | 8.1% | -36.8% |
| 2007 | 13.0% | 5.1% |
| 2006 | 25.6% | 15.8% |
| 2005 | 8.2% | 4.8% |
| 2004 | 11.0% | 10.7% |
| 2003 | 29.9% | 28.2% |
| 2002 | 10.4% | -21.6% |
| 2001 | 6.1% | -11.8% |
| 2000 | 10.7% | -9.7% |
| 1999 | 22.3% | 20.4% |
| 1998 | 18.1% | 28.7% |
| 1997 | 8.3% | 33.5% |
| 1996 | 11.7% | 22.5% |
| 1995 | 17.8% | 38.0% |
| 1994 | -1.2% | 0.4% |
| 1993 | 17.6% | 9.7% |
| 1992 | 3.1% | 7.6% |
| 1991 | 11.5% | 30.3% |
| 1990 | 1.9% | -3.2% |
| 1989 | 18.3% | 31.5% |
| 1988 | 14.4% | 16.4% |
| 1987* | -0.1% | 6.0% |
* Partial year.
The rules as implemented
This is the exact tree Tactfolio runs, rebalanced monthly with signals and trades at the close. Open it to inspect or copy it.
- StrategyKipnis Defensive Adaptive Asset Allocation
- WeightEqual
- IfAll of 2 conditions
- 1/3/6/12-month weighted momentum of VWO is above 0
- 1/3/6/12-month weighted momentum of BND is above 0
Then- WeightEqual
- IfAt least 5 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 5 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 5 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- IfAt least 4 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 4 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 4 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- IfAt least 3 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 3 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 3 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- IfAt least 2 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 2 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 2 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- IfAt least 1 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 1 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 1 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- TickerBIL
- IfAt least 1 of 10 conditions
- IfAt least 2 of 10 conditions
- IfAt least 3 of 10 conditions
- IfAt least 4 of 10 conditions
- IfAt least 5 of 10 conditions
Otherwise- WeightEqual
- IfAny of 2 conditions
- 1/3/6/12-month weighted momentum of VWO is above 0
- 1/3/6/12-month weighted momentum of BND is above 0
Then- WeightSpecified
- IfAt least 5 of 10 conditions50%
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 5 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 5 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- IfAt least 4 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 4 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 4 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- IfAt least 3 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 3 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 3 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- IfAt least 2 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 2 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 2 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- IfAt least 1 of 10 conditions
- 1/3/6/12-month weighted momentum of SPY is above 0
- 1/3/6/12-month weighted momentum of VGK is above 0
- 1/3/6/12-month weighted momentum of EWJ is above 0
- 1/3/6/12-month weighted momentum of EEM is above 0
- 1/3/6/12-month weighted momentum of VNQ is above 0
- 1/3/6/12-month weighted momentum of RWX is above 0
- 1/3/6/12-month weighted momentum of IEF is above 0
- 1/3/6/12-month weighted momentum of TLT is above 0
- 1/3/6/12-month weighted momentum of DBC is above 0
- 1/3/6/12-month weighted momentum of GLD is above 0
Then- WeightEqual
- RankTop 1 · 1/3/6/12-month weighted momentum
- TickerSPY
- TickerVGK
- TickerEWJ
- TickerEEM
- TickerVNQ
- TickerRWX
- TickerIEF
- TickerTLT
- TickerDBC
- TickerGLD
- RankTop 1 · 1/3/6/12-month weighted momentum
Otherwise- WeightEqual
- TickerBIL
- IfAt least 1 of 10 conditions
- IfAt least 2 of 10 conditions
- IfAt least 3 of 10 conditions
- IfAt least 4 of 10 conditions
- If1/3/6/12-month weighted momentum of IEF is above 050%Then
- WeightEqual
- TickerIEF
Otherwise- WeightEqual
- TickerBIL
- WeightEqual
- IfAt least 5 of 10 conditions50%
Otherwise- WeightEqual
- If1/3/6/12-month weighted momentum of IEF is above 0Then
- WeightEqual
- TickerIEF
Otherwise- WeightEqual
- TickerBIL
- WeightEqual
- If1/3/6/12-month weighted momentum of IEF is above 0
- IfAny of 2 conditions
- IfAll of 2 conditions
- WeightEqual
Sources and caveats
- Ilya Kipnis, Right Now It's KDA… Asset Allocation (QuantStrat TradeR, 2019, via R-bloggers)
- Allocate Smartly, Ilya Kipnis' Defensive Adaptive Asset Allocation
- The source weights the selected assets by minimum variance, from one-month volatilities and a blend of 1-, 3-, 6-, and 12-month correlations; the builder has no minimum-variance or correlation-based weighting, so this version weights them by inverse 21-session volatility, which ignores correlation between them.
- Momentum is 13612W. Kipnis uses the same weights without dividing by 19, which ranks and signs identically, and measures calendar months; months here are 21 sessions, a choice Kipnis showed can change results noticeably.
- Uses the source's canaries VWO and BND (Allocate Smartly uses EEM and AGG). With both canaries positive the source can add leverage; this version uses its base case without leverage. BIL stands in for cash, which the source assumed earned nothing.
- As in the source, the risky half goes to Treasury bills when no asset qualifies, and the crash-protection share goes to IEF only while IEF's own momentum is positive.
- Signals and trades use the close of the last trading day of each month, as in the source.
Common questions#
What is KDA asset allocation?#
KDA, or Kipnis Defensive Adaptive Asset Allocation, is Ilya Kipnis's 2019 strategy. Two canaries, VWO and BND, decide what share of the portfolio takes risk; that share holds up to five of ten global asset classes with positive momentum, and the rest goes to intermediate Treasuries or cash.
How is KDA different from DAA and AAA?#
It uses DAA's two canaries, the same all, half, or nothing scaling of risk, and the same fast momentum, but its safe asset is IEF or cash rather than the strongest of three bond funds. It uses AAA's ten assets and risk-based weights, but ranks them by 13612W momentum instead of six-month returns and requires positive momentum.
Does this version use minimum-variance weights?#
No. The builder has no minimum-variance optimizer, so the selected assets are weighted by inverse 21-day volatility. That keeps the risk-based sizing but ignores how the assets move together.
What ETFs does KDA use?#
SPY, VGK, EWJ, EEM, VNQ, RWX, IEF, TLT, DBC, and GLD as candidates, VWO and BND as canaries, IEF for crash protection, and BIL as cash.