How does the Trading Friction toggle work?

Strategy results which ignore trading costs overstate what you would have actually earned. The Trading Friction toggle (on by default) deducts an estimated cost from each month's return based on how much the strategy actually traded that month.

The model is turnover-weighted. Each month, the strategy's new target ETF weights are compared against what it was already holding as the month opened. The sum of the absolute weight changes is the turnover, and each traded slice is charged a one-way cost based on the ETF's leverage:

ETF typeOne-way cost
Non-leveraged (1×)10 bps (0.10%)
2× leveraged15 bps (0.15%)
3× leveraged20 bps (0.20%)

So a month that rotates 50% of the portfolio out of one 1× ETF and into another costs roughly 0.10% (10 bps on the 50% sold + 10 bps on the 50% bought). Leveraged ETFs are charged more because their wider spreads and higher trading impact make them costlier to trade in practice.

Holdings that are left alone still move. This is the subtle part, and it is why the comparison is against what the strategy was holding rather than against last month's published percentages. If you hold 50% stocks and 50% bonds and stocks gain 10% while bonds are flat, you are holding roughly 52.4% / 47.6% a month later without having placed a single trade. Those percentages changed, but nothing was bought or sold and nothing was owed to a broker.

Two consequences follow:

Other points:

If you want to see the "frictionless" academic version of a backtest, switch the toggle off - just remember nobody earns those returns in a real account.