Smart Money vs. Dumb Money — the persistent pattern of institutional (informed) and retail (uninformed) behavior.
• COT Report: Commitment of Traders — shows positioning of commercials (hedgers) vs. speculators
• Insider buying/selling: Insider purchases have been followed by above-average returns on average (Lakonishok & Lee 2001); insider sales say much less
• Put/Call ratio: often read as a contrarian gauge — very high readings tend to occur in sell-offs
• Fund flows: Money tends to arrive after strong returns and leave after weak ones; stocks that flows chase go on to underperform (Frazzini & Lamont 2008)
The key insight: smart money acts before the move; dumb money reacts after the move is largely complete.
A fund returns +30%, +25%, −20%, −10% and +15%: 6.1% a year. Its investors put in 100, then 200 and 400 after the two good years, and take out 300 and 100 after the bad ones. Their money-weighted return is −3.1% a year, and they end with 247 for a net 300 put in. Same fund, opposite results; the difference is timing the flows. Dichev (2007) found this gap in market-wide data.
- “Smart” and “dumb” are labels for after the fact. Institutions herd and chase too; retail flows are not always wrong.
- Insider purchases are informative on average (Lakonishok & Lee 2001), insider sales much less so — many sales are for diversification or tax.
- Commercials in the COT report are mostly hedgers; their positions reflect hedging needs as well as views.
r = np.array([0.30, 0.25, -0.20, -0.10, 0.15]) # a fund's return each year, made up
flow = np.array([100, 200, 400, -300, -100]) # money investors put in (+) or take out (-) at each year's start
value = 0.0
for f, x in zip(flow, r):
value = (value + f) * (1 + x)
fund = np.prod(1 + r) ** (1 / len(r)) - 1 # time-weighted: what the fund earned
cash = np.append(-flow, value) # the investors' own cash flows
roots = np.roots(cash[::-1]) # money-weighted: the IRR of those flows
irr = [z.real - 1 for z in 1 / roots if abs(z.imag) < 1e-9 and z.real > 0] # per-year rateAssumes import numpy as np and import pandas as pd. Each snippet carries its own example numbers; the comments say which are made up.
- I. D. Dichev, “What Are Stock Investors’ Actual Historical Returns? Evidence from Dollar-Weighted Returns”, American Economic Review 97(1), 2007
- A. Frazzini & O. A. Lamont, “Dumb Money: Mutual Fund Flows and the Cross-Section of Stock Returns”, Journal of Financial Economics 88(2), 2008
- J. Lakonishok & I. Lee, “Are Insider Trades Informative?”, Review of Financial Studies 14(1), 2001
Last reviewed October 2026 · How this site checks its content · Report a mistake