A holdout differs from ordinary out-of-sample testing in intent. It is not part of the iteration loop at all: no partial peeks, no bug fixes discovered by running it. Many teams keep the most recent two years as the holdout, because that period is closest to the market you are about to trade.
The rule that makes it work is a budget of one. You get a single look. If the result is poor, the honest options are to abandon the strategy or to restart research knowing that the holdout is now spent.
Example: 2005 to 2019 for development, 2020 to 2021 for cross-validation inside the development loop, 2022 to 2024 held out untouched. On opening, in-sample Sharpe 1.5 against holdout Sharpe 0.6 is a normal, acceptable outcome. Holdout Sharpe of minus 0.3 is a stop.
Related: out-of-sample, in-sample, train-validation-test-split, data-snooping