QuantProp. Analyze a trade file ↗
stockback / Experiment result

EXP-008 — Turtle + Bollinger squeeze daily validation

Daily backtest of a Turtle 55-day breakout with a Bollinger squeeze filter on 7 Korean stocks: 6,720 result rows, costs, slippage and a hold verdict.

Original record: 2026-09-04 · 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-008 — Turtle + Bollinger squeeze daily validation

  • Run date: 2026-09-04
  • Generated: 2026-09-04
  • Execution model: gpt-5.6-luna / high
  • Status: exploratory
  • Strategy input: simple lower-band mean reversion from the supplied Bollinger review document was excluded; the squeeze breakout was registered as a Turtle filter
  • Result rows: 6,720 (combinations of symbol, contract, stop multiple, cost, risk policy and period)
  • The signal ledger records each signal only 1 time per symbol and contract that determines it, without duplicating per stop, cost or risk.

Design verdict

This experiment is not about extracting band returns but about testing whether the bands improve the quality of Turtle breakouts.

AxisFixed contract
DataCREON daily bars, 7 core symbols that passed quality checks; each source SHA-256 recorded in the data manifest
BandsSMA(20) ± 2σ, BandWidth = (upper-lower)/middle
SqueezePrior bar's BandWidth in the bottom 20% of the last 60/125/250 days
TurtleEnter at the next trading day's open when the current close breaks the prior 55-day high; exit at the next open on a break below the prior 20-day low
StopEntry price - ATR(14) × 1.0/1.5/2.0
BB diagnostic groupAfter a prior squeeze, the current close breaks above the upper band; ATR stop or 2R target
ExecutionLong only, cash-based, no leverage, 1 position per symbol, gap stops at the actual open
CapitalInitial 3,000,000 KRW, 95% of the balance just before entry, integer quantities, compounding the balance after exit
Costs0bp, CREON 1.5bp/one-way provisional value, 2x stress, provisional value + 5bp/one-way slippage
Risk policyNo entry blocking for structural comparison and the current account policy (daily -3%, monthly -8%, -20% from peak) run separately

Locked OOS summary under the provisional actual assumption

Period: 2023-01-01~2026-08-26. median_return and median_cagr are per-symbol OOS summaries across the 7 symbols, not a combined account return.

ContractPositive symbolsMedian returnMedian CAGRMean returnMean MDDMean trades
turtle_squeeze_60439.18%9.48%30.13%-15.98%3.57
turtle_squeeze_60_bulge439.18%9.48%30.13%-15.98%3.57
bb_breakout_125518.27%4.70%12.42%-13.82%9.00
bb_breakout_60512.63%3.31%13.53%-14.31%10.29
bb_breakout_250610.48%2.77%11.40%-13.91%9.14
turtle_only47.68%2.05%70.44%-30.54%10.43
turtle_squeeze_25050.53%0.15%6.36%-13.38%3.57
turtle_squeeze_250_bulge50.53%0.15%6.36%-13.38%3.57
turtle_squeeze_12530.00%0.00%10.96%-11.68%3.14
turtle_squeeze_125_bulge30.00%0.00%10.96%-11.68%3.14

OOS under the 2x cost stress

ContractPositive symbolsMedian returnMedian CAGRMean returnMean MDD
turtle_squeeze_60438.47%9.33%29.90%-16.30%
turtle_squeeze_60_bulge438.47%9.33%29.90%-16.30%
bb_breakout_125518.03%4.65%10.83%-14.44%
bb_breakout_60510.47%2.77%11.56%-14.23%
bb_breakout_250610.07%2.66%9.90%-14.66%
turtle_only46.27%1.68%67.61%-31.14%
turtle_squeeze_12530.00%0.00%10.37%-11.70%
turtle_squeeze_125_bulge30.00%0.00%10.37%-11.70%
turtle_squeeze_2503-0.11%-0.03%5.51%-13.26%
turtle_squeeze_250_bulge3-0.11%-0.03%5.51%-13.26%

With the current account risk policy applied

ContractPositive symbolsMedian returnMean returnMean trades
turtle_only00.00%0.00%0.00
turtle_squeeze_6000.00%0.00%0.00
turtle_squeeze_12500.00%0.00%0.00
turtle_squeeze_25010.00%1.39%0.86
turtle_squeeze_60_bulge00.00%0.00%0.00
turtle_squeeze_125_bulge00.00%0.00%0.00
turtle_squeeze_250_bulge10.00%1.39%0.86
bb_breakout_6000.00%0.00%0.00
bb_breakout_12510.00%2.61%1.14
bb_breakout_25010.00%1.47%0.86

Interpretation

  • The top rows are descriptive statistics of the whole matrix, not candidates adopted after the fact. No particular row is promoted to a live strategy.
  • turtle_only is the control, and the improvement of turtle_squeeze_* is compared on the same symbols, same stops and same costs.
  • bb_breakout_* is only a diagnostic group of the mechanical form described in the attached review document and is not adopted as a base strategy.
  • Under the preregistered promotion criteria it is hold. The 60-day Turtle squeeze filter showed an OOS median CAGR of about 9.5% and a mean MDD of about -16%, but did not pass the 15% CAGR criterion or train/validation directional consistency.
  • The pure bb_breakout_* diagnostic group's OOS median CAGR was in the range of about 3~5%, not grounds for adopting the 2R target structure alone.
  • For all 60/125/250-day squeeze contracts, results with bulge exclusion switched on were identical. In this basket, excluding the top 10% did not actually remove signals, so it is not interpreted as a valid improvement.
  • The mean return of turtle_only is distorted by a few symbols' large long-term winners. That is why medians, positive-symbol counts and MDD are used together.
  • The current source is based on the listing as of 2026-08-26, so survivorship bias exists. Delistings, a point-in-time universe, dividend reinvestment and unfilled orders at trading halts/price limits must be addressed before final validation.
  • The normalized_actual_proxy commission of 1.5bp/one-way is a provisional value before checking actual CREON account fills. The 5bp slippage rows are a conservative sensitivity, not real fill values.
  • The 250-day filter, with few signals, carries larger statistical uncertainty even when performance looks good. Trade counts and signal sparsity must be read together.
  • account_halt is a diagnostic group applying the current engine's -20% peak-drawdown entry block as is. Once triggered, this policy keeps blocking later entries, so it was not used as the main result for long-term strategy comparison.

Files

  • Result ledger: ../ledgers/EXP-008-turtle-bollinger-results.csv
  • Trade ledger: ../ledgers/EXP-008-turtle-bollinger-trades.csv
  • Signal ledger: ../ledgers/EXP-008-turtle-bollinger-signals.csv
  • Median NAV ledger: ../ledgers/EXP-008-turtle-bollinger-nav.csv
  • Data manifest: EXP-008-turtle-bollinger-data-manifest.json
  • Visual report: EXP-008-turtle-bollinger.html

Source and migration evidence

Source: reports/experiments/EXP-008-turtle-bollinger.md

Original SHA-256: 3bb6faaa3851930d8b95b4de3c118766de72a19e36e2413e1707226fddc686e2

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.