🇰🇷 한국어 원문 · Originally written in Korean on Oct 18, 2026. Slides have been re-labeled in English.
Yesterday I wrote this post.
That post showed what happens when the rules run mechanically, with none of the judgment I add in practice.
Split the capital into 24 accounts, buy one more account every 1.5% drop, and sell each account once it is up 0.5%.
The result: CAGR +3.07%, maximum drawdown (MDD) -36.8%.
It lost less than Buy&Hold (-2.06%, -51.6%), but it was a long way from the returns I actually felt.
And I ended that post like this.
When and how do I decide the market is overheated, and how do I trade then? When and how do I decide it’s oversold, and how do I trade then?
In practice, I don’t run this strategy purely mechanically.
When the downtrend is strong I widen the gap to 3-4%, and when the market looks too hot I stop buying.
This post is the backtest of that judgment, translated into technical indicators.
First, the Basic Concepts
Before the results, here are the indicators this post uses.
Feel free to skip ahead if you know them.

A moving average is the average close over the last N days.
The 20-day MA is roughly one month’s average price, the 120-day MA roughly six months’.
A close above the 120-day MA is read as a medium-term uptrend.
Disparity (20-day) is the close divided by the 20-day MA (×100).
100 means price is at the average; 105 means it is 5% above it.
The higher it is, the more price has run up in a short time.
A Bollinger band is drawn two standard deviations above and below the 20-day MA.
Price spends most of its time inside the band.
%B shows where price sits within the band: 0 is the lower edge, 1 the upper edge.
A %B below 0 means price has been pushed under the band, a statistically rare drop.

ATR (Average True Range) is the 14-day average of the daily range (high minus low, including gaps from the prior close).
Divide it by the close and you get ATR%: 3% means “it moves about 3% a day lately.”
For the KOSDAQ 150 the average since 2015 is 2.3%, and the 12-month median is 4.0%. We are in a high-volatility phase.
RSI(14) measures, on a 0-100 scale, how strong the gains of the last 14 days were versus the losses.
Conventionally, above 70 is read as overbought and below 30 as oversold.
(As it turns out, that convention didn’t hold in this backtest. More on that below.)

The performance metrics, too.
CAGR is the compound annual growth rate; MDD is the largest fall from a prior peak, the worst loss an investor actually had to sit through.
Sharpe is return divided by volatility; Sortino counts only downside volatility as risk. Higher is better for both.
Beta is how much the strategy moves when the underlying ETF moves 1%.
And to avoid numbers that only fit the past, I picked the rules on the earlier period (2021.09-2024.06) and re-checked them on the later one (2024.07-2026.10).
Overbought and Oversold: Which Signals Were Real

Using 11 years of daily bars since the ETF listed in 2015, I looked at what happened over the 20 trading days after each signal.
- After RSI above 70 or a break above the upper Bollinger band (%B>1), 20-day returns were +1.3-1.6%, above the +0.6% average. These weren’t overheating signals; they were signs the trend would continue.
- Only 20-day disparity above 108 was different: -1.5% on average over the next 20 days, with a 43% chance of a -10% drop within those 20 days.
- The oversold side mostly worked. Disparity below 92, RSI below 30, or -20% from the 60-day high led to +4-7% after 20 days, up 70-77% of the time.
- But there was also a 14-35% chance of another -10% before the rebound. That’s why you shouldn’t go all in just because it looks oversold.
So I judge overheating with disparity above 105, not RSI, and oversold with %B below 0.
Set the Gap with ATR, Not Gut Feel

Turn my gut rule of “widen the gap when the selloff is strong” into a number, and you get ATR.
Volatility tends to persist. If ATR is high today, tomorrow is likely to move a lot too.
After days in the top third of ATR, the next day’s high-low range averaged 2.97%; after the bottom third, 1.47%.
So each day, the prior day’s ATR% sets that day’s levels.
- Buy gap = 1.0 × ATR%
- Take-profit = 0.6 × ATR% (1.5 × ATR% when the close is above the 120-day MA)
Interestingly, only shrinking the take-profit in high volatility actually hurt performance.
The gap and the take-profit had to widen together.
Results: CAGR 3.1% → 7.0%, MDD -36.8% → -19.3%
I ran 375 settings over five rounds and boiled them down to three profiles.

Here is the recommended Balanced profile (20 accounts) over the full period (2021.09-2026.10). Buy&Hold in parentheses.
- CAGR: +6.99% (-2.06%)
- Total return (ROI): +41.3% (-10.1%)
- Maximum drawdown (MDD): -19.3% (-51.6%)
- Sharpe ratio: 0.52 (0.12)
- Standard deviation (annualized): 15.7% (36.3%)
- Beta: 0.35 (1.00)
- Sortino ratio: 0.78 (0.18)
On the test period (2024.07-), which wasn’t used to pick the rules, CAGR held up at 6.4%.
Parking idle cash in a money-market account (assuming 2.5% a year) lifts CAGR to 8.6%.
For smaller drawdowns there’s Conservative (24 accounts, CAGR 6.0%, MDD -15.9%); for more return, Aggressive (16 accounts, CAGR 8.3%, MDD -26.6%).

I also checked whether the start date matters.
Starting every month from October 2021 and running for 12 months each, 49 runs in total,
Balanced’s worst run was -15%, Buy&Hold’s was -36%.
The share of positive runs was 80% vs 61%.
The medians were similar (5.1% vs 5.5%). The difference was how much less bad the bad runs were.
Some things didn’t work.
Widening the gap further on crash days, re-entering quickly after selling out, and keeping part of the position as a buy-and-hold core all hurt performance.
So How Do I Trade It

There are five rules. Each asks the market a different question.
- How much is it swinging? (ATR): Buy when price falls by a normal day’s move. Tight in calm markets, wide in choppy ones, so the accounts don’t run out too fast.
- When to sell? (ATR): Sell on a rebound of about 60% of a day’s range, a distance likely reached within a day or two.
- Which phase are we in? (120-day MA): Above the six-month average is a medium-term uptrend. Rebounds run longer there, so the take-profit widens to 1.5×ATR.
- Has it run too far? (disparity): If price is more than 5% above the 20-day MA, stop new buys. Leave the sell orders on accounts already bought.
- Has it fallen too far? (%B): If price is below the lower Bollinger band, buy two accounts’ worth this time. Twenty days later it was up 61% of the time, versus 52% normally.

The real point of linking to ATR is in the last column of this table.
With a fixed 1.5% gap, all 20 accounts are full once price is about 25% below the first buy.
In a turbulent phase with ATR at 5%, the gap widens to 5%, and the same 20 accounts can absorb a -62% decline.
The problem I described last time, “all my accounts filled up and I had no more chances,” is solved by volatility itself.

Using the October 16 close:
ATR is 4.91%, twice the long-run average, so a high-volatility phase: gap 4.9%, take-profit 2.9%.
The close is below the 120-day MA, so no wider take-profit.
Disparity is 93.6 and %B is 0.20, neither overheated nor oversold. Buy one account’s worth, as usual.
Limitations
- One ETF (KOSDAQ 150) over five years, mostly a sideways-to-down market. In strong rallies it still lags Buy&Hold.
- The results approximate fills with 5-minute bars, so the actual queue order of limit orders isn’t modeled.
- Disparity 105 and %B<0 were chosen on the training period, so the test results may be a bit optimistic.
- In a long decline beyond -30%, the accounts eventually fill up and unrealized losses linger.
What’s Next
The backtesting doesn’t stop here. Next on the list:
- Download 1-minute/5-minute data for the inverse ETF (KODEX KOSDAQ 150 Futures Inverse) and test switching into it during overheated phases instead of just stopping buys
- Find the market leaders at each point in time and run the same strategy on those leading stocks instead of the ETF
- Apply the same rules to other ETFs such as the KOSPI 200, to check whether the numbers only fit the KOSDAQ 150
And starting tomorrow (October 19), I’ll trade with ATR for real.
How my actual KOSDAQ trading account has done over the past two years, and how closely real fills match the backtest from here on, I’ll share separately later.
Turning gut-feel judgment into numbers, some of it matched the textbook and some of it didn’t.
Dropping what didn’t work and keeping what did cut the drawdown nearly in half.
Now it’s time to run real money on those numbers.
Note: This post is a personal record of a backtest and is not a recommendation to buy or sell any product. Past returns do not guarantee future results.


