r/algotrading

Nobody talks about how long a drawdown lasts. Only how deep it goes.

Max drawdown percentage gets all the attention. Every backtest report leads with it. Every risk conversation circles back to it.But that number doesn't tell you if it lasted 3 days or 5 months.And those are completely different experiences once you're actually live.A sharp 10% that recovers in two weeks uncomfortable, but you move on. Your trust in the system stays intact.A slow 10% that just grinds with no clear bottom? That's where the real damage happens. Not to the account. To your relationship with the system.Week one you stay disciplined. Week six you're not sure if you're being patient or just stubborn. By month three you're questioning whether the edge was ever real.The math is identical. The mental experience is not.

Most backtesting tools show you depth. Almost none help you feel what duration actually does to you. So you go live thinking you understand your drawdown risk and you only find out what it really means after you've lived through a long one.I'd take a 15% drawdown that resolves fast over an 8% one that sits there for months. Every time.

Anyone else find duration harder to handle than depth? Did you account for it before going live or only after?

reddit.com
u/Thiru_7223 — 12 hours ago

I built a quant simulator- Amethyst

Hey everyone, I’m a student currently trying to learn quantitative finance more deeply, and while learning I started building a small website to help me understand models visually and practically instead of just reading papers/docs.

It currently has simulations+breakdowns for things like Monte Carlo, GBM, Ito Lemma, Heston, OU processes, etc. I also added derivations, intuition, failure cases, Python implementations, and some sandbox tools using live market data/paper trading to experiment with assumptions.

I mainly built it as a learning project for myself but I wanted to ask people here who are into/more experienced in quant/financial engineering. Few questions i wanted to ask:

- Am I learning the right things?

- Are there concepts/models I’m missing?

- Are there parts that seem unrealistic or academically incorrect?

- What would you recommend focusing on next?

I would genuinely appreciate feedback since I’m still learning and trying to improve.

https://amethyst-1fu1.vercel.app

reddit.com
u/RickHyperBoii — 14 hours ago
▲ 2 r/algotrading+1 crossposts

I put an iron butterfly on S&P futures two days before the Iran war. Here's what it did to the position.

Partner and I were in a derivatives course, both with zero background. Thesis: S&P range-bound near 6,900, IV elevated, no major catalysts. Short ATM straddle, asymmetric wings (600pt down / 250pt up), delta-neutral at open. Locked it February 26th.

Iran war started February 28th.

We had no geopolitical scan in our process at all. Didn't dismiss it, just never thought to look.

Position actually survived the initial shock. Theta kept grinding and we clawed back to +$61k by March 17th. Then Strait of Hormuz fears spiked vol again. +$61k to -$31k in 48 hours.

9 futures hedge actions over the life of the trade. None of them accounted for a second geopolitical flare-up because we never built that rule. We thought we had a systematic framework. Turns out "no major catalysts expected" is doing a lot of work when you're short vega.

Flying blind with the illusion of a system is worse than no system at all.

Curious how people here handle black swan risk in short-vega positions. Do you build explicit macro checks into pre-trade, or just size down and accept it?

reddit.com
u/raphstar_m — 20 hours ago

Feature engineering > model hacking

I recently learned about fractionally differenced features, from Marcos Lopez de Prado, and it really makes a difference in the microstructure strategy I'm exploring.

Fractional differentiation consists in transforming non-stationary features like prices into stationary features while preserving some memory.

It helps ML models generalize better while remembering past data.

u/melon_crust — 24 hours ago
▲ 16 r/algotrading+1 crossposts

Built a drawdown monitor across portfolios (since broker apps can't do it). Turns out the math is easy, the deposit/withdrawal detection isn't.

I realized there's a basic problem: Broker apps don't let us set alerts on a % variation of our balance. And if we use multiple brokers (most active traders do), there's no way to monitor drawdown across the whole portfolio. So I built one.

What I have working so far: Every minute, the agent pulls current capital across linked accounts, tracks the highest value seen (lastPeak), and computes drawdown from there. If drawdown crosses the threshold, it fires a Telegram alert. An alertTriggered flag prevents spamming, i.e. it only re-arms when the portfolio recovers back above the threshold. The first naive version was sending one alert per minute the whole time the portfolio was underwater, which is useless.

The math itself is trivial: adjust the peak by the flow amount. The annoying part is the detection layer. So what I'm going to work on next is distinguishing real drawdowns from cash flows. If I withdraw 15% of the account, that's not a 15% loss. Same in reverse: a fresh deposit pushes a new "peak" that isn't really a peak. A tricky case is when a transfer between two linked brokers looks like a withdrawal on one and a deposit on the other: net zero, but each leg looks like a flow if you only see one account.

Curious if anyone's been down this road and hit something that broke that approach.

u/Money_Horror_2899 — 1 day ago

US Tech 100 data

Could someone be kind and provide data for last 12-24 months for Nasdaq US tech 100 (\^NDX on yfinance)
5min bars - in similar format to this:
datetime, open, high, low, close, volume

Been going to different places but none of it can provide me all that without some insane 999 subscription.

reddit.com
u/-6h0st- — 23 hours ago

Any genuinely free backtesting tools?

Looking to test strategies on EOD data without hitting a paywall for anything useful. What are people actually using?

Open-source libraries are fine — happy to write code.

reddit.com
u/someonestoic — 1 day ago

A Momentum Strategy Using Leverage and Monthly Rotations

Hello all, I'm presenting the results of a simple weighted momentum strategy but one that uses leverage to amplify results. I'd love your feedback and thoughts on the viability of the strategy.

I won't go into the theory of momentum investing and only mention that momentum-based strategies seem to be the only set of strategies that consistently beat the market.

The strategy itself is simple: I construct a weighted score based on past momentum (e.g. 1 month, 3, month, etc.) with more recent momentums weighted higher. I then select the top 5 stocks and rotate monthly (buy at month's open, sell at month's close).

I select stocks using the S&P 100 universe. To minimize survivorship bias, I pulled constituents from the year previous to the test year using the wayback machine; for example, when looking at 2025, I'm using constituents as December 2024.

I then use 2X leverage on my returns. I also assume 0.2% transaction cost. I also calculate the tax burden. In Canada, half of one's capital gains are taxable; so I apply an effective tax rate of 25% on that 50%, which means about 12.5%/year (in years where there are losses taxes = 0) and this is applied at the end of the year. This is meant to be a rough estimate - taxes could be higher or lower depending on the year. Additionally you can claim losses from previous years which would lower the tax burden some years.

My results are as follow:

Strategy Metrics

CAGR (Gross): 28.6%
CAGR (After Tax): 25.0%
SPY CAGR: 13.1%

Total Tax Paid (Cumulative): 45.4%
Average Annual Tax Drag: 4.13%

Alpha (annualized): 12.7%
Beta: 1.47
Sharpe Ratio: 0.95
Max Drawdown: -38.6%

Yearly Returns

Year Gross Return SPY Return Tax Paid Net Return Strategy NAV SPY NAV
2016 10.90% 9.64% 1.36% 9.55% 1.11x 1.10x
2017 58.90% 19.40% 7.36% 51.50% 1.76x 1.17x
2018 21.00% -6.35% 2.62% 18.30% 2.13x 1.10x
2019 30.00% 28.80% 3.75% 26.20% 2.77x 1.42x
2020 33.90% 16.20% 4.24% 29.70% 3.71x 1.65x
2021 29.30% 27.00% 3.66% 25.60% 4.80x 2.10x
2022 -13.70% -19.50% 0.00% -13.70% 4.14x 1.69x
2023 81.80% 24.30% 10.20% 71.60% 7.53x 2.10x
2024 39.60% 23.30% 4.94% 34.60% 10.50x 2.59x
2025 58.20% 16.40% 7.28% 50.90% 16.60x 3.01x
2026 -3.93% 7.60% 0.00% -3.93% 16.00x 3.24x

Note that max drawdown refers to month-to-month drawdowns, so it's likely that absolute day-to-day drawdown is lower.

I would love some feedback and thoughts about whether this strategy is actually "actionable".

reddit.com
u/Expert_CBCD — 1 day ago
▲ 1 r/algotrading+1 crossposts

The key to profitability

Hey everyone,

I think the key to profitability is building a strategy with a real edge, validated through statistically significant walk-forward analysis.

I found my edge after backtesting hundreds of strategies and variations. Through that process, I came up with new ideas that helped me create a set of custom-made indicators, which I combined in different ways, optimized, and eventually turned into an edge that led to this result:

https://www.darwinex.com/account/D.384809

Risk management: position sizing based on the maximum drawdown observed in the backtests.

Disclaimer: I’m speaking only about my own logic and experience as a currency trader. Other workflows for finding an edge may exist. I personally hven’t seen verified profitable accounts using those workflows.

Structured point-in-time historical data?

Hello,

Wondering if anyone knows of any data providers that provides structured point-in-time historical data for stuff like fundamental financial data/economics data (e.g. GDP etc)? Most of the big providers that are mentioned on this sub provide only the latest revised numbers known currently which would introduce look ahead bias.

Thanks!

reddit.com
u/myztaki — 24 hours ago

What are you guys using to define a bear/bull market?

I had something as simple as MA200 and MACD indicators hit best. These give the best results. But I feel they’re too simple and doesn’t cover sectors that break out early.

What have you used to classify 2021/2022 as bear and the drops we’ve seen the past years?

reddit.com
u/qqAzo — 1 day ago

[RELEASE] pandas-ta-classic v0.6.20 - Code Modernization, Fluent Chaining, Property-Based Testing, and 89% Test Coverage etc.

Hey r/algotrading,

pandas-ta-classic is the community-maintained fork of pandas-ta — a comprehensive technical analysis library for pandas DataFrames. This release is the largest update since the fork, spanning 66 commits and 338 changed files.

GitHub: github.com/xgboosted/pandas-ta-classic
PyPI: pip install pandas-ta-classic

🎯 TL;DR

  • TA-Lib exact parity — Wilder smoothing, chained EMA lookbacks, and PSAR reversal checks now match the C library within float64 precision. All 60 oracle tests pass at tol=1e-7.
  • Fluent API chainingdf.ta.chain().sma(50).rsi().macd(). Chain indicators in one expression, call df.ta.unchain() to go back to normal mode.
  • Property-based testing — 55 Hypothesis tests verify mathematical invariants (SMA(constant) == constant, RSI ∈ [0,100]) across random inputs.
  • Test coverage 78% → 89% — 1427 tests, zero failures. Every indicator has offset, fill, and None-guard coverage.
  • Code modernized — Python 3.9–3.14, 370 dead-code instances removed, tal alias replaced with talib everywhere.

⚡ Fluent API Chaining (PR #113)

import pandas_ta_classic as ta

df = df.ta.chain().sma(50).rsi().macd().bbands(20)
# df now has SMA_50, RSI_14, MACD_12_26_9, MACDh_12_26_9, MACDs_12_26_9,
# BBL_20_2.0, BBM_20_2.0, BBU_20_2.0, BBB_20_2.0, BBP_20_2.0

df.ta.unchain()  # back to normal append mode

No more repetitive append=True on every call. The chain mode accumulates columns in one fluent expression, then unchain() returns you to standard usage.

🔬 TA-Lib Parity Fixes

Wilder's Smoothing

The PR #112 remediation extracted wilder_smooth() into a shared utility (utils/_wilder.py). It implements Wilder's cumulative-sum smoothing with the correct sum(raw[1:length]) seeding, matching TA-Lib's internal PLUS_DM / MINUS_DM calculation exactly. Used by dm.py — no more hand-rolled NumPy loop inlined.

Chained EMA Lookbacks

DEMA, TEMA, and T3 now correctly strip leading NaN before feeding EMA output back into EMA. This matches TA-Lib's lookback of depth*(length-1). Extracted into _ema_chain() in overlap/ema.py, reducing ~70 lines of repetitive boilerplate to ~10.

PSAR Reversal Check

The SAR guard (max/min clamp at row-1/row-2) now applies before the reversal test, matching TA-Lib's behaviour. Previously, the raw projected SAR was checked, causing off-by-one splits at reversal bars.

Bug Fixes

  • cdl_doji — fixed <<= threshold and added shift(1) to match TA-Lib's look-ahead behavior
  • ichimokuapply_fill now covers all 5 output series (was 3)
  • pvr — added None-guard, offset, and fill support
  • 13 indicators — added missing apply_fill for fillna/fill_method kwargs

🧪 Test Infrastructure

assertions.py + IndicatorSpec

assert_indicator_standard(self, IndicatorSpec(
    func=ta.rsi,
    args=[self.close],
    expected_name="RSI_14",
    expected_type=Series,
    none_arg_idx=0,
))

One call tests: return type, name, columns (DataFrame), offset, fill (fillna, ffill, bfill), None-guard, and length-in-name. Applied uniformly across all indicator test modules.

Property-Based Testing

55 Hypothesis tests using @given(price_series(), ...). Examples:

  • SMA(constant) == constant for all window sizes
  • BBANDS: lower ≤ mid ≤ upper for every row
  • RSI output always ∈ [0, 100]
  • STDEV always non-negative
  • Offset preserves length, fillna removes NaN
  • verify_series(None) returns None

Fixture Auto-Regeneration

tests/__init__.py now regenerates expected_values.json and regression_snapshots.json on import when TA-Lib is installed. No more stale fixtures — test data is always in sync with the code.

make test-all   # regenerate fixtures + run 1427 tests
make fixtures   # regenerate fixture JSONs only (requires TA-Lib)

Oracle Parity

  • 60/60 TA-Lib oracle tests now pass at tol=1e-7 — exact float64 match achieved by the Wilder smoothing and chained EMA fixes

📦 Package & Quality

Code Modernization

  • Removed 279 unnecessary # -*- coding: utf-8 -*- declarations (UP009)
  • 65 useless f"..." prefixes (no placeholders) removed
  • 87 unused imports removed across candle/overlap/momentum modules
  • Optional[X]X | None, List[Y]list[Y] (pyupgrade)
  • taltalib rename — all test files now import talib directly
  • ruff CI-critical checks (E9, F63, F7, F82) — all passed

Python Support

Tested and passing on Python 3.10, 3.11, 3.12, 3.13, 3.14.

🔗 Links

u/AMGraduate564 — 1 day ago

People say “learn about money” until you mention trading 😅

Then suddenly you’re:

  • a scammer
  • a crypto bro
  • a fake guru
  • or someone trying to sell a course

Honestly it’s kind of crazy how negative the reaction is sometimes — even in normal real life conversations.

I get why though. Social media completely destroyed trust in the space. Too many fake lifestyles, screenshots and people pretending trading is instant freedom.

But not everyone is trying to flex Lambos or sell dreams.

Some people are literally just trying to:

  • learn a skill
  • build a second income
  • understand markets
  • or grow small amounts over time

Feels like trading became “guilty until proven innocent” 😄

Curious if other people here have noticed the same thing when talking about trading with friends/family/random people?

reddit.com
u/Odd-East3954 — 1 day ago

historical Polymarket orderbook data recommendation

I am looking for historical full orderbook depth data, mainly for crypto and equities. (Will X go up or down?,What will X close at?,Will X hit a specific price level?,...) I would need at least 2-3 years of history.

I have came across the vedors below:
https://marketlens.trade/ (maybe I could fit into 39/mo plan, if not then 199/mo)
https://www.probalytics.io/ (249/mo)
https://telonex.io/ (79/mo)

(I am a fan of parquet but, I can work with any other formats as well)

Anyone have tried these?
Are there any other vendors out there I have miseed?
How is the data quality?

Thank you for your recommendations in advance.

u/Ok-Hovercraft-3076 — 1 day ago

What order types does your broker API support for AI agents?

Something I don't see talked about much: the order types your broker API supports are basically a hard cap on what your agent can actually do.

Most APIs handle market and limit fine. But trailing stop, stop limit, market if touched, those are either missing entirely or you have to simulate them yourself at the application layer. Which means your code is the one watching price, deciding when to trigger, and submitting the order. That's a lot to trust to your own connection stability.

Seen people build some pretty involved workarounds but it always feels like adding risk to an already complicated stack.

What broker APIs is everyone using and which advanced order types actually work natively? Specifically asking about trailing stop, stop limit, market if touched, limit if touched.

reddit.com
u/KillMe_ow — 2 days ago

How many brokers do you trade across?

For those running across multiple brokers: what pushed you past one? Was it instruments, fees, redundancy, or something else? And at what point did the complexity start costing you more than it saved?

reddit.com
u/Money_Horror_2899 — 2 days ago

10x Stocks: The DNA of Multibaggers

Every investor dreams of finding companies that multiply by 5, by 10, or by 100. It is the philosopher’s stone of investing, the holy grail, the elixir of life for people obsessed with looking at charts and reading fundamentals.

When I started investing, one of the books that fascinated me the most was 100 Baggers: Stocks That Return 100-to-1 and How to Find Them, by Chris Mayer. It was incredible. The promise was that instead of finding stocks that would make me rich at 67, they could let me retire at 35.

Since then, I have read other “studies” on the topic with the same enthusiasm. Unfortunately, they all have one fatal flaw: anecdotes, qualitative analysis, and little evidence of causality. My engineer soul was missing something more rigorous.

Luckily, I recently came across a paper that tries to go one step further: The Alchemy of Multibagger Stocks, by Anna Yartseva.

Although the paper is not perfect, far from it, it brings a more methodological and scientific approach to the subject. It does several things I like.

It starts with a review of what has traditionally been said about multibaggers, which is perfect for anyone who has never read anything on the topic. Then it tries to study what characteristics these companies shared, starting from the Fama-French five-factor model, and later adapting the model to multibaggers. In the process, it uncovers a few things that had rarely been discussed before.

Today’s post is about this paper and some of its most interesting conclusions. I have published the full article on my website, with a more detailed analysis, interactive widgets, and a more rigorous critique for anyone who wants to read it. In this article, I am only going to comment briefly on some interesting conclusions.

In the original post, I also go through the “anatomy of a classic multibagger”, which summarizes what was commonly known about multibaggers and is also very useful for anyone interested in the topic.

Experiment

The study analyzes companies listed on the NYSE and NASDAQ, including ADRs, between 2009 and 2024.

The window starts just after the financial crisis and covers 15 very eventful years: bull and bear markets, COVID, inflation, interest rates, the banking crisis, wars, and commodity shocks.

It identifies more than 500 stocks that reached a 10x return, but only keeps those that maintained that level until the end and removes those with incomplete data. The final sample consists of 464 multibaggers.

What is interesting is that it does not only look at the 2009-2024 increase, but also at the companies’ prior history from the year 2000 onward. The idea is not simply to celebrate winners after the fact, but to look for signals that were already present before the big move.

Starting point: the Fama-French five-factor model

The analysis starts with the Fama-French five-factor model, one of the most widely used frameworks to explain why some stocks earn higher returns than others.

The idea, simplifying a lot, is that a stock’s return can be explained by its exposure to several factors: market, size, valuation, profitability, and investment.

https://preview.redd.it/jgkmio6f922h1.png?width=1506&format=png&auto=webp&s=1d84979d401232a544e01622879d338094fa725b

In other words, the model tries to explain how much a stock has earned by comparing it with what a risk-free asset would have earned and by seeing how much of that return comes from different known factors.

https://preview.redd.it/mo49unng922h1.png?width=1628&format=png&auto=webp&s=de5edd773aded66713c88165063f4990e045f8a7

The appeal of the model is that it lets you ask a very useful question: did multibaggers earn so much simply because they were exposed to known factors such as size, value, or profitability, or was there something else?

And that “something else” is exactly what the study tries to find.

https://preview.redd.it/4919o6si922h1.png?width=1640&format=png&auto=webp&s=7d07657d452c642931f6929a9b00153c6ec37ef3

https://preview.redd.it/3fititlj922h1.png?width=1508&format=png&auto=webp&s=6cd28ebdf673fd874d87f0e4bcba470d797e0e03

Alpha and beta

In a factor regression, beta measures how much a stock moves relative to the market. A beta of 1 means it moves more or less like the market; above 1, it is more sensitive; below 1, less so.

Alpha is what remains after explaining the return using the model’s factors: market, size, value, profitability, and investment. Put simply, it is the part of the return that the model cannot explain.

But be careful: alpha is not an explanation. It is a clue. It may reflect a real company advantage, a missing factor in the model, or simple statistical noise. That is why it should be treated as an interesting signal, not definitive proof.

The study uses the Fama-French five-factor model to see whether it can explain the historical returns of multibaggers.

The basic idea of the model is that, over the long term, small, cheap, profitable companies with prudent investment tend to do better. To test whether this also holds here, the study sorts the companies in the sample, between 2000 and 2024, into different groups:

  • Size: small, medium, and large.
  • Valuation: low, medium, and high, using book-to-market.
  • Profitability: robust or weak.
  • Investment: conservative or aggressive, based on asset growth.

When all of these are crossed, the result is 36 different portfolios.

The objective is twofold:

  1. To check whether the classic factors also work within the multibagger universe.
  2. To measure how much unexplained alpha remains. If a lot of return remains outside the model, it means these companies have something that the five factors do not capture well.

And that is where things start to get interesting: looking for more specific variables to understand where that extraordinary return really came from.

The results

The table groups the companies by size, valuation, profitability, and investment, and colors the return of each combination to quickly show what works best.

https://preview.redd.it/7glxh1lq922h1.png?width=1782&format=png&auto=webp&s=4963488717f91ac9e60849064829ca741f0db2d9

The best portfolio appears among small, cheap, profitable companies with aggressive investment. In other words: small caps, with high book-to-market, good operating profitability, and strong asset growth.

The main conclusions are quite clear:

  • Size helps: small companies beat medium-sized companies on average, and medium-sized companies beat large ones. But the median is not as clean, so simply buying small caps is not magic either.
  • Valuation matters: even within multibaggers, cheaper companies tend to do better.
  • Profitability also matters: companies with weak profitability deliver worse results than profitable ones.

And the big surprise is investment. According to Fama and French, companies that invest aggressively should do worse. But here, almost the opposite happens: companies with higher asset growth achieve better returns. It makes sense. A company that wants to multiply cannot stand still. It needs to reinvest, grow, and build something much bigger.

Then, the study runs a regression to see how much the five factors explain. And here is the important part: operating profitability contributes little, these stocks have high beta, and alpha remains too high.

Translation: the five-factor model does not explain multibaggers very well. It captures part of the story, but it misses something important. And that is exactly where the interesting part begins.

Improving the model

Because the classic Fama-French model leaves too much alpha unexplained, the study tries to adapt it better to the case of multibaggers.

To do this, it tests different metrics for size, valuation, profitability, and investment: market capitalization, enterprise value, sales, book-to-market, P/E, price-to-sales, margins, ROE, return on capital, asset growth, EBITDA, and free cash flow.

In an intermediate version, the study changes some variables: it uses TEV for size, P/E for valuation, and EBITDA margin for profitability. But P/E ends up losing weight because it adds too much noise: it does not work for loss-making companies and explodes when earnings are very low. That is why the most useful valuation metrics end up being B/M and FCF/P, meaning how much free cash flow the company generates relative to the price paid.

The most interesting part is investment.

The study introduces a variable that detects when assets grow faster than EBITDA. And the result is strong: when a company expands assets faster than EBITDA growth, the following year’s return falls by around 22.8 percentage points.

The interpretation is quite clear: multibaggers need to invest, grow, and expand capacity. But that investment has to be accompanied by real EBITDA growth. If assets grow and EBITDA does not follow, the company is probably buying bad growth, inflating its balance sheet, or reinvesting at mediocre returns.

In short: the best multibaggers are not only small, cheap, and profitable. They also know how to invest aggressively without destroying returns. It is not about growing for the sake of growing, but about growing with profits behind it.

Static and dynamic return models

Here the objective changes: the author is no longer trying to see whether multibaggers fit into Fama-French, but to build a more complete model to explain their future returns.

To do this, she tests more than 150 variables: growth, valuation, profitability, quality, debt, solvency, momentum, interest rates, analysts, investment, R&D, marketing, and sector comparisons. Much more than the classic “small, cheap, and profitable”.

To separate signal from noise, she uses Hendry’s general-to-specific methodology: you start with a huge model and gradually remove what does not add value until you are left with something cleaner and more robust. First, you throw everything into the pot. Then you remove ingredients until the thing finally tastes like something.

The interesting part of the analysis is here: it moves from describing what multibaggers looked like after the fact to trying to identify which variables best explained their returns before they happened. It is not perfect, but this is where the most useful conclusions for investors appear.

Main results

The model works reasonably well: almost all coefficients have the expected sign. The market matters, size penalizes returns, valuation matters a lot, and investment only works if it is accompanied by real EBITDA growth.

The most important conclusions are:

  • Multibaggers also depend on the market. When the S&P 500 helps, it helps them too; when the environment gets difficult, they also suffer.
  • Size remains key: the larger the company, the lower its future return tends to be. Multiplying by 10 from a small base is much easier than doing so from a gigantic base.
  • Profitability matters, but less than expected. In the dynamic models, EBITDA margin loses strength and ROA works better. Even so, FCF/P ends up carrying more weight than many classic profitability metrics.
  • Accounting growth disappoints. Variables such as revenue growth, EBITDA growth, EPS growth, or free cash flow growth are not especially significant. This does not mean growth does not matter. It means that within a sample of companies that already became multibaggers, the price paid, FCF yield, and quality of investment explain future returns better.
  • Investment is useful, but with one condition: if assets grow faster than EBITDA, future returns fall. In other words, growing for the sake of growing is not enough. If the company invests heavily but EBITDA does not follow, it may be buying bad growth or reinvesting at mediocre returns.
  • Interest rates also matter. In periods of rising rates, future multibagger returns fall significantly. This makes sense: the more a company depends on future cash flows, the more it suffers from a higher discount rate.
  • Valuation is the main protagonist. Book-to-market and FCF/P are the most powerful variables in the model. Even the best growth stocks need to be bought at reasonable prices. It is not enough to grow a lot; what you pay matters enormously.
  • P/E does not work well because it breaks with loss-making companies or companies with very small earnings. That is why the study prefers B/M and FCF/P.
  • Momentum behaves strangely: the effect seems very short-lived and quickly reverses. Buying right after a big move can be expensive.

There are also variables that surprisingly add little: debt, debt coverage, Altman Z-score, buybacks, dividends, share issuance, and R&D. But be careful not to misinterpret this: because the analysis only studies companies that survived and ended up being winners, there is selection bias. The fact that debt does not explain much within the survivors does not mean it does not matter when trying to avoid dying along the way.

In other words, the best multibaggers are not simply companies that grow a lot. They tend to be small, reasonably cheap, profitable companies that can invest without destroying capital and that are bought before the market has discounted too much future growth.

Conclusions

The study challenges some dogmas about multibaggers. Not because growth does not matter, but because isolated accounting growth explains less than expected. Valuation, free cash flow yield, size, interest rates, and investment quality matter more.

  • The best multibaggers tend to be small, cheap, profitable companies capable of investing aggressively without destroying capital. The key is that asset growth must be accompanied by real EBITDA growth. If assets grow but EBITDA does not, that is a bad sign.
  • Free cash flow yield appears as one of the most important variables. It is not enough to grow a lot: the company also has to generate cash and trade at a reasonable price.
  • Interest rates also matter. In rising-rate environments, multibaggers suffer much more than many would assume. They are not immune to the cost of money.
  • And momentum works in a counterintuitive way: buying near 12-month highs does not seem to help. In fact, the best opportunities usually appear when the stock is closer to its lows and after meaningful declines. That may be where the market has not yet discounted too much future growth.

In short: a multibagger is not simply “a company that grows a lot”. According to this study, the most attractive combination would look more like this: a small, cheap, profitable company, with good free cash flow yield, capable of investing without destroying capital, and bought at a moment when the market is not yet too excited.

So yeah, it was never going to be easy.

reddit.com
u/Jera_Value — 3 days ago