<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: NoMad Paolo</title>
    <description>The latest articles on DEV Community by NoMad Paolo (@nomad_paolo).</description>
    <link>https://dev.to/nomad_paolo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3962284%2F51a0fe3b-107f-42b9-a646-34135f7ea257.png</url>
      <title>DEV Community: NoMad Paolo</title>
      <link>https://dev.to/nomad_paolo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nomad_paolo"/>
    <language>en</language>
    <item>
      <title>I ran 20,000 Monte Carlo simulations to find the best position size. The 'average' result is a trap.</title>
      <dc:creator>NoMad Paolo</dc:creator>
      <pubDate>Mon, 01 Jun 2026 08:31:57 +0000</pubDate>
      <link>https://dev.to/nomad_paolo/i-ran-20000-monte-carlo-simulations-to-find-the-best-position-size-the-average-result-is-a-trap-5ed4</link>
      <guid>https://dev.to/nomad_paolo/i-ran-20000-monte-carlo-simulations-to-find-the-best-position-size-the-average-result-is-a-trap-5ed4</guid>
      <description>&lt;p&gt;Most traders obsess over win rate and entries. But there's one parameter that decides whether a &lt;em&gt;profitable&lt;/em&gt; strategy makes you rich or wipes you out — and it isn't either of those. It's &lt;strong&gt;position size&lt;/strong&gt;: how much of your account you risk on each trade.&lt;/p&gt;

&lt;p&gt;I didn't want to hand-wave this, so I wrote a Monte Carlo simulation. Take one fixed, &lt;strong&gt;positive-expectancy&lt;/strong&gt; strategy, change &lt;em&gt;only&lt;/em&gt; the risk per trade, and run 20,000 parallel accounts through 200 trades each. The result is one of the most counterintuitive things in trading math — and it's a clean little NumPy exercise. Code is included; run it yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup: a strategy that should print money
&lt;/h2&gt;

&lt;p&gt;Let's define an edge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Win rate:&lt;/strong&gt; 45%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reward:risk:&lt;/strong&gt; 2:1 (a win gains twice what a loss costs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expectancy per trade:&lt;/strong&gt; &lt;code&gt;0.45 × 2 − 0.55 × 1 = +0.35R&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's positive. On paper this strategy makes money. The question is not &lt;em&gt;whether&lt;/em&gt; to trade it — it's &lt;em&gt;how much&lt;/em&gt; to bet each time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a winning strategy can still go to zero
&lt;/h2&gt;

&lt;p&gt;Returns compound &lt;strong&gt;multiplicatively&lt;/strong&gt;, and that asymmetry is brutal. Lose 50% and you need +100% just to get back to even. Lose 65% and you need +186%. A long enough losing streak — which &lt;em&gt;will&lt;/em&gt; happen to everyone — can dig a hole deep enough that the math can no longer climb out, even with a positive edge.&lt;/p&gt;

&lt;p&gt;So the real question becomes: at what risk-per-trade does a winning edge survive long enough to actually pay off?&lt;/p&gt;

&lt;h2&gt;
  
  
  The simulation
&lt;/h2&gt;

&lt;p&gt;Each "trader" starts at $10,000, risks a fixed fraction of their &lt;strong&gt;current&lt;/strong&gt; equity on every trade (so wins and losses compound), and we track two things per account: the final balance, and the worst drawdown it ever experienced along the way.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;N_SIMS&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20_000&lt;/span&gt;     &lt;span class="c1"&gt;# parallel accounts
&lt;/span&gt;&lt;span class="n"&gt;N_TRADES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;        &lt;span class="c1"&gt;# trades per account
&lt;/span&gt;&lt;span class="n"&gt;START&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10_000&lt;/span&gt;     &lt;span class="c1"&gt;# starting balance
&lt;/span&gt;&lt;span class="n"&gt;WIN_PROB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.45&lt;/span&gt;       &lt;span class="c1"&gt;# 45% win rate
&lt;/span&gt;&lt;span class="n"&gt;WIN_R&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;        &lt;span class="c1"&gt;# win = +2R
&lt;/span&gt;&lt;span class="n"&gt;LOSS_R&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;        &lt;span class="c1"&gt;# loss = -1R
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;simulate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;risk_frac&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;equity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;full&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N_SIMS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;START&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;peak&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;equity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;max_dd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;zeros&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N_SIMS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N_TRADES&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;wins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N_SIMS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;WIN_PROB&lt;/span&gt;
        &lt;span class="n"&gt;pnl&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wins&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;risk_frac&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;WIN_R&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;risk_frac&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;LOSS_R&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;equity&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;pnl&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;                 &lt;span class="c1"&gt;# compound
&lt;/span&gt;        &lt;span class="n"&gt;peak&lt;/span&gt;    &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;peak&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;equity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;max_dd&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_dd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;equity&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;peak&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;equity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_dd&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.02&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.25&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;simulate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risk &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
          &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;median final $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
          &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;P(DD&amp;gt;=50%) &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
          &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;median max DD &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The whole thing is vectorized across all 20,000 accounts at once, so it runs in well under a second.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results — the seductive part
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ers0q217k2tvppxibk3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ers0q217k2tvppxibk3.png" alt=" " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Risk / trade&lt;/th&gt;
&lt;th&gt;Median final balance&lt;/th&gt;
&lt;th&gt;P(≥50% drawdown)&lt;/th&gt;
&lt;th&gt;Median worst drawdown&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;td&gt;$19,674&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;td&gt;$36,972&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;18%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;td&gt;$188,338&lt;/td&gt;
&lt;td&gt;19%&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;$1,238,763&lt;/td&gt;
&lt;td&gt;94%&lt;/td&gt;
&lt;td&gt;67%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;$3,097,302&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;84%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;$3,100,429&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;93%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;$1,273,363&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;98%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read the &lt;strong&gt;median final balance&lt;/strong&gt; column. More risk → more money. At 2% you median ~$37k. At 20%, ~$3.1M — almost a hundred times more. If you stopped reading here, you'd crank the risk to the moon.&lt;/p&gt;

&lt;h2&gt;
  
  
  The twist
&lt;/h2&gt;

&lt;p&gt;Now look at what that "average" costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqr0ip27t27ylyf5r3vka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqr0ip27t27ylyf5r3vka.png" alt=" " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At &lt;strong&gt;20% risk, 100% of accounts suffered a drawdown of 50% or worse&lt;/strong&gt;, and the &lt;em&gt;median&lt;/em&gt; account's worst drawdown was &lt;strong&gt;93%&lt;/strong&gt;. The $3.1M median sits on top of a path that, at some point, took almost everything away from almost everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the average lies: survivorship bias
&lt;/h2&gt;

&lt;p&gt;That $3.1M median is a number you can &lt;strong&gt;never actually collect&lt;/strong&gt;. To reach it, you'd have to sit through a 93% drawdown without flinching — but at 93% down, one of three things has already happened:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You got a margin call and the exchange closed you.&lt;/li&gt;
&lt;li&gt;You capitulated and turned off the strategy (no human watches 93% evaporate and stays calm).&lt;/li&gt;
&lt;li&gt;Your risk desk / fund pulled the plug.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The mean and median final balance quietly &lt;strong&gt;assume you survive every path&lt;/strong&gt;. Real accounts don't. The metric that actually matters isn't expected final value — it's &lt;strong&gt;P(surviving the path)&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The median even turns on you
&lt;/h2&gt;

&lt;p&gt;Notice the bottom row: at 25% risk you median &lt;em&gt;less&lt;/em&gt; than at 15–20%. Past a certain fraction, over-betting erodes even the &lt;em&gt;typical&lt;/em&gt; outcome — volatility drag gives back more than size adds. That tipping point isn't arbitrary; it has a name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Kelly
&lt;/h2&gt;

&lt;p&gt;The growth-optimal fraction is given by the &lt;strong&gt;Kelly criterion&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# f* = (p·b − q) / b,  with p=win prob, q=1−p, b=reward:risk
&lt;/span&gt;&lt;span class="n"&gt;kelly&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WIN_PROB&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;WIN_R&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;WIN_PROB&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;WIN_R&lt;/span&gt;
&lt;span class="c1"&gt;# = (0.45·2 − 0.55) / 2 = 0.175  → 17.5%
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full Kelly (17.5% here) maximizes long-run growth — and you just saw what its drawdowns look like (84% at 15%). That's why practitioners trade &lt;strong&gt;fractional Kelly&lt;/strong&gt; — a half or a quarter of it — and why "risk 1–2% per trade" is the rule of thumb that keeps real humans in the game.&lt;/p&gt;

&lt;p&gt;1–2% isn't timid. It's the only band where the median is healthy &lt;strong&gt;and&lt;/strong&gt; survival is near-certain (0% of accounts hit a 50% drawdown). Everything to the right looks better on a spreadsheet and ends in liquidation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Optimize for surviving the path, not for the average outcome.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A smaller edge you can hold through beats a bigger one that liquidates you before it ever pays off. Win rate and entries get all the attention; position size quietly decides who's still trading next year.&lt;/p&gt;




&lt;p&gt;I packaged this exact math into a few free calculators — position size, liquidation price, and risk of ruin — at &lt;strong&gt;&lt;a href="https://riskdesks.com" rel="noopener noreferrer"&gt;riskdesks.com&lt;/a&gt;&lt;/strong&gt;, no signup. Or just copy the code above and try to break it: change the win rate, the R:R, the number of trades, and watch where the "average" stops being something you could ever actually keep.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you run it and get an interesting result, drop it in the comments — I'm curious what edge/sizing combos people are actually using.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>datascience</category>
      <category>finance</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
