ThinkTradeLab {{ t.brand }}
{{ t.heroKicker }}

{{ t.heroTitle }}

{{ t.heroSub }}

{{ t.heroCta1 }}
{{ t.heroCta2 }}
{{ t.coverageKicker }}

{{ t.coverageTitle }}

{{ t.coverageSub }}

{{ item.tag }}

{{ item.title }}

{{ item.body }}

{{ t.pillarsKicker }}

{{ t.pillarsTitle }}

{{ item.n }}

{{ item.title }}

{{ item.body }}

{{ t.latestKicker }}

{{ t.latestTitle }}

{{ t.viewAll }} →
{{ item.imageNote }}
{{ item.category }}{{ item.date }}

{{ item.title }}

{{ item.excerpt }}

{{ t.faqKicker }}

{{ t.faqTitle }}

{{ item.q }}

{{ item.a }}

{{ t.voicesKicker }}

{{ t.voicesTitle }}

{{ t.placeholderNote }}

{{ item.quote }}

{{ item.who }}

{{ t.subTitle }}

{{ t.subSub }}

{{ subscribeNote }}
{{ t.researchKicker }}

{{ t.researchTitle }}

{{ t.researchSub }}

{{ item.label }}
{{ item.category }}

{{ item.title }}

{{ item.excerpt }}

{{ item.date }}

{{ t.placeholderNote }}

← {{ t.backToResearch }}
{{ article.category }}{{ article.date }}

{{ article.title }}

{{ article.excerpt }}

{{ t.byline }}
{{ shareLabel }}
{{ item.v }}
{{ item.k }}
{{ t.chartPlaceholder }}

{{ item.h }}

{{ item.p }}

{{ item.cap }}
{{ item.cap }}

{{ tbl.title }}

{{ hc.v }}
{{ cell.v }}

{{ tbl.note }}

{{ t.subTitle }}

{{ t.subSub }}

{{ t.subBtn }}
{{ t.signalsKicker }}

{{ t.signalsTitle }}

{{ t.signalsSub }}

{{ item.v }}
{{ item.k }}
{{ t.equityPlaceholder }}

{{ t.signalTableTitle }}

{{ t.thSignal }}
{{ t.thOpened }}
{{ t.thHorizon }}
{{ t.thStatus }}
{{ t.thReturn }}
{{ item.name }}
{{ item.opened }}
{{ item.horizon }}
{{ item.status }}
{{ item.ret }}

{{ t.signalsDisclaimer }}

{{ t.courseKicker }}

{{ t.courseTitle }}

{{ t.courseSub }}

{{ item.n }}

{{ item.title }}

{{ item.body }}

{{ item.meta }}
{{ t.courseCardKicker }}

{{ t.courseCardTitle }}

  • · {{ line }}
{{ t.courseCta }}

{{ t.courseCardNote }}

{{ t.pricingKicker }}

{{ t.pricingTitle }}

{{ t.pricingSub }}

{{ item.tag }}
{{ item.badge }}

{{ item.name }}

{{ item.price }}

{{ item.body }}

  • · {{ f }}
{{ item.cta }}

{{ t.pricingNote }}

{{ t.aboutKicker }}

{{ t.aboutTitle }}

{{ t.aboutLead }}

{{ t.methodTitle }}

{{ item.n }}

{{ item.title }}

{{ item.body }}

{{ t.principlesTitle }}

{{ item.title }}

{{ item.body }}

{{ t.contactKicker }}

{{ t.contactTitle }}

{{ t.contactSub }}

{{ item.k }}
{{ item.v }}
{{ contactNote }}
{{ t.legalKicker }}

{{ t.legalTitle }}

{{ item.h }}

{{ item.p }}

← Back to research
Method 2026-08-29

A four-condition weekly swing strategy passed every gate we set — and 66% of its edge sits in ten trades

Close above the 20-week moving average, a break of the falling trendline, a W-bottom through its neckline, and a weekly volume spike — all four in the same week. 483 trades, +954.7 bp net expectancy per closed trade, t = 3.6, verdict: candidate. Here is the full trail, including the ablation test suggesting one of the four filters is actively hurting, and why we still would not trade it as it stands.

483 — Trades, main spec (150 names, weekly bars, 2015-01 – 2026-08)

+954.7 bp — Net expectancy per closed trade, after costs

t = 3.6 — t-statistic on 474 closed trades (3.8 including open M2M)

42.7% — Win rate — but the median trade returns −3.2%

4.6 — Payoff ratio (average win +41.9% ÷ average loss −9.2%)

66% — Share of total P&L from the ten largest trades

The starting point: four conditions on a PDF

We did not invent this strategy. It arrived as four rules in a document: price above the 20-week moving average, an upside break of a falling trendline, a completed W-bottom through its neckline, and a volume spike in the same week. All four must hold on the same weekly close to enter. Three rules exit, any one of them sufficient: a weekly close below the 20-week moving average, an M-top, or a weekly close below the prior swing low. Turning that description into something testable is itself the first piece of work. Which two points define the trendline? A spike relative to what average, and by what multiple? How far apart can two bottoms be and still count as one pattern? Our choices are all in the spec: the trendline is extrapolated through the two most recently confirmed swing highs, a spike is weekly volume at least twice the trailing 20-week average, the W-bottom requires two lows within 60 weeks with the second above the first, and the neckline is the highest high between them. The universe is the 150 current constituents of the 0050 and Mid-100 indices, on dividend-adjusted daily bars aggregated to weekly, with signals from January 2015 and round-trip costs of about 0.571%.

The real trap is not the parameters, it is the right half of the pattern

Every pattern-based strategy shares one invisible cheat: a pattern is only recognisable once it is complete, and completion always arrives later than the signal date. Our swing points are pivots of order two — a week whose high is strictly greater than the two weeks either side. The crucial part is that such a pivot is unknown on its own week; it is only confirmed two weeks later, once the right-hand bars have printed. Compute pivots over the full series with a vectorised pass and then evaluate signals against them, and a 2015 signal is silently using information from two weeks into its own future. The backtest comes out beautiful and meaningless. The engine therefore indexes every pivot by its confirmation date rather than its occurrence date, and a decision made in week t may only use pivots confirmed on or before t. Six hand-constructed unit tests exist purely to guard this. It is the easiest mistake to make in the whole project and the hardest one to notice after the fact.

Ablation: only two of the four entry filters earn their place

Remove each entry condition on its own, rerun, and watch what happens to expectancy. The results fall into three clean groups. First, the core. Dropping the W-bottom takes signals from 483 to 1,087 and costs 597 bp per trade. Dropping the volume spike takes signals to 1,103 and costs 373 bp. Both filters are doing real work, and it is the same work: suppressing signal count so that only setups where structure and participation arrive together survive. Second, the redundant. Dropping the 20-week moving average condition moves trade count from 483 to 491 and expectancy by −5 bp. The other three conditions already imply it — a close above the neckline between two bottoms is usually a close above the average anyway. That rule earns its keep on the exit side, not the entry side. Third, and most interesting: dropping the trendline break more than doubles trade count to 1,076 and raises expectancy by 275 bp. On this evidence the filter is not screening out noise, it is screening out good signals along with it. We record that as a hypothesis rather than a finding — it comes from multiple comparisons on a single dataset and needs new data or a different universe to confirm.

The exit that handles 80% of trades is the worst of the three

Of 483 trades, 389 — 80.5% — exit on a weekly close below the 20-week moving average, averaging +725 bp at a 36% win rate. The other two exits are far better: 50 trades exit on a close below the prior pivot low, averaging +2,045 bp with a 62% win rate; 35 exit on an M-top, averaging +1,952 bp with a 77% win rate. The ordering looks backwards at first — structural exits are supposed to be the bad news. The explanation is timing. Both structural exits require a pivot confirmed after entry, and confirmation takes two weeks, so any trade that survives long enough to trigger one has usually already run. The moving-average exit is the earliest and bluntest of the three, and it closes a great many positions before they develop. Separately, nine positions were still open at the end of the sample and are marked to market at the final weekly close, averaging +17,340 bp. Those nine are paper numbers, not realised results, which is why every headline figure in this article is also given on a closed-trades-only basis.

The shape of the edge: the typical trade loses money

A 42.7% win rate and +12.6% average per trade sounds comfortable. The median trade returns −3.2%: line all 483 trades up and the one in the middle is a loser. The distribution is violently right-skewed — average win +41.9%, average loss −9.2%, a payoff ratio of 4.6 — and it depends on a handful of positions that ran past +100%. The cumulative contribution curve makes the point bluntly: the single largest trade is 15% of total P&L, the top three are 37%, the top ten are 66%. That is not by itself evidence the strategy is fake; trend-following returns are supposed to look like this, and the right tail is where the money is. It does mean two things. The statistical uncertainty around this expectancy is wider than a sample of 483 suggests. And in live trading the result depends on actually holding those few positions — take profit early on two or three of them and the whole equity curve collapses.

By year: three negative years, and 42% of everything in 2025

Three of twelve years are negative — 2015 (−0.1), 2018 (−1.4) and 2024 (−1.4), in units of aggregate P&L at one unit per trade. Among positive years, 2020 contributes +12.2 and 2025 contributes +25.8, which alone is 42.4% of the total. That shape resembles the warning sign from our previous short-term study, where profits also clustered in the most recent year, but there is an important difference. In that case the other years were broadly negative. Here they are broadly positive, and 2025 moves the result from modest to large rather than from losing to winning. Strip 2025 out entirely and the remaining eleven years still sum to a positive number. That is one of the reasons this study lands on candidate rather than not established.

Robustness: the whole neighbourhood is positive, both sub-universes are positive, and it survives removing the winners

A strategy that only works on the exact parameters someone happened to choose is usually a selection artefact. So we swept the neighbourhood: moving average of 16, 20 or 24 weeks against a volume multiple of 1.5, 2.0 or 2.5. All nine cells are positive, ranging from +887 to +1,572 bp, and the main spec cell (20 weeks, 2.0×) is not the best one — 24 weeks at 2.5× is. That is a much healthier picture than the user's own cell topping the table. Changing pivot order to 1 or 3, or the W-bottom window to 40 weeks, keeps expectancy between +1,269 and +1,466 bp. Splitting the universe also holds: the 50 large-cap names give 121 trades at +2,453 bp with t = 2.76, the Mid-100 names give 362 trades at +861 bp with t = 2.64. Both halves are independently significant; neither is carrying the other. Tripling slippage from 0.05% to 0.15% per side moves expectancy from +1,260 to +1,238 bp — the structural advantage of a weekly system, where a 0.57% round trip is spread across an average holding period of 13.8 weeks. The harshest test last: delete the ten largest winners outright and the remaining 473 trades still return +440.5 bp with t = 3.44.

Verdict: candidate — with four caveats that must be read alongside it

Statistically this strategy clears every gate we set: t = 3.6 on closed trades, a 5,000-iteration bootstrap 95% interval of +679 to +1,959 bp, a 0.0% probability that true expectancy is at or below zero, top-three-name concentration of 35.7% (inside our threshold), both sub-universes positive, the entire parameter neighbourhood positive. Position-sized simulation — NT$1m initial capital, 1% risk per trade, 20% cap per name, 10 concurrent positions — returns 20.0% annualised with an 18.1% maximum drawdown. Four things must be read with those numbers. First, the universe is today's index constituents, and survivorship bias flatters this style of strategy more than any other: the companies still in the 0050 and Mid-100 today are precisely the ones that trended up over the last decade. Second, the concentration is severe — ten trades are 66% of the result, so live performance will hinge on holding a handful of positions. Third, this run did not compute an equal-weight buy-and-hold benchmark on the same universe; a separate study on this site measured roughly 25.8% annualised for buy-and-hold on the same 150 names, which implies the excess return here may be far smaller than the headline, or absent. Fourth, the finding that removing the trendline filter improves results comes from multiple comparisons on one dataset and should not be acted on before out-of-sample confirmation.

Next steps, and what generalises

The path forward is specific: rerun on historical index membership to remove survivorship bias, add the equal-weight buy-and-hold benchmark, and test the trendline hypothesis out of sample. Until then the verdict stays at candidate — worth tracking forward, not worth trading as it stands. Three things generalise. First, weekly systems survive costs that kill daily ones, not because the signals are better but because the same 0.571% round trip is amortised over thirteen weeks instead of three days; the identical cost structure was fatal to the short-term family we published last week and is nearly invisible here. Second, ablation testing is worth more than parameter optimisation: it answers whether a rule is doing anything, rather than which number looks best, and it will regularly tell you that a rule you are fond of is subtracting value. Third, a strategy with a negative median and a positive mean can be statistically sound and psychologically unexecutable. Before committing capital to one, be honest about whether you will still press the buy button on the ninth signal after eight small losses in a row.