<?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: Pitt1904</title>
    <description>The latest articles on DEV Community by Pitt1904 (@cryptohopper1904jpg).</description>
    <link>https://dev.to/cryptohopper1904jpg</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4007539%2F0a84db75-8b33-4994-8fda-4ed8fddbbbef.jpg</url>
      <title>DEV Community: Pitt1904</title>
      <link>https://dev.to/cryptohopper1904jpg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cryptohopper1904jpg"/>
    <language>en</language>
    <item>
      <title>Your Real Risk Isn't One EA's Drawdown — It's the Combined Drawdown</title>
      <dc:creator>Pitt1904</dc:creator>
      <pubDate>Mon, 29 Jun 2026 09:41:45 +0000</pubDate>
      <link>https://dev.to/cryptohopper1904jpg/your-real-risk-isnt-one-eas-drawdown-its-the-combined-drawdown-2g92</link>
      <guid>https://dev.to/cryptohopper1904jpg/your-real-risk-isnt-one-eas-drawdown-its-the-combined-drawdown-2g92</guid>
      <description>&lt;p&gt;If you run more than one automated strategy — a couple of Expert Advisors on MT4/MT5, a few copy-traded signals, maybe a prop-firm challenge on the side — there's a number that quietly decides whether you survive a bad week. It's &lt;strong&gt;not&lt;/strong&gt; the max drawdown of your best bot, and it's &lt;strong&gt;not&lt;/strong&gt; the average of your bots. It's the &lt;strong&gt;combined drawdown of the whole portfolio&lt;/strong&gt;, and most retail algo traders never actually compute it.&lt;/p&gt;

&lt;p&gt;This post is about why that number is the one that matters, and how to measure it without any fancy tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Per-EA drawdown lies to you
&lt;/h2&gt;

&lt;p&gt;Say you run three EAs. Each one, backtested in isolation, shows a comfortable 12% max drawdown. Pleasant. So your portfolio drawdown is… 12%? Maybe less, because of diversification?&lt;/p&gt;

&lt;p&gt;Only if the three are uncorrelated. In practice, retail EAs are correlated far more often than their authors admit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Same regime sensitivity.&lt;/strong&gt; A trend-follower, a breakout bot, and a "news spike" martingale all tend to bleed in the same choppy, range-bound conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same instrument cluster.&lt;/strong&gt; EURUSD, GBPUSD and EURGBP are not three independent bets. When the dollar moves, they all move.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same hidden tail.&lt;/strong&gt; Grid and martingale systems look uncorrelated 95% of the time, then take their worst losses &lt;em&gt;simultaneously&lt;/em&gt; during the exact volatility spike that triggers all of them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the bad day comes, correlations snap toward 1, and your three "12%" strategies draw down together. The portfolio can briefly sit at 25–30% while every individual equity curve looks "within spec."&lt;/p&gt;

&lt;h2&gt;
  
  
  The number you actually want
&lt;/h2&gt;

&lt;p&gt;Combined drawdown is defined on the &lt;strong&gt;aggregate equity curve&lt;/strong&gt;, not on any single account:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For each point in time &lt;em&gt;t&lt;/em&gt;, sum the equity (balance + floating P/L) of &lt;strong&gt;all&lt;/strong&gt; accounts:
&lt;code&gt;E(t) = Σ equity_i(t)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Track the running peak of that aggregate:
&lt;code&gt;Peak(t) = max(E(τ) for τ ≤ t)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The combined drawdown at &lt;em&gt;t&lt;/em&gt; is:
&lt;code&gt;DD(t) = (Peak(t) − E(t)) / Peak(t)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Your portfolio &lt;strong&gt;max drawdown&lt;/strong&gt; is &lt;code&gt;max(DD(t))&lt;/code&gt; over the period.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The critical detail is step 1: you must sum &lt;strong&gt;floating&lt;/strong&gt; equity, including open positions, sampled on the &lt;strong&gt;same clock&lt;/strong&gt;. Summing closed-trade results per account and stitching them together hides exactly the moment you care about — when every bot is underwater &lt;em&gt;at the same time&lt;/em&gt; but none has closed yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal way to do it
&lt;/h2&gt;

&lt;p&gt;You don't need a data platform. A daily (or hourly) snapshot is enough to catch the shape:&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;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="c1"&gt;# one row per (timestamp, account) with floating equity
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;equity_snapshots.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parse_dates&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;agg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;equity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;sort_index&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;agg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cummax&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="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;agg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;peak&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;Combined max drawdown: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&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="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&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;Worst day: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;idxmax&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;date&lt;/span&gt;&lt;span class="p"&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;If you want the honest version, sample intraday — daily closes routinely miss the deepest floating drawdown by a wide margin, because grid/martingale baskets recover into the close.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things this number changes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Position sizing.&lt;/strong&gt; Once you know the portfolio can hit, say, 28% combined, you size each EA so that the &lt;em&gt;aggregate&lt;/em&gt; worst case stays inside your tolerance — not so that each EA individually looks fine. This is the single most common mistake I see: three "safe" bots that are collectively reckless.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correlation hygiene.&lt;/strong&gt; Compute the correlation matrix of your accounts' daily returns. Anything above ~0.6 is effectively one strategy with extra commission. Real diversification means adding a strategy whose worst weeks land on &lt;em&gt;different&lt;/em&gt; days — not just a fourth bot on the same majors.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part nobody backtests: where it runs
&lt;/h2&gt;

&lt;p&gt;Combined drawdown assumes your fills are clean. They often aren't. The same volatility spike that maxes out your portfolio drawdown is also when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;spreads widen 5–10×,&lt;/li&gt;
&lt;li&gt;slippage turns a 12% modeled drawdown into a 16% realized one,&lt;/li&gt;
&lt;li&gt;and a slow or hostile broker quietly converts a survivable day into a margin call.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the broker is part of the risk model, not a footnote. Execution quality, spread behaviour under stress, and how "EA-friendly" the conditions actually are will move your real combined drawdown by several points — in the direction you don't want.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Measure drawdown on the &lt;strong&gt;summed, floating&lt;/strong&gt; equity curve of all accounts, sampled on one clock.&lt;/li&gt;
&lt;li&gt;Per-EA drawdowns add up &lt;em&gt;worse&lt;/em&gt; than you expect because correlations rise exactly when you're losing.&lt;/li&gt;
&lt;li&gt;Size and diversify against the &lt;strong&gt;portfolio&lt;/strong&gt; number, not the per-bot number.&lt;/li&gt;
&lt;li&gt;Treat your broker's execution as part of the drawdown, because under stress it is.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you'd rather not stitch CSVs together by hand, I keep all my MT4/MT5 accounts — combined equity curve, combined max drawdown, per-EA breakdown — in one place with &lt;strong&gt;&lt;a href="https://algoverdict.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=growth-2026-06" rel="noopener noreferrer"&gt;AlgoVerdict&lt;/a&gt;&lt;/strong&gt;, which also publishes independent, algo-focused broker reviews. It's free to track your own EAs. However you do it, just make sure you're watching the combined number — it's the one that can end the account.&lt;/p&gt;

</description>
      <category>trading</category>
      <category>finance</category>
      <category>automation</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
