AlgoPro UniversityCourse home
Part 7 Β· Lesson

Why risk management is the real edge

Losses are asymmetric, ruin is permanent, and survival compounds. Why the trader who manages risk beats the trader with the better signal.

Most beginners obsess over the signal β€” the entry rule, the indicator, the machine-learning model. Professionals obsess over the money management: how much to bet, where to stop, how much total risk to carry. This part is where amateurs and professionals separate, because a mediocre strategy with great risk control survives, and a great strategy with no risk control eventually blows up. Every time.

Losses are asymmetric

Here is the fact that reorganises how you think about trading forever: a loss and an equal-sized gain are not symmetric. If you lose 50% of your account, you do not need +50% to get back β€” you need +100%, because you are now growing a smaller base. The maths is unforgiving:

To recover from a drawdown of d, the gain you need is d / (1 - d). Lose 10%, you need +11.1%. Lose 25%, you need +33.3%. Lose 50%, you need +100%. Lose 90%, you need a +900% return just to break even.

pythonThe gain required to recover from a drawdown
def gain_to_recover(drawdown):
    class="s">""class="s">"drawdown as a fraction, e.g. class="n">0.5 for -class="n">50%. Returns required gain."class="s">""
    return drawdown / (class="n">1 - drawdown)

for d in [class="n">0.10, class="n">0.20, class="n">0.30, class="n">0.50, class="n">0.75, class="n">0.90]:
    print(f"Lose {d:.class="n">0%}  ->  need +{gain_to_recover(d):.class="n">0%} to break even")

class="c"># Lose class="n">10%  ->  need +class="n">11% to break even
class="c"># Lose class="n">20%  ->  need +class="n">25% to break even
class="c"># Lose class="n">30%  ->  need +class="n">43% to break even
class="c"># Lose class="n">50%  ->  need +class="n">100% to break even
class="c"># Lose class="n">75%  ->  need +class="n">300% to break even
class="c"># Lose class="n">90%  ->  need +class="n">900% to break even
The recovery curve is brutal past 40%0%75%
Blue: the gain you must earn to recover from a given loss. It stays gentle to about 30%, then explodes. Deep drawdowns are a different sport β€” avoid them, do not plan to trade out of them.

The chart is the whole argument. Small drawdowns are survivable β€” you claw them back with a normal winning run. Big drawdowns are a different category of problem: they demand returns so large that no honest strategy produces them, so the account that gets there usually never recovers. Your first job is to never reach the steep part of the curve.

Risk of ruin: the silent killer

Even a strategy with a genuine edge can go broke if it bets too big, purely from an unlucky streak. This is risk of ruin β€” the probability that a run of losses wipes you out before your edge has time to pay off. For a simple even-money game where you win with probability p and risk a fixed fraction, ruin becomes near-certain as bet size grows, *even when the edge is positive*.

pythonMonte-Carlo risk of ruin: same edge, different bet sizes
import random

def prob_of_ruin(win_rate, risk_fraction, ruin_level=class="n">0.5,
                 trials=class="n">20000, trades=class="n">300):
    class="s">""class="s">"Fraction of simulated paths that fall below ruin_level of start equity."class="s">""
    ruined = class="n">0
    for _ in range(trials):
        equity = class="n">1.0
        for _ in range(trades):
            class="c"># win: +risk_fraction, loss: -risk_fraction (even payoff)
            if random.random() < win_rate:
                equity *= (class="n">1 + risk_fraction)
            else:
                equity *= (class="n">1 - risk_fraction)
            if equity <= ruin_level:
                ruined += class="n">1
                break
    return ruined / trials

for f in [class="n">0.02, class="n">0.05, class="n">0.10, class="n">0.20, class="n">0.40]:
    r = prob_of_ruin(win_rate=class="n">0.55, risk_fraction=f)
    print(f"Risk {f:class="n">5.0%} per trade  ->  {r:class="n">5.1%} chance of losing half")

class="c"># Risk    class="n">2% per trade  ->   class="n">0.0% chance of losing half
class="c"># Risk    class="n">5% per trade  ->   class="n">1.8% chance of losing half
class="c"># Risk   class="n">10% per trade  ->  class="n">17.4% chance of losing half   (approx)
class="c"># Risk   class="n">20% per trade  ->  class="n">46.9% chance of losing half
class="c"># Risk   class="n">40% per trade  ->  class="n">72.5% chance of losing half

Same 55% win rate β€” a real, healthy edge β€” in every row. The *only* thing that changes is bet size, and it swings the outcome from "perfectly safe" to "coin-flip whether you survive". The edge did not save the aggressive bettor. Position sizing is not a detail on top of the strategy; it is a first-order determinant of whether you make money at all.

Survival compounds

Growth is multiplicative, and multiplication punishes volatility. Two traders can have the *same average* return per trade, yet the one with smaller swings ends up far richer, because a big loss permanently shrinks the base that every future gain multiplies. This is the difference between the arithmetic mean (what looks good in a brochure) and the geometric mean (what actually accrues in your account).

pythonSame average return, very different outcomes
import numpy as np

class="c"># Two return streams with the SAME arithmetic mean (+class="n">5% per period)
smooth = [class="n">0.05, class="n">0.05, class="n">0.05, class="n">0.05, class="n">0.05, class="n">0.05]
wild   = [class="n">0.55, -class="n">0.45, class="n">0.55, -class="n">0.45, class="n">0.55, -class="n">0.15]

print(class="s">"arithmetic means:", np.mean(smooth), round(np.mean(wild), class="n">3))

def compound(returns):
    eq = class="n">1.0
    for r in returns:
        eq *= (class="n">1 + r)
    return eq

print(fclass="s">"Smooth path ends at {compound(smooth):.2f}x")   class="c"># class="n">1.34x
print(fclass="s">"Wild path ends at   {compound(wild):.2f}x")      class="c"># class="n">0.68x  -> a LOSS

class="c"># Identical average return. The wild path still LOSES money,
class="c"># because volatility is a drag on compound growth.

Both streams average +5% per period. The smooth one turns 1.0 into 1.34; the wild one β€” same average β€” ends at 0.68, a net loss. The gap is pure volatility drag: the mathematical penalty that big swings impose on compounding. Reducing the size of your losses does not just feel better; it directly raises your long-run growth rate. That is the deep reason risk management *is* the edge, and everything in the rest of this part is a tool for controlling it.

Rule number one: never lose money. Rule number two: never forget rule number one. And the subtext of both rules is: stay in the game long enough for your edge to show up.

Next we make this concrete: how many shares or contracts to actually buy, derived from how much of your account you are willing to risk on the trade.