Translate

7 Moving Average Trading Strategies, Backtested

Korean Stock Moving-Average Backtesting

7 Moving Average Trading Strategies, Backtested

I backtested several moving-average trading strategies on Korean stock data.

Daily sample ~6 years (2020-2026) 30-min/5-min sample ~1 year (2025-2026) US top-300 market cap sample ~3.3 years (2023-2026) 0.35% buy-side commission Full KOSPI+KOSDAQ universe

🌐 한국어로 읽기 (Read in Korean)

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.

Common rules
  1. Universe: stocks with market cap ≥ ₩100B and 5-day (20-bar for intraday) average trading value ≥ ₩500M
  2. Capital: ₩100M starting capital, full cash into whichever stock signals (single-position rotation)
  3. Entry: next trading day's (or next bar's) open after signal confirmation (avoids lookahead bias)
  4. 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).

Total return comparison for alignment/reverse-alignment start-buy, breakdown-sell strategies
3 of 4 combinations ended deeply negative. The only winner was the 20<60<120 reverse alignment.
Daily bars, 4 alignment/reverse-alignment combinations
ComboTradesWin rateTotal returnMDD
Alignment 5>20>6012432.26%-78.19%-92.77%
Alignment 20>60>1205623.21%-93.21%-93.73%
Reverse 5<20<6011758.97%-68.57%-80.42%
Reverse 20<60<1204560%+18.95%-52.79%
No evidence that alignment starting means price keeps rising. Both alignment combos had win rates under 30% and heavy losses. Interestingly, reverse alignment 5<20<60 had a 58.97% win rate yet still lost -68.57% overall — winning often doesn't matter if you lose big when you lose. This pattern repeats throughout the rest of this post.

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).

MA60 touch-buy total return by holding period, bar chart
Same signal, only the holding period changed — and the results swing wildly.
10-day holding: +386.64%. 30-day holding: -6.84%. Same signal, same stocks — only the number of days held differs, yet the result swings this hard. That suggests the edge isn't a structural "MA support" effect, but is closer to whether a handful of big winning trades happened to fall inside that specific holding-period window within the 6-year sample. This is the first thing to be suspicious of when a backtest produces an impressive-looking number.

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).

Annualized return and MDD comparison for MA60 touch + 10-day hold, Korea vs US
Matching for period length (annualized), Korea still leads, but the gap narrows a lot compared to raw total return.
MA60 touch + 10-day hold, Korea vs US (annualized instead of total return, since the periods differ)
MarketTradesWin rateProfit factorAnnualized returnMDD
Korea (KOSPI+KOSDAQ, 6y)14451.39%1.66+30.83%-57.55%
US (top 300 mkt cap, 3.3y)8356.63%1.17+10.69%-33.97%
Even annualized, Korea is nearly 3x higher (+30.83% vs +10.69%) — not just an illusion from the longer sample period. But the profit factor is 1.66 in Korea vs a flatter 1.17 in the US, while win rate (56.63% vs 51.39%) and MDD (-33.97% vs -57.55%) both favor the US. Direction (positive) held up in both markets, but the magnitude and volatility differ a lot by market — Korea's flashy number shouldn't be taken at face value.

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.

MA20 basis, immediate touch-buy vs. bounce-confirmation
MethodTradesWin rateTotal return
Immediate touch-buy34932.95%-81.28%
Pullback (buy after bounce confirmed)10629.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).

Disparity-index lower-threshold sensitivity (MA20 basis)
ThresholdCharacterWin rateTotal return
96Sensitive (enters on small dips)62.11%-63.89%
92Default57.3%-15.13%
85Dull (needs a deep dip)51.9%-81%
Win rate and outcome diverge here too. The most sensitive setting (96) has the highest win rate (62.11%) but the worst total return (-63.89%) — the same "winning often doesn't help if losses are bigger" pattern from section 01. Go too dull (85) and price has usually already fallen too far to bounce, so it keeps falling more often. The default (92) does relatively better, but with only three data points it's too early to call it "the optimal value."

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).

45 trades, 60% win rate, +18.95% total return, -52.79% MDD — the only result that survived out of everything tested. But 45 trades over 6 years is only about 7-8 per year, not a generous sample. Whether this is a real edge or coincidence can only really be checked by running the same thing on other timeframes — which is exactly what's next.

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.

Total return comparison for 7 strategies on daily, 30-min, and 5-min bars
The shorter the bar (the more often trades fire), the more strategies collapse. Most sit around -99% on 5-min bars.
Total return by strategy, daily vs. 30-min vs. 5-min
StrategyDaily30-min5-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%
On 5-min bars, it's a commission problem, not a strategy problem. The 5-min alignment strategy rotated 1,353 times in a single year — at that turnover, a 0.35% buy-side commission eats almost the entire account regardless of how good the strategy actually is. This looks like a swing-trading commission assumption applied directly to scalping-level turnover. The one exception is reverse alignment (20<60<120) — it held up on daily (+18.95%) and 30-min (+5.49%) bars, but still broke down on 5-min bars (-83.7%).

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.


Daily backtests cover roughly 2020-2026 (~6 years); 30-min and 5-min backtests cover 2025-07-21 to 2026-07-23 (~1 year) of Korean stock (KOSPI+KOSDAQ) data. Uses a single-position rotation model with ₩100M starting capital, investing the full cash balance into whichever stock signals next; 0.35% commission is applied on buys only, with no sell-side commission assumed. Market cap is an approximation based on current shares outstanding and does not reflect historical capital changes (rights issues, reverse splits, etc.). This post is not investment advice and does not recommend any specific stock or trade timing.

이전최근

댓글 쓰기