QuantProp. Analyze a trade file ↗
stockback / Experiment result

EXP-011 report — Turtle + Bollinger squeeze, 30-symbol generalization

EXP-011 results: 9.33% CAGR was a 7-symbol artefact, costs were not the cause, and the benchmark beat every contract.

Original record: 2026-09-10 · Migrated: 2026-10-27 · Translated from Korean: 2026-10-27
A historical record, not rerun in this migration.

The figures, hypotheses and verdicts of the time are preserved. A past positive result or candidate mention does not mean validated profitability today or a live-trading recommendation. Validation periods that were already used are not treated as new independent validation.

This is an English translation of a preserved Korean original. It describes conditions at the time of writing, not current provider specifications, costs or regulations.

EXP-011 report — Turtle + Bollinger squeeze, 30-symbol generalization

  • Run date: 2026-09-10
  • Execution model: claude-opus-5 / high
  • Design: 0
  • Verdict: 0 — rejected
  • Ledgers: reports/ledgers/EXP-011-summary.csv (11,520 rows), reports/ledgers/EXP-011-benchmark.csv (480 rows)

| generated_at | 2026-09-10T00:00:00+09:00 |

One-line conclusion

EXP-008's CAGR of 9.33% was an artefact of 7 symbols. It disappears to -1.70% on the 23 new symbols. By contrast, the effect of halving MDD holds across the 30 symbols too.

1. 1st verdict cell

locked_oos × normalized_actual_proxy × ATR 1.5 × research_unhalted, 30 symbols.

ContractSymbolsOOS tradesPositive symbolsMedian CAGRMedian MDDMedian excess CAGRstarved
turtle_only (control)3029914-1.89%-32.58%-17.73%0
turtle_squeeze_60308910-1.37%-15.18%-19.03%0
turtle_squeeze_12530789-1.22%-12.10%-18.28%0
turtle_squeeze_250307811-0.85%-12.30%-17.54%0

The verdict cell has no capital-starved cells, so this table can be interpreted without accounting contamination.

2. The EXP-008 result reproduces only on 7 symbols

The same run split into the 7 control symbols and the 23 new symbols.

ContractGroupSymbolsTradesMedian CAGRMedian MDD
turtle_onlyControl 77731.86%-35.29%
turtle_onlyNew 2323226-2.52%-32.27%
turtle_squeeze_60Control 77259.74%-16.56%
turtle_squeeze_60New 232364-1.70%-15.14%
turtle_squeeze_125Control 77220.00%-10.14%
turtle_squeeze_125New 232356-1.27%-12.17%
turtle_squeeze_250Control 77250.01%-11.18%
turtle_squeeze_250New 232353-0.99%-12.44%

Two things can be confirmed at once.

  1. EXP-008 reproduced. On the 7 control symbols, turtle_squeeze_60 came out at 9.74% (EXP-008 9.33%), MDD -16.56% (EXP-008 -16.30%), and turtle_only at 1.86% (EXP-008 2.05%). Even with accounting changed to per-period capital isolation, the EXP-008 figures reproduced as they were. In other words, the capital isolation fix did not change EXP-008's conclusion.
  2. Generalization failed. Applying the same contract to the 23 new symbols turns 9.74% → -1.70%. EXP-008's CAGR improvement was a property of those 7 symbols, not of the strategy.

3. The surviving effect — drawdown reduction

Unlike CAGR, the MDD improvement holds in both groups.

  • Control: -35.29% → -16.56% (turtle_only → turtle_squeeze_60)
  • New 23 symbols: -32.27% → -15.14%
  • All 30 symbols: -32.58% → -12.10% ~ -15.18%

The direction also holds at neighbouring ATR stops.

ContractATR 1.0ATR 1.5ATR 2.0
turtle_only-2.49% / -29.3%-1.89% / -32.6%-0.93% / -31.2%
turtle_squeeze_60-1.25% / -12.5%-1.37% / -15.2%-1.32% / -17.8%
turtle_squeeze_125-0.91% / -9.3%-1.22% / -12.1%-1.27% / -14.8%
turtle_squeeze_250-0.75% / -9.9%-0.85% / -12.3%-0.82% / -14.0%

At all three stop multiples, the squeeze contracts' MDD is half or less of the control's. This is not one lucky cell but a reproducible structural effect, so it is recorded as a reusable risk component.

4. Costs are not the cause

Contract0bpActual assumption2x+5bp slippage
turtle_only-1.81%-1.89%-2.39%-1.90%
turtle_squeeze_60-1.35%-1.37%-1.43%-1.39%
turtle_squeeze_125-1.21%-1.22%-1.32%-1.35%
turtle_squeeze_250-0.84%-0.85%-0.96%-0.89%

The median is negative even with commission set to 0. It is the same structure as the 5-minute contracts, and even once the actual CREON commission is confirmed this conclusion will not change. As a low-turnover daily contract, its cost sensitivity is small to begin with.

Labelling correction (2026-09-10). The 0bp column in the table above is the zero profile inherited from EXP-008, and although it was named "0bp cost diagnostic line", in reality only commission is 0 and the 15~30bp securities transaction tax is still charged. It is not a frictionless diagnostic line. To check, a frictionless profile with commissions, taxes and slippage all at 0 was added and re-measured on the same 30 symbols and the same 1st verdict cell. | Contract | Frictionless (all 0) | Commission 0, tax charged | Actual assumption | | --- | ---: | ---: | ---: | | turtle_only | -1.16% | -1.81% | -1.89% | | turtle_squeeze_60 | -1.26% | -1.35% | -1.37% | | turtle_squeeze_125 | -1.18% | -1.21% | -1.22% | | turtle_squeeze_250 | -0.75% | -0.84% | -0.85% | All four contracts are negative even fully frictionless. So the conclusion that "costs are not the cause" stands and is in fact better supported. The rejected verdict does not change.

5. Versus the benchmark — the biggest number in this experiment

The 30-symbol median of per-period buy-and-hold (same bars, same one-way commission).

Periodbuy-and-hold CAGRbuy-and-hold MDDPositive symbols
train (2010–2018)3.35%-61.30%18/30
validation (2019–2022)-0.42%-57.62%15/30
locked_oos (2023–2026-08)18.88%-50.48%22/30

In locked OOS, every contract's median excess CAGR is -17% ~ -19%. The research partner's concern, "since KOSPI rose in this period, simply holding might have earned more", is confirmed in numbers. In the rising domestic index period since 2023, these contracts fell far short of the market.

However, the benchmark's MDD is -50.48%. The squeeze contracts give up return in exchange for cutting drawdown to 1/3, and as long as the return is negative, this trade-off does not yet constitute a strategy.

6. Directional consistency across periods

Contracttrainvalidationlocked_oosfull
turtle_only-1.87%-1.28%-1.89%-1.71%
turtle_squeeze_60-1.10%-0.73%-1.37%-0.70%
turtle_squeeze_125-1.49%-1.06%-1.22%-0.19%
turtle_squeeze_250-0.94%-1.06%-0.85%0.50%

The direction is consistent, but consistently negative. It is not only locked OOS that is bad, so this result cannot be interpreted as "the OOS period was unusual".

7. Capital-starved cells

Of 11,520 rows, 12 cells have starved > 0, all in the following combination.

  • Symbol A051900 (LG H&H), contract turtle_only, period full, policy research_unhalted
  • Four cost profiles × three ATR multiples = 12 cells, 4~5 discarded entry signals per cell

The cause is not strategy collapse but the share price level. This stock's price per share is high, so a 3,000,000 KRW account has periods after losses where it cannot buy even 1 share. It occurred only in the full period that runs 16 years in one go, and 0 in the 1st verdict cell, locked_oos, so the verdict is not contaminated.

These 12 cells are not strategy performance, so they are not cited as performance in any aggregate. From a live-trading perspective, they are an account-constraint record: "a 3,000,000 KRW account cannot hold high-priced stocks under this sizing rule".

8. Interpretation limits

  • all_research is a listing snapshot as of 2026-08-26. Symbols delisted before then are absent, so survivorship bias remains, and the bias makes results look better than reality. This conclusion is rejected, so removing the bias would only make it worse, not overturn it.
  • The basket is the 30 most liquid in the train period, so it is skewed toward large caps. Whether small and mid caps would give different results is not answered by this experiment.
  • The ETF classification (A069500, A102110) is manual and has not been verified against a product master.
  • The actual CREON execution commission is still an unconfirmed provisional value. But since results are negative even at 0bp, this verdict does not depend on whether the commission is confirmed.

Appendix — PF calculation correction (2026-09-10)

In the first run, the profit factor was copied as is from the EXP-008 runner, and that implementation was sum(wins) / sum(losses) if losses else 0.0. So cells with no losing trades were recorded as PF = 0.0. 0.0 is the value that means worst, so all-win cells read as the worst. Of 11,520 rows, all 316 all-win cells were in this state.

Example: A005490 turtle_squeeze_60 locked_oos — 1 trade, win rate 100%, return +51.7%, yet PF was 0.0.

The repository's canonical convention is BacktestResult.profit_factor (daily.py (original supporting file)), which returns None when there are no losses, and reporting renders it as "none". The code was fixed to match, writing an empty value when undefined, and everything was rerun.

There is no effect on the verdict. The promotion gates were CAGR, MDD, excess CAGR, trade count and starved; PF was not a gate. After the rerun, all 1st verdict cell figures were confirmed identical (turtle_only -1.89%, turtle_squeeze_60 -1.37%, control 9.74% / new 23 symbols -1.70%). After the correction, the 316 all-win cells are empty values and 7,424 rows have real values.

The same defect remains in the EXP-008 ledgers. Under the principle of not overwriting past experiment ledgers, they are not modified, and pf = 0 rows in that ledger can mean either "0" or "undefined", so they are not cited as is.

Appendix 2 — withdrawal of the "drawdown reduction effect" conclusion (2026-09-10)

Section 3 above treated the squeeze filter's MDD reduction as "the only effect that held when the symbol basket changed" and recorded it as a reusable risk component (component-hold). This interpretation was wrong.

Measuring market exposure in the full-universe sweep (1,042 eligible symbols) revealed the cause. Same 1st verdict cell, on the 30-symbol basket:

ContractMarket exposureMedian MDDMedian trades per symbol
turtle_only23.39%-32.58%10
turtle_squeeze_605.44%-15.18%2
turtle_squeeze_1253.22%-12.10%2
turtle_squeeze_2504.50%-12.30%2

Drawdown fell by half or more not because risk was managed but because it participated in only about 1/(4~7) of the market . Normalizing by exposure flips the direction: MDD per 1% of exposure is -302% for turtle_only and -959~-1294% for the squeeze contracts. While holding a position, the squeeze side loses proportionally more.

Across all symbols it is even clearer. The median locked OOS exposure of turtle_squeeze_250 is 0.78%, and of 1,042 symbols, 268 (26%) had 0 trades, with an average of 1.46 trades per symbol overall. It is a contract that effectively does not trade over 3.65 years.

Drawdown lowered by holding cash is not a reusable risk component. It is just cash. So component-hold is withdrawn and this is corrected to: nothing in this contract is preserved. The rejected verdict stands; only its grounds became stronger.

Source and migration evidence

Source: reports/experiments/EXP-011-turtle-squeeze-basket.md

Original SHA-256: dd7a4167585625b0de58567a16e1aafa7bd9c7978b39c5d92cd581c52db254a8

Raw data and account information are not part of the public package. The original results do not replace statistical or scientific revalidation. The English text is a translation; numbers, tables and charts are carried over unchanged.