Forward Test: Gold TTM Squeeze (SQ-L-B)
Protocol and monthly journal. The TTM Squeeze on 1-hour gold, long only, the version that passed five of six gates in the backtest, tested forward on new data with the rule, the start, the costs and the evaluation fixed in advance.
Status, 15 October 2026: protocol frozen. The record starts with the first 1-hour bar closing after Monday 19 October 2026, 00:00 New York, if this page is live before then. The first monthly update is due in the first week of November 2026.
Frozen 15 October 2026 (draft 2, approved by the owner the same day). (Draft 1 used a dedicated demo account; the owner cannot open a second one, so this draft is a paper series, like the NQ forward tests.)
One-line summary: a pre-registered forward test of the TTM Squeeze rule that came closest on gold (1-hour bars, long only, entry when the squeeze fires with positive momentum, exit when the momentum crosses below zero). The record is a paper series: the frozen rule, computed by the backtest's own code on new 1-minute data as it comes in, month by month, with the backtest's costs. No orders are placed.
Status: frozen 15 October 2026. Start: the first 1-hour bar closing after Monday 19 October 2026, 00:00 New York, provided this protocol is published on the site before that time; otherwise the first Monday after it is published, written here before any forward trade is computed. Nothing before the start counts.
01What this test is, and what it is not
- A forward evaluation, not a second backtest. The historical test (TTM Squeeze on gold) gave Buried, 5 of 6 gates: it failed validation (2013 to 2019, profit factor 1.02). Its verdict does not change; this is a separate record on data that did not exist when the rule was tested.
- Why this variant: the best of the four versions, chosen after seeing the results, on a market known to have risen strongly. Both facts make a positive forward result modest evidence, and both are stated wherever the test is reported.
- A paper record, not trading. Fills are the backtest's assumed fills (the next 1-minute open) and costs are the backtest's ($0.30 an ounce). It says nothing about real spreads, slippage or swap at the moment of trading; financing is reported separately, as in the backtest.
- Historical figures (2004 to 2026, after $0.30 an ounce, no financing): 1,670 trades, about 75 a year, mean +0.252 R a trade, standard deviation 2.68 R, a losing streak of 15 trades, the worst loss open inside one trade 11.3 R. With today's swap charged, the historical result fell from +421 R to +121 R.
- It cannot confirm the edge quickly:
| Closed trades | About (years) | 95% interval half-width on the mean | Chance of t of 2 or more if the true mean is +0.25 R | If the true mean is half of that |
|---|---|---|---|---|
| 100 | 1.3 | 0.52 R | 14% | 6% |
| 200 | 2.7 | 0.37 R | 25% | 9% |
| 300 | 4.0 | 0.30 R | 36% | 12% |
02The rule (frozen; nothing here may change during the test)
- Market: XAUUSD, the IC Markets MetaTrader 4 demo server's 1-minute bid history (the source of the historical test), New York clock (server time = New York + 7 hours), bar time = close time; 1-hour bars built as in the backtest.
- Bollinger Bands: SMA(20) of the closes plus and minus 2.0 x the population standard deviation of the last 20 closes. Keltner Channels: SMA(20) plus and minus 1.5 x the simple average of the last 20 true ranges. Squeeze on when both Bollinger Bands are strictly inside the Keltner Channels; it fires at the close of the first bar on which it is no longer on.
- Momentum: the value at the last point of the 20-bar least-squares line through d = close - ((highest high of 20 bars + lowest low of 20 bars) / 2 + SMA(20)) / 2.
- Entry: at the open of the first 1-minute bar after a 1-hour bar closes on which the squeeze fires with momentum above zero. Exit: at the open of the first 1-minute bar after a 1-hour bar closes with momentum below zero. Long only, one position at a time, no stop, no target. Positions are held overnight and over weekends.
- Eligibility: the indicators are computed on the full history; the first position opens only on a firing whose signal bar closes after the start time.
- Costs and units: $0.30 an ounce per round trip; results in R (1.5 x ATR(14) of the 1-hour bars at the signal bar) and in dollars per ounce. Financing reported beside it, not in the verdict: scenario A (3% a year of the entry price) and scenario B (IC Markets' swap as recorded on 12 October 2026: long -57.03 points per lot per night, Wednesday counting three).
03How the series is computed
- Code: the backtest's engine, unchanged. SHA-256:
sq_lib.js5059e4754552afa2f6d19eaafbe01b935e744c6429d2663c355ae9717c79f56d,rs_lib.js57b8e65f5ee0e1bf4498a8741ecf0750ee68a137af5b35834c7a5cdc2ff75bd3,gh_lib.js7b5dcb7710893735485ae9614d90cef7533e43cf35680ff4ba1914c8160c6597,gx_lib.js56d5197c951234e98aaaadd164a93865f66ed28b6d29b8b5a8c7c8247301e78d,control_audit_lib.js726e8a9bdd73a2401cafb90724753c841d541479114ae850b3832ebd7d9a5d38;fx_data.jsreads the MT4 file. The data are read without the cut of the historical study (that cut only fixed the end of the backtest). Any change to the engine makes a new test. - Data: the XAUUSD 1-minute file of the MT4 terminal, which grows while MetaTrader 4 runs. Each month, in the first week, the file is read, its SHA-256 and its last bar are recorded, and the whole forward window is recomputed. Check: every earlier forward trade must reproduce in entry and exit time and result; any difference is published and explained.
- Holes: if the terminal was closed, the file may miss minutes or hours. Holes are never filled. Every gap longer than 30 minutes inside the trading week is listed; trades open across one are counted, and every result is also reported without them.
- The owner keeps MetaTrader 4 running (as for the gold golden-cross test); a month with long holes is reported as such.
04Records and reporting
- Per trade: signal bar close, momentum at the signal, R, entry and exit time and price, result in R and in dollars per ounce after costs, both financing scenarios, worst loss open inside the trade, whether the trade touched a hole.
- Monthly update (the first in the first week of November 2026): the trades of the month and of the whole window, mean R per trade, profit factor, win rate, drawdown on closed trades and including open losses, the file's hash, last bar and holes, and the reproduction check. Months with no trades are reported too.
05Evaluation (fixed now)
- Formal evaluations at 100, 200 and 300 closed trades (about 1.3, 2.7 and 4 years). Updates before them are descriptive only.
- Primary measure: mean net R per trade with its standard error and 95% interval (t critical value, n - 1 degrees of freedom), profit factor, win rate, drawdowns.
- Verdict at an evaluation point: Contradicted if the mean is zero or negative or the profit factor is below 1.0; Not contradicted if the mean is positive, the profit factor at least 1.0 and the interval includes zero ("keep going", not "confirmed"); Supported only if the lower end of the interval is above zero. The verdict is also reported without the trades touching holes; if that changes it, the verdict is reported as inconclusive for that reason.
- Control: the moved-entry control of the historical test on the forward window (every entry moved by one random offset of whole days, at least 5% of the window, same time of day, same exit rule and cost; 500 runs, seeds 1000 + run), reported as a percentile beside the verdict, not as a gate.
- Criteria are not changed after results are seen. No edge is declared from a few good months.
06Modifications
Any change to the rule, the settings, the timeframe, the symbol, the data source, the costs, the engine or these criteria is a separate test with its own protocol and start date. Results are never merged across tests.
JMonthly journal
Updated in the first week of every month, months with no trades included. Results are computed by the backtest's code on the new data (a paper record, not trades).
No forward data yet. The test has not started.
Raw files
sq_lib.js · sq_forward.js
TTM Squeeze on gold · sq_spec.md
CCorrections
None yet. Any change to this protocol after the start would be published here and would make the changed version a separate test (section 6).