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.
| Axis | Fixed contract |
|---|---|
| Data | CREON daily bars, 7 core symbols that passed quality checks; each source SHA-256 recorded in the data manifest |
| Bands | SMA(20) ± 2σ, BandWidth = (upper-lower)/middle |
| Squeeze | Prior bar's BandWidth in the bottom 20% of the last 60/125/250 days |
| Turtle | Enter 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 |
| Stop | Entry price - ATR(14) × 1.0/1.5/2.0 |
| BB diagnostic group | After a prior squeeze, the current close breaks above the upper band; ATR stop or 2R target |
| Execution | Long only, cash-based, no leverage, 1 position per symbol, gap stops at the actual open |
| Capital | Initial 3,000,000 KRW, 95% of the balance just before entry, integer quantities, compounding the balance after exit |
| Costs | 0bp, CREON 1.5bp/one-way provisional value, 2x stress, provisional value + 5bp/one-way slippage |
| Risk policy | No 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.
| Contract | Positive symbols | Median return | Median CAGR | Mean return | Mean MDD | Mean trades |
|---|---|---|---|---|---|---|
| turtle_squeeze_60 | 4 | 39.18% | 9.48% | 30.13% | -15.98% | 3.57 |
| turtle_squeeze_60_bulge | 4 | 39.18% | 9.48% | 30.13% | -15.98% | 3.57 |
| bb_breakout_125 | 5 | 18.27% | 4.70% | 12.42% | -13.82% | 9.00 |
| bb_breakout_60 | 5 | 12.63% | 3.31% | 13.53% | -14.31% | 10.29 |
| bb_breakout_250 | 6 | 10.48% | 2.77% | 11.40% | -13.91% | 9.14 |
| turtle_only | 4 | 7.68% | 2.05% | 70.44% | -30.54% | 10.43 |
| turtle_squeeze_250 | 5 | 0.53% | 0.15% | 6.36% | -13.38% | 3.57 |
| turtle_squeeze_250_bulge | 5 | 0.53% | 0.15% | 6.36% | -13.38% | 3.57 |
| turtle_squeeze_125 | 3 | 0.00% | 0.00% | 10.96% | -11.68% | 3.14 |
| turtle_squeeze_125_bulge | 3 | 0.00% | 0.00% | 10.96% | -11.68% | 3.14 |
OOS under the 2x cost stress
| Contract | Positive symbols | Median return | Median CAGR | Mean return | Mean MDD |
|---|---|---|---|---|---|
| turtle_squeeze_60 | 4 | 38.47% | 9.33% | 29.90% | -16.30% |
| turtle_squeeze_60_bulge | 4 | 38.47% | 9.33% | 29.90% | -16.30% |
| bb_breakout_125 | 5 | 18.03% | 4.65% | 10.83% | -14.44% |
| bb_breakout_60 | 5 | 10.47% | 2.77% | 11.56% | -14.23% |
| bb_breakout_250 | 6 | 10.07% | 2.66% | 9.90% | -14.66% |
| turtle_only | 4 | 6.27% | 1.68% | 67.61% | -31.14% |
| turtle_squeeze_125 | 3 | 0.00% | 0.00% | 10.37% | -11.70% |
| turtle_squeeze_125_bulge | 3 | 0.00% | 0.00% | 10.37% | -11.70% |
| turtle_squeeze_250 | 3 | -0.11% | -0.03% | 5.51% | -13.26% |
| turtle_squeeze_250_bulge | 3 | -0.11% | -0.03% | 5.51% | -13.26% |
With the current account risk policy applied
| Contract | Positive symbols | Median return | Mean return | Mean trades |
|---|---|---|---|---|
| turtle_only | 0 | 0.00% | 0.00% | 0.00 |
| turtle_squeeze_60 | 0 | 0.00% | 0.00% | 0.00 |
| turtle_squeeze_125 | 0 | 0.00% | 0.00% | 0.00 |
| turtle_squeeze_250 | 1 | 0.00% | 1.39% | 0.86 |
| turtle_squeeze_60_bulge | 0 | 0.00% | 0.00% | 0.00 |
| turtle_squeeze_125_bulge | 0 | 0.00% | 0.00% | 0.00 |
| turtle_squeeze_250_bulge | 1 | 0.00% | 1.39% | 0.86 |
| bb_breakout_60 | 0 | 0.00% | 0.00% | 0.00 |
| bb_breakout_125 | 1 | 0.00% | 2.61% | 1.14 |
| bb_breakout_250 | 1 | 0.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_onlyis the control, and the improvement ofturtle_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_onlyis 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_proxycommission 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_haltis 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.