7 Moving Average Trading Strategies, Backtested
I backtested several moving-average trading strategies on Korean stock data.
00 How I tested this
To see how moving averages relate to price, I used states like "above the MA," "touched the MA," or "two MAs crossed" as buy signals, backtested with rotation trading — hold one stock at a time, and after selling, switch to whichever signal fires next across the whole universe.
- Universe: stocks with market cap ≥ ₩100B and 5-day (20-bar for intraday) average trading value ≥ ₩500M
- Capital: ₩100M starting capital, full cash into whichever stock signals (single-position rotation)
- Entry: next trading day's (or next bar's) open after signal confirmation (avoids lookahead bias)
- 0.35% commission on buys only, no commission assumed on sells
01 Is being above the MA an edge? — Alignment vs. reverse alignment
Buy on alignment start (short>mid>long MA), buy on the opposite (reverse) start — sell on breakdown (daily)
Starting with the most basic hypothesis. When a short MA sits above a mid MA, which sits above a long MA ("alignment"), that's read as a sign of an uptrend. I bought the moment alignment starts and sold the moment it breaks down. I also tested the exact opposite — "reverse alignment" (short<mid<long).
| Combo | Trades | Win rate | Total return | MDD |
|---|---|---|---|---|
| Alignment 5>20>60 | 124 | 32.26% | -78.19% | -92.77% |
| Alignment 20>60>120 | 56 | 23.21% | -93.21% | -93.73% |
| Reverse 5<20<60 | 117 | 58.97% | -68.57% | -80.42% |
| Reverse 20<60<120 | 45 | 60% | +18.95% | -52.79% |
02 The "buy the touch" trap — one parameter flips the whole result
Buy when price (moving above the MA60) touches it, sell after a fixed holding period (daily)
This time, instead of requiring several MAs to line up, I tested a simple support play: "buy when price, having been above the MA, comes down and touches it." Using the 60-day MA, I varied only how many days to hold after buying (5, 10, 20, 30, 40 trading days).
03 Does that number hold up in another market? — Checking against US stocks
Same MA60-touch + 10-trading-day-hold strategy, applied to the top 300 US stocks by market cap (2023-2026, ~3.3 years)
The surest way to check whether that +386.64% reflects a real structural reason, or just a few lucky trades that happened to land inside a 6-year sample, is to throw the exact same logic at a completely different market. Signal definition and buy/sell rules stayed identical; only the universe changed from Korea's KOSPI+KOSDAQ to the top 300 US stocks by market cap (296 actually obtained), over the most recent ~3.3 years (2023-03 to 2026-07).
| Market | Trades | Win rate | Profit factor | Annualized return | MDD |
|---|---|---|---|---|---|
| Korea (KOSPI+KOSDAQ, 6y) | 144 | 51.39% | 1.66 | +30.83% | -57.55% |
| US (top 300 mkt cap, 3.3y) | 83 | 56.63% | 1.17 | +10.69% | -33.97% |
04 Don't rush the entry — the value of a confirmation step
Buy-on-touch vs. buy-after-confirmed-bounce (pullback) · disparity-index threshold sensitivity (daily)
Instead of buying the instant price touches the MA, what if you wait for an actual bounce to confirm before buying? I compared this against a "pullback" pattern: while alignment holds, price dips to the 20-day MA, then on the next trading day breaks back above that dip day's high.
| Method | Trades | Win rate | Total return |
|---|---|---|---|
| Immediate touch-buy | 349 | 32.95% | -81.28% |
| Pullback (buy after bounce confirmed) | 106 | 29.25% | -58.26% |
Win rate actually dropped (32.95%→29.25%), yet the loss shrank by nearly 30% (-81.28%→-58.26%). Simply waiting one extra beat before buying made a clear difference.
In the same spirit, I also tested an "overextension" (disparity index — how far price has drifted from the MA, in %) strategy for buying oversold bounces, varying the sensitivity. The default buys when the 20-day-MA disparity drops to 92 or below (-8%) and sells once it recovers to 100; I also tried a more sensitive version (96, enters on smaller dips) and a duller one (85, requires a much deeper dip).
| Threshold | Character | Win rate | Total return |
|---|---|---|---|
| 96 | Sensitive (enters on small dips) | 62.11% | -63.89% |
| 92 | Default | 57.3% | -15.13% |
| 85 | Dull (needs a deep dip) | 51.9% | -81% |
05 The one that held up
Reverse alignment (MA20<MA60<MA120) start-buy, sell on breakdown
Alignment/reverse-alignment, touch, breakout, golden cross, pullback, disparity — of everything tested on daily bars, exactly one combination finished clearly positive: buy the moment the short MA (20) drops below the mid MA (60), which is below the long MA (120) — i.e. reverse alignment just starting — and sell when that reverse alignment breaks (the short MA climbs back above).
Intuitively this sounds backwards — "buy a stock that just started a downtrend" — but it's closer to a bottom-fishing/bounce strategy: buy near a low where a longer downtrend has just settled in, and sell once that downtrend structure breaks (i.e. a bounce begins).
06 Drop to intraday bars and almost everything collapses
7 representative strategies applied to daily, 30-min, and 5-min bars (MA "period counts" kept identical, only bar size changed)
Finally, I took the 7 representative strategies covered so far (alignment, reverse alignment, touch, breakout, golden cross, disparity, pullback) and reran them with only the bar size changed — daily → 30-min → 5-min. "MA60" becomes "a 60-bar MA on 5-min candles" (roughly 5 hours) — the period count used in the MA formula stayed the same, only the bar spacing got tighter.
| Strategy | Daily | 30-min | 5-min |
|---|---|---|---|
| Alignment (5>20>60) | -78.19% | -38.21% | -99.98% |
| Reverse (20<60<120) | +18.95% | +5.49% | -83.7% |
| MA60 touch + 10 bars | +386.64% | -58.98% | -99.74% |
| MA60 breakout + 10 bars | +168.37% | -94.29% | -99.96% |
| Golden cross (5/20) | -35.84% | -79.04% | -99.88% |
| Disparity (20, 92/100) | -15.13% | -85.02% | -35.12% |
| Pullback (5/20/60) | -58.26% | -65.62% | -98.86% |
07 Conclusion — the correlation is weak, or effectively none
Taken together, the correlation between moving averages and price is weak, or effectively nonexistent — that's the safer read. Alignment and reverse alignment may genuinely capture an uptrend/downtrend context, but that relationship wasn't stable enough to use as a standalone "buy this price, sell a few days later" timing signal.
- One parameter flips the result. As shown in section 02, the same signal on the same stocks flipped from positive to negative when only the holding period changed — more likely a handful of lucky big wins than a structural edge.
- Sample sizes were small to begin with. Most strategies produced only 50-150 trades over 6 years. Even the "survivors" — reverse alignment (45 trades) and the US check (83 trades) — aren't exempt from that same scrutiny.
There were some explainable patterns along the way — win rate and returns often moving in opposite directions, a confirmation step reducing losses, commissions eating returns as bars got shorter. But no standalone moving-average signal held up consistently across markets, periods, and parameters.


댓글 쓰기