Translate

Korean Investor Flow Explained

Korean market data · Investor flow

Does foreign and institutional buying
move Korean stocks?

Korea publishes something most markets do not: a daily, per-stock breakdown of who bought and who sold — foreigners, institutions, or retail. Every Korean broker app shows it. Every market report quotes it. I checked what it is actually worth, using six years of it.

KOSPI & KOSDAQ, ~2,000 stocks June 2020 – August 2026 Fees and tax excluded unless stated

It is on every broker screen in the country, updated every trading day.
But does buying the next morning actually make you money?
Counting six years of it, there were two moments where it looked real.

01What this data actually is

If you trade US or European equities, there is no daily equivalent of this. You might see 13F filings quarterly, or short interest twice a month. Korea publishes investor-category flow for every listed stock, every single day.

The three categories
  1. Foreigners — trades routed through accounts registered as foreign
  2. Institutions — domestic funds, pensions, insurers, securities firms
  3. Retail — individuals, which is simply what is left over

Each is reported as net buying in number of shares, per stock, per day. When foreigners and institutions both buy the same stock on the same day, Korean media call it ssang-kkeul-i (쌍끌이) — "pulled from both sides" — and treat it as a strong signal.

Two things about the Korean market matter before going further.

KOSPI is the main board — large caps like Samsung Electronics and SK Hynix. KOSDAQ is the secondary board, closer to the Nasdaq in spirit: smaller, more technology and biotech, considerably more volatile. The regular session runs 09:00 to 15:30 Korea Standard Time (UTC+9), with no lunch break.

And the detail that shapes this entire article: the confirmed investor-flow numbers are published after the close. You cannot see the final figure during the session. Whatever you do with it, you are doing it the next day at the earliest.

02The rule I had to use

There is a common mistake when testing this data: calculating "what if I had bought at the close on the day foreigners bought."

You could not have. The number did not exist yet at 15:30. Including it means using information from the future, and the result comes out better than anything achievable in real life.

So every test here follows this sequence
  1. The market closes and the flow figures are published
  2. If the signal fires, I buy at the next morning's open
  3. I sell at the open after a fixed holding period

Nothing here requires information I could not have had at the time.

I also need something to compare against. "A 48% win rate" tells you nothing on its own. Throughout this article the benchmark is buying a random stock and holding it for the same period.

03Just following the flow

The simplest version. Foreigners were net buyers today, so I buy tomorrow's open and hold for a month.

Buying the next open after foreign net buying, one-month hold
Win rateAverage return
Following foreign buying48.30%+1.83%
Buying at random47.85%+1.76%
Difference+0.45%p+0.08%p

It did beat random. By 0.08%.

Korean brokerage commission plus the securities transaction tax comes to roughly 0.2% for a round trip. You would be paying 0.2% to earn 0.08%. Worse than doing nothing.

Requiring three or five consecutive days of net buying did not change this. Holding periods behaved differently, though — I come back to that in section 09.

04What about really heavy buying?

Not a little buying — a lot. Only days where foreign net buying exceeded 5% of that day's entire volume.

Three-month hold, average return +4.27%.
Buying at random returned +5.70% over the same periods, so the signal was 1.43 percentage points worse.

Read literally: the harder foreigners buy, the worse it goes. I nearly stopped writing here.

But it was too neatly backwards to accept. So instead of testing the signal again, I looked at what kind of day it fires on.

05The days it fires on are bad days

The answer was immediate. To absorb 5% of a day's volume, that day's volume has to be enormous. This signal only appears on days when trading explodes.

And in Korea, the day after a volume explosion is a poor day to buy — signal or no signal. Here is what happens if you take every day where turnover exceeded KRW 50 billion (about USD 36 million) and simply buy the next open, with no other condition at all.

Buying the next open after any high-turnover day, no signal required
Holding periodWin rateAverage return
1 week43.08%−0.31%
1 month40.87%−0.56%
3 months39.64%+0.12%

These days are only 4% of all trading days, and they are days you should not buy into.

So the −1.43%p was not measuring the signal. It was measuring the kind of day the signal happens to live on. I had compared a signal that only fires on bad days against ordinary days in general, and the signal took the blame.

The fix is to compare it against other high-volume days only.

The extra return from heavy foreign buying flips from negative to strongly positive to negative again as the comparison group changes, and disappears entirely once the type of stock is matched
Left: whether stocks really rose after heavy foreign buying, measured against three different comparison groups. Right: the same question after matching the type of stock.

Compared only against other high-volume days, −1.43%p became +5.68%p. This is the first moment heavy foreign buying looked genuinely good.

06But it only fires on 109 stocks

A good result deserves more suspicion than a bad one. So I counted how many different stocks this signal ever appears on.

Foreign net buying ≥ 5% of volume
  1. Fires on only 109 stocks out of roughly 2,000
  2. The top 10 stocks account for half of all occurrences
  3. The single most frequent is Samsung Biologics, at 376 occurrences

Then Samsung SDI, LG Chem, and LG Energy Solution.

This was not a signal detecting events. It was a list of the large caps foreign investors trade heavily anyway. Those names did well over this particular six-year window, and the "signal" inherited their performance.

There is a clean way to check. Compare within each stock. Measure Samsung Biologics' signal days against Samsung Biologics' ordinary days. Do that and the benefit of having picked good stocks disappears, leaving only what the signal itself is worth.

Three-month hold · the same signal against three comparison groups
Compared againstExtra return
All days−1.43%p
Other high-volume days+5.68%p
The same stock's ordinary days−0.27%p

Gone again. Within the same stock, days of heavy foreign buying did slightly worse than that stock's ordinary days.

07Measuring against the stock's own normal

There was a flaw worth fixing. "5% of volume" is an absolute yardstick. A stock where foreigners routinely handle 20% of daily volume and a stock they rarely touch were being held to the same bar — so only the first kind ever qualified.

So I changed the definition to be relative to each stock's own normal.

The kind of day this looks for

A stock where foreigners usually trade −200,000, +100,000, +200,000 shares suddenly sees +1,500,000 shares bought in a day.
"Heavy" is judged against that specific stock's usual scale, not a fixed threshold.

This time it looked different.

Absolute versus relative definition
5% of volume
(absolute)
Versus its own normal
(relative)
Stocks it fires on1092,100
Share from top 10 stocks50%1.6%
Within the same stock (3 months)−0.27%p+2.18%p

Spread across 2,100 stocks — not the product of a handful of names. And it survived the within-stock comparison, across roughly 20,000 trades, which is hard to dismiss as luck.

This was the second moment it looked real.

08Why the second one collapsed too

Comparing "within the same stock" requires knowing what kind of stock it is. But the classification I used was computed from the whole 2020–2026 window. Buying in 2022 using a number derived partly from 2025 data. Not something you could have done at the time.

So I rebuilt it using only the twelve months before each purchase: how often that stock had shown a buying spike in the prior year, and nothing after. That is genuinely knowable at the moment of buying.

Grouped by how often the stock spiked in the prior year · three-month hold
Spike frequencyExtra return
Almost never−1.32%p
1–2%−0.11%p
2–4%+1.24%p
4–8%+0.46%p
Very often−0.85%p

Some positive, some negative, no pattern. And with samples this size, chance alone produces swings of roughly ±1.5%p. Every number above sits inside that. Which means none of them mean anything.

The best group fell from +2.18%p to +1.24%p and landed inside the noise.

The one signal that looked genuine evaporated the moment I restricted it to information available in real time.

09What if you only hold for a day?

Everything so far assumed holding for a month or a quarter. But people who trade on this data do not hold that long. They are usually out within a day or two.

So I recounted everything with a one-day hold, still comparing within each stock.

Buy the next open, sell the following open · versus the same stock's ordinary days
SignalTradesExtra returnVerdict
Foreign net buying306,483−0.002%Indistinguishable
Institutional net buying289,857+0.011%Indistinguishable
Both buying (ssang-kkeul-i)139,041−0.024%Indistinguishable
Spike versus own normal19,783−0.106%Not chance
Both spiking together4,226−0.214%Not chance

The first three rows are zero. Take them or leave them.

The last two are not. They are reliably negative — with 19,783 and 4,226 trades, a deviation this consistent is very unlikely to be noise. Over three months the spike signal was "impossible to tell"; over one day it is "present, and pointing the wrong way."

And a one-day round trip pays the full 0.2% in commission and tax. The average one-day return in this market is around 0.1% either way, so the cost cannot be covered at all. Including it, every row above lands between −0.18% and −0.52%.
Held long, the signal was nothing. Held short, it was a loss.

10Ssang-kkeul-i, and what the data cannot tell you

The both-sides-buying signal was never at the top of any test. Its one-month win rate was 47.24% against 47.85% for buying at random, and tightening it to three consecutive days pushed it down to 45.97%. Separating the two categories worked better than combining them.

This data is denominated in shares, not currency. One share of a KRW 500,000 (about USD 360) stock counts the same as one share of a KRW 2,000 (about USD 1.40) stock. So "how hard did they buy" has to be measured as a share of volume or as a multiple of that stock's own normal — never as a raw number.

Now the limits.

This article tested exactly one way in
  1. The market closes
  2. The confirmed flow figures are published
  3. You buy at the next morning's open

That is the rule from section 02, and it is the only entry method measured here.

The same data can be used in other ways — when and how you enter changes the trade entirely. I tested one of them. The others are not disproved here; they are simply not covered.

Plenty is outside this dataset altogether: the order book, trade intensity, news and disclosures, and the discretionary judgement of someone who knows why a particular stock is different today.

Two more caveats. Delisted companies are absent — the dataset is built from currently listed stocks, so firms that disappeared are missing. This affects both sides of every comparison equally, so the comparisons hold, but the absolute numbers are flattered. And the window includes the post-COVID recovery.

11So what is this data good for?

Seven ways of asking, seven times nothing
  1. Buy the next open after net buying → cannot cover fees
  2. Only days above 5% of volume → worse still
  3. Compared against other high-volume days → looked good (illusion 1)
  4. Compared within the same stock → gone
  5. Measured against the stock's own normal → looked good again (illusion 2)
  6. Restricted to real-time information → inside the noise
  7. Held for a single day → not noise, but a loss

Reading the published flow figures and buying the next morning did not make money. Not for both-sides buying, not for heavy buying, not for sudden spikes. Held long it was nothing; held short it lost.

The data does explain why. Heavy foreign buying marks a day when something has already happened.

What a heavy foreign buying day actually looks like
  1. It only occurs when volume explodes — the top 4% of trading days
  2. It is a day the stock rose, not a day it fell
  3. Those stocks were already up an average of +28.8% over the prior 20 sessions

Whatever made the stock worth buying is already in the price by the time the figure is published.

Korea's investor-flow data is an excellent record of what happened today. It is not an instruction for tomorrow.

That is still worth something. If you follow the Korean market from abroad, this data tells you who was on which side of a move, in a level of detail almost no other market publishes. Just do not expect the stocks at the top of the net-buying table to keep rising — by construction they are the ones where volume exploded and the price already ran.

One footnote: there were two moments in this analysis where I thought I had found something, and both were illusions produced by what I was comparing against. I wrote about why good-looking backtest numbers are so often wrong in Overfitting — A Good Backtest Number Is Not a Good Strategy.

Based on daily investor-category trading data for KOSPI and KOSDAQ stocks from June 2020 to August 2026. The base filter is a market capitalisation above KRW 100 billion (about USD 72 million), with a same-day turnover condition added at some stages. All trades are simulated as buying at the next session's open and selling at the open after a fixed holding period. Figures in the tables exclude commission, tax and slippage except where stated. Delisted companies are not present in the dataset. USD conversions use an approximate rate of KRW 1,390 per dollar.

This is a personal data analysis record, not investment advice. Results found in historical data are not a promise about the future. All investment decisions and their consequences rest with the investor.

댓글 쓰기