<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Josh Malizzi on Medium]]></title>
        <description><![CDATA[Stories by Josh Malizzi on Medium]]></description>
        <link>https://medium.com/@josh.malizzi?source=rss-822a1cf1633b------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*x66iPehD_ZwUQYINwa9-JQ.jpeg</url>
            <title>Stories by Josh Malizzi on Medium</title>
            <link>https://medium.com/@josh.malizzi?source=rss-822a1cf1633b------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 21:43:49 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@josh.malizzi/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Where to read ALL my trading content!]]></title>
            <link>https://medium.com/@josh.malizzi/where-to-read-all-my-trading-content-d62baa6f75e7?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/d62baa6f75e7</guid>
            <category><![CDATA[algorithmic-trading]]></category>
            <category><![CDATA[futures-trading]]></category>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[stock-trading]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Tue, 14 Apr 2026 14:57:54 GMT</pubDate>
            <atom:updated>2026-04-14T14:57:54.667Z</atom:updated>
            <content:encoded><![CDATA[<p>It started with curiosity. Late nights. Spreadsheets that turned into code. Code that turned into questions. Questions that turned into a process.</p><p>Somewhere along the way, patterns started to emerge. Not just in markets, but in how people think about them. The difference between guessing and testing. Between hoping and validating. Between noise and something that actually holds up.</p><p>That’s what I’ve been sharing.</p><p>Not signals. Not shortcuts. But the framework behind building something that <em>can</em> last.</p><p>If you’ve found value in what I’ve been writing, whether it helped you think differently, build something better, or just question your assumptions I’d really appreciate you following along more closely.</p><p>I write everything in one place now. Let’s connect on Substack!</p><p>👉 <a href="https://substack.com/@joshmalizzi">https://substack.com/@joshmalizzi</a></p><p>No fluff. Just real work, real ideas, and the occasional breakthrough.</p><p>– Josh</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d62baa6f75e7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[OHLC Bar Permutation: How to confirm your trading system will work]]></title>
            <link>https://medium.com/@josh.malizzi/ohlc-bar-permutation-how-to-confirm-your-trading-system-will-work-0e062be1c0b7?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/0e062be1c0b7</guid>
            <category><![CDATA[futures-trading]]></category>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[stock-trading]]></category>
            <category><![CDATA[algorithmic-trading]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Fri, 03 Apr 2026 15:29:42 GMT</pubDate>
            <atom:updated>2026-04-03T15:29:42.239Z</atom:updated>
            <content:encoded><![CDATA[<h4>Most systems don’t fail because markets are unpredictable. They fail because we mistake noise for signal.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QkeiPgFcg110rm1c.png" /></figure><p><strong>“Permutation and Randomization Tests for Trading System Development”</strong> by Timothy Masters is one of those books that helps us understand that most trading systems do not fail because markets are unknowable. They fail because we fool ourselves during development.</p><p>If you are building systematic strategies, especially with multiple signals, filters, or ensemble methods, this is not just an abstract idea.</p><blockquote><strong><em>It is the difference between something that looks great in a backtest and something that survives live trading.</em></strong></blockquote><p>This post focuses on one of the most practical concepts from the book: <strong>OHLC bar permutation testing</strong>, and why it is one of the cleanest ways to answer the only question that really matters. Will this system actually work going forward?</p><p>Keep reading on Substack:</p><p><a href="https://open.substack.com/pub/joshmalizzi/p/ohlc-bar-permutation-how-to-confirm?utm_campaign=post-expanded-share&amp;utm_medium=web">https://open.substack.com/pub/joshmalizzi/p/ohlc-bar-permutation-how-to-confirm?utm_campaign=post-expanded-share&amp;utm_medium=web</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0e062be1c0b7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What Is an Ensemble? Let’s talk about it. (w/case study)]]></title>
            <link>https://medium.com/@josh.malizzi/what-is-an-ensemble-lets-talk-about-it-w-case-study-e0b51f4f768d?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/e0b51f4f768d</guid>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[futures-trading]]></category>
            <category><![CDATA[stock-trading]]></category>
            <category><![CDATA[algorithmic-trading]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Thu, 02 Apr 2026 04:26:55 GMT</pubDate>
            <atom:updated>2026-04-02T04:26:55.862Z</atom:updated>
            <content:encoded><![CDATA[<h4>From fragile signals to resilient systems built on diversified edge</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JtsvKm5PjKy7BuqIj9OWjQ.png" /></figure><p>In Advances in Financial Machine Learning by Marcos López de Prado, de Prado describes ensembles as a <strong>combination of multiple models or classifiers whose outputs are aggregated to produce a single prediction, with the goal of improving robustness, reducing overfitting, and enhancing generalization.</strong></p><p>In the book, ensembles are tightly tied to three core ideas:</p><p><strong>1. Variance Reduction</strong><br>Individual models are noisy and unstable. By combining many models, you reduce variance and smooth the output.</p><p><strong>2. Generalization</strong><br>A single model can overfit easily. Ensembles are designed to perform better out of sample by not relying on one specific fit.</p><p>Here is the link to the full article on Substack. I hope you enjoy!</p><p><a href="https://open.substack.com/pub/joshmalizzi/p/what-is-an-ensemble-lets-talk-about?r=7atda8&amp;selection=cf1dd2c1-85fd-4451-b156-d45e6ad63f47&amp;utm_campaign=post-share-selection&amp;utm_medium=web&amp;aspectRatio=instagram&amp;textColor=%23ffffff&amp;bgImage=true">What Is an Ensemble? Let&#39;s talk about it. (w/case study)</a></p><ul><li>Josh</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e0b51f4f768d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What Are the Core Indicators You Can Use to Build Trading Algorithms?]]></title>
            <link>https://medium.com/@josh.malizzi/what-are-the-core-indicators-you-can-use-to-build-trading-algorithms-81853b6b9a70?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/81853b6b9a70</guid>
            <category><![CDATA[stock-market]]></category>
            <category><![CDATA[crypto-trading]]></category>
            <category><![CDATA[futures-trading]]></category>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[stock-trading]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Thu, 05 Feb 2026 01:38:12 GMT</pubDate>
            <atom:updated>2026-03-01T14:06:22.515Z</atom:updated>
            <content:encoded><![CDATA[<p>A practical breakdown of time, momentum, volatility, trend structure, and price behavior used in real systematic trading research</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*dXMfSCik-8gD6luV.png" /></figure><p>I came across a question recently that seems simple on the surface, but it’s one of those questions that gets more interesting the longer you’ve been building systems:</p><p><strong>“What are the core indicators we can use to build algorithms?”</strong></p><p>Most people expect a shopping list in response. RSI. MACD. Bollinger Bands. Moving averages. Maybe a few exotic ones. If you’ve spent any time around trading forums, you’ve probably seen the same handful of indicators recycled endlessly, often with the implication that <em>the right indicator</em> is what separates winners from losers.</p><figure><a href="https://joshmalizzi.substack.com/"><img alt="" src="https://cdn-images-1.medium.com/max/117/1*BVl0oM6XGWQDnrLeqzKbMA.jpeg" /></a><figcaption>Let’s connect on Substack!</figcaption></figure><p>After years of actually building systematic strategies, generating large libraries of conditions, validating them out-of-sample, comparing them to randomness baselines, filtering by correlation, and then assembling ensembles, my answer is far less glamorous.</p><p>What matters is whether you can describe market behavior <strong>cleanly and consistently</strong>, then test it properly for its statistical properties. The indicators themselves are just a language for expressing those behaviors.</p><p>Before going any further, one important clarification: <strong>what follows is not meant to be comprehensive</strong>. This is not “the full list of everything that works.” It’s a <em>starting point, </em>a core foundation that has proven robust for me. There are many other useful features and indicators a trader can add on top of this depending on market, timeframe, and style. Think of this as the skeleton, not the entire body.</p><p>Below is the actual indicator <em>language</em> I use expressed the way it shows up in TradeStation logic — and why each category matters.</p><h3>Time Is an Indicator (And It’s One of the Strongest Ones)</h3><p>The most overlooked indicator in trading is time. Markets are shaped by settlement cycles, institutional flows, hedging behavior, rebalancing, and seasonality. None of that shows up as a moving average crossover but it absolutely shows up in performance if you test it properly. I treat time as a first-class signal input. That includes simple, explicit calendar logic like:</p><ul><li><strong>Day of week</strong></li><li>DayOfWeek(date) = 1</li><li>DayOfWeek(date) = 3</li><li>DayOfWeek(date) = 5</li><li><strong>Grouped weekdays</strong></li><li>DayOfWeek(date) = 1 OR DayOfWeek(date) = 2</li><li>DayOfWeek(date) = 3 OR DayOfWeek(date) = 4</li><li>DayOfWeek(date) = 4 OR DayOfWeek(date) = 5</li><li><strong>Day of month</strong></li><li>DayOfMonth(date) &lt;= 15</li><li>DayOfMonth(date) &gt;= 16</li><li>DayOfMonth(date) &gt;= 1 AND DayOfMonth(date) &lt;= 10</li><li>DayOfMonth(date) &gt;= 21</li><li><strong>Month, quarter, half-year</strong></li><li>Month(date) = 1</li><li>Month(date) = 12</li><li>Month(date) &lt;= 3</li><li>Month(date) &gt;= 7</li><li><strong>Other simple time structure</strong></li><li>DayOfYear(date) = 250</li><li>WeekOfYear(date) = 42</li><li>DayOfMonth(date) = 17</li></ul><p>These kinds of time filters don’t predict direction. Their job is to <strong>slightly tilt the odds</strong>. On their own, they’re rarely impressive. Combined with other signal families, they often become stable contributors in a system.</p><h3>Momentum &amp; Mean Reversion: RSI as Pressure, Not a Signal</h3><p>RSI is one of the most misunderstood indicators in retail trading. The problem isn’t RSI, it’s how narrowly it’s usually applied. I don’t treat RSI as an “overbought / oversold” switch. I treat it as a pressure gauge. What matters is where RSI is, where it was, and how it’s changing.</p><p>That shows up in logic like:</p><ul><li><strong>RSI level states</strong></li><li>RSI(Close, 2) &gt;= 70</li><li>RSI(Close, 5) &lt;= 30</li><li>RSI(Close, 20) &gt;= 50</li><li><strong>RSI relative comparisons</strong></li><li>RSI(Close, 2) &gt; RSI(Close, 2)[5]</li><li>RSI(Close, 10) &lt; RSI(Close, 10)[10]</li><li>RSI(Close, 20) &lt;= RSI(Close, 20)[20]</li></ul><p>Translation on the lower block:</p><p>RSI(2) of the current bar is greater than RSI(2) 5 bars ago</p><p>This is still just a starting point. There are many other momentum representations a trader can layer in, different oscillators, rate-of-change measures, or custom transforms, but RSI remains a simple, well-behaved building block when used this way.</p><h3>Trend Strength (Not Trend Direction)</h3><p>One of the most common reasons strategies fail is that they’re run in the wrong environment. Mean reversion ideas get destroyed in strong trends. Trend-following ideas get chopped up in sideways markets. That’s why I separate trend <em>strength</em> from trend <em>direction</em>. ADX is useful here, not as an entry trigger, but as a regime filter:</p><ul><li><strong>ADX strength states</strong></li><li>ADX(10) &gt; 25</li><li>ADX(20) &lt;= 20</li><li>ADX(30) &gt; 40</li></ul><p>ADX is not the only way to do this, there are plenty of other regime and structure measures that work well but it’s a clean, interpretable starting point that integrates nicely with other signal families.</p><h3>Raw Price Structure (Massively Underrated)</h3><p>Some of the most durable signals don’t look like indicators at all. They’re simply statements about how price is behaving relative to itself.</p><p>For example:</p><ul><li><strong>Open / High / Low / Close relationships</strong></li><li>Open &gt; Open[5]</li><li>Open &lt;= High[10]</li><li>Close &gt; Low[20]</li><li>Close &lt;= Close[15]</li><li><strong>Prior-bar context</strong></li><li>Open[1] &gt; Close[5]</li><li>Open[1] &lt;= Low[10]</li></ul><p>These kinds of conditions are incredibly portable across markets. They don’t rely on smoothing assumptions or fragile parameters. They just ask whether price is behaving differently than it recently has. Again, this is not an exhaustive list but a representative slice of a broader family of price-structure ideas a trader can expand on.</p><h3>Pivot &amp; Reference Structure</h3><p>Markets react to shared reference points. Not because those levels are mystical, but because many participants are looking at the same information. That shows up in logic like:</p><ul><li><strong>Pivot comparisons</strong></li><li>(High + Low + Close) / 3 &gt; ((High[5] + Low[5] + Close[5]) / 3)</li><li>(High + Low + Close) / 3 &lt;= ((High[10] + Low[10] + Close[10]) / 3)</li></ul><p>There are many ways to define reference structure, pivots are just one clean starting example.</p><h3>Trend Structure: Moving Averages as Environment</h3><p>Moving averages still matter, just not as magic signals. I use them to define structure and regime:</p><ul><li><strong>Short vs long structure</strong></li><li>Average(Close, 10) &gt; Average(Close, 50)</li><li>Average(Close, 20) &lt; Average(Close, 100)</li><li>Average(Close, 5) &lt;= Average(Close, 40)</li></ul><p>This isn’t the only way to define trend structure, but it’s a simple and effective starting point that plays well with other filters.</p><h3>Volatility as a State Variable</h3><p>Volatility is one of the most important contextual variables in systematic trading. Many strategies don’t actually fail, they’re just traded in the wrong volatility regime. I treat volatility relatively:</p><ul><li><strong>Volatility expanding or contracting</strong></li><li>NATR[0] &gt; NATR[10]</li><li>NATR[5] &lt;= NATR[20]</li></ul><p>There are many other volatility representations a trader can explore, but relative volatility comparisons like this are often more robust than fixed thresholds.</p><h3>Participation &amp; Commitment: Volume and Open Interest</h3><p>Volume and open interest rarely make great standalone entry signals. Where they shine is context. That shows up as simple structure logic:</p><ul><li><strong>Volume comparisons</strong></li><li>Volume &gt; Volume[10]</li><li>Volume &lt;= Average(Volume, 20)</li><li><strong>Open interest structure</strong></li><li>OpenInt &gt; OpenInt[15]</li><li>OpenInt &lt; OpenInt[30]</li></ul><p>Again, this is a foundation, not a limit. There are many additional participation-based features that can be layered in depending on market and data availability.</p><h3>The Part Most People Miss</h3><p>If you’re looking at this list and thinking, <em>“That’s not that many indicators,”</em> you’re right. That’s the point. This is not meant to be comprehensive. It’s meant to be a <strong>starting framework</strong> and a small, robust set of measurable behaviors that you can build on. There are countless other good features a trader can add once this foundation is in place.</p><p>The edge isn’t in discovering new indicators. It’s in expressing market behavior clearly, validating it properly, and then combining ideas intelligently.</p><p>Most indicators fail not because they’re bad ideas, but because they were:</p><ul><li>Over-optimized</li><li>Traded in the wrong regime</li><li>Highly correlated with other signals</li><li>Indistinguishable from randomness when tested correctly</li></ul><p>So when someone asks, <em>“What are the core indicators for building algos?”</em> my answer is simple:</p><p>Start with indicators that describe <strong>time, pressure, structure, volatility, and participation</strong>. Use them as a foundation, then expand thoughtfully from there.</p><p>The most important idea in this post is:</p><p>we should spend 10% of our time defining and creating indicators</p><p>we should spend 90% of our time testing indicators for statistical robustness</p><p>Hope this helps.</p><p>— Josh</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=81853b6b9a70" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Superpower in Trading: How Portfolios Crush Risk]]></title>
            <link>https://medium.com/@josh.malizzi/superpower-in-trading-how-portfolios-crush-risk-16b06adaf7bc?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/16b06adaf7bc</guid>
            <category><![CDATA[stock-trading]]></category>
            <category><![CDATA[algorithmic-trading]]></category>
            <category><![CDATA[futures-trading]]></category>
            <category><![CDATA[forex-trading]]></category>
            <category><![CDATA[trading]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Thu, 05 Feb 2026 01:32:03 GMT</pubDate>
            <atom:updated>2026-03-01T14:07:38.769Z</atom:updated>
            <content:encoded><![CDATA[<p>If you can make a .83 sharpe trading system you can make a really impressive portfolio.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Cv2CFsk8v5Tyabos.png" /></figure><p>Most traders spend their time obsessing over <strong>individual systems</strong>. The perfect entry. The perfect indicator. The one setup that “finally works.” But professional traders, the ones who survive decades, not months, obsess over something very different:</p><p><strong>Portfolios.</strong></p><p>Not because individual systems don’t matter.<br>But because <strong>portfolios change the math of risk itself</strong>.</p><p>In this post, I want to show you something real. No theory. No hypothetical correlations. Before we look at a single metric, let’s remove the usual escape hatches. Everything in this analysis is done using <strong>one contract per futures symbol</strong>.</p><p>No leverage.<br>No volatility targeting.<br>No position scaling.<br>No capital tricks.</p><p>We will use 20 real trading systems, 20 U.S. futures markets, all long-only, actual historical PnL in dollars. Each system trades a single U.S. futures market, long-only, with real historical trades and real dollar PnL. The only thing we change throughout this study is <strong>how many systems are combined into a portfolio</strong>. Remember there is NO reinvesting / compounding happening here which is a big way to boost profitability.</p><p>This constraint matters, because it forces us to confront a reality that many traders prefer to avoid:</p><blockquote><em>The biggest improvements in trading performance often come </em><strong><em>without</em></strong><em> better systems. They come from </em><strong><em>portfolios</em></strong><em>.</em></blockquote><p>And we’ll answer one simple question:</p><p>What happens to risk when you stop trading systems and start trading portfolios?</p><figure><a href="https://joshmalizzi.substack.com/"><img alt="" src="https://cdn-images-1.medium.com/max/117/1*BVl0oM6XGWQDnrLeqzKbMA.jpeg" /></a><figcaption>Let’s connect on Substack!</figcaption></figure><h3>The Setup: 20 Ordinary Trading Systems</h3><p>We begin with twenty independent trading systems, each tied to a different U.S. futures symbol. They were not designed together. They were not optimized to interact. They simply exist.</p><p>Each system produces a stream of trades, which were converted into <strong>daily PnL series</strong>, aligned on a common business-day calendar. Individually, these systems are not exciting. They are boring.</p><p>They make money, but slowly.<br>They draw down, sometimes deeply.<br>They would test anyone’s patience.</p><p>And that’s the point. Because this is what <em>real</em> systems look like.</p><h3>Quick but Important: What These Metrics Actually Mean</h3><p>Before listing numbers, it’s worth briefly grounding what each metric measures and why it matters.</p><h3>Sharpe Ratio</h3><p>The Sharpe ratio measures <strong>how much return you earn per unit of volatility</strong>. In plain language, it answers how smooth is the ride relative to the reward? Importantly, Sharpe does <strong>not</strong> measure raw profitability. It measures <strong>risk-adjusted efficiency</strong>. Sharpe is also scale-invariant meaning it doesn’t care how big your PnL is, only how noisy it is.</p><p>A Sharpe of:</p><ul><li>0.5 is noisy and difficult to trade</li><li>1.0 is respectable</li><li>2.0 is professional</li><li>3.0 is rare without leverage or overfitting</li></ul><h3>Profit Factor</h3><p>Profit factor is the ratio of total profits to total losses. A profit factor of 1.5 means you make $1.50 for every $1.00 lost. It tells you how forgiving a system is when it’s wrong.</p><h3>Drawdown</h3><p>Drawdown is the peak-to-trough loss in equity. This is not an academic metric. Drawdown is where traders quit, funds close, and careers end. Reducing drawdown is not cosmetic, it is survival.</p><h3>CAGR</h3><p>CAGR (compound annual growth rate) measures how efficiently capital grows over time. It is deeply influenced by drawdowns. Two strategies with the same returns can have wildly different CAGRs if one experiences deeper losses.</p><h3>PnL</h3><p>Total PnL tells us something simple but often ignored: <strong>if I add up all wins and losses, how much do I have? </strong>If risk goes down but returns vanish, the portfolio has failed. With that context, let’s look at what actually happens.</p><h3>Individual Systems: Adequate, Not Impressive</h3><p>On their own, the systems are all generally similar. The representative single-system Sharpe is <strong>~0.82</strong>, with most systems living between <strong>0.8 and 1.1</strong>. Profit factors hover around <strong>1.4–1.5</strong>. Drawdowns are uncomfortable. Growth is slow. This is the reality most traders face when they stop optimizing and start trading. And it’s exactly why portfolios matter.</p><h3>Sharpe Ratio: How Structure Changes the Math</h3><p>Let’s now combine systems incrementally and examine the Sharpe ratio at every step. Remember: nothing about the systems changes. Only the <strong>number of systems held simultaneously</strong>. Here are the <strong>annualized Sharpe ratios</strong> from 1 through 20 systems as they are combined into larger and larger portfolios:</p><p>1 system: 0.82<br>2 systems: 1.07<br>3 systems: 1.26<br>4 systems: 1.39<br>5 systems: 1.48<br>6 systems: 1.59<br>7 systems: 1.70<br>8 systems: 1.83<br>9 systems: 1.99<br>10 systems: 2.07<br>11 systems: 2.26<br>12 systems: 2.35<br>13 systems: 2.40<br>14 systems: 2.46<br>15 systems: 2.56<br>16 systems: 2.49<br>17 systems: 2.57<br>18 systems: 2.66<br>19 systems: 2.71<br>20 systems: <strong>2.77</strong></p><p>No reweighting. No filtering. Just equal-weight combination. This is not optimization. This is arithmetic. From one system to twenty, Sharpe improves by <strong>over 230%</strong>. The portfolio crosses into professional-grade territory long before we reach the full set. This is why institutions build portfolios instead of chasing better indicators. We took a collection of ordinary systems and created a professional-grade portfolio. No new indicators, logic, parameter tweaks, just combination.</p><h3>Profit Factor: Efficiency Improves Quietly</h3><p>Sharpe isn’t the only thing improving. Profit factor also improves consistently. Here is the profit factor at each portfolio size:</p><p>1 system: 1.45<br>2 systems: 1.44<br>3 systems: 1.46<br>4 systems: 1.47<br>5 systems: 1.52<br>6 systems: 1.59<br>7 systems: 1.61<br>8 systems: 1.64<br>9 systems: 1.67<br>10 systems: 1.69<br>11 systems: 1.72<br>12 systems: 1.74<br>13 systems: 1.76<br>14 systems: 1.78<br>15 systems: 1.79<br>16 systems: 1.72<br>17 systems: 1.75<br>18 systems: 1.76<br>19 systems: 1.78<br>20 systems: <strong>1.79</strong></p><p>That’s a <strong>+23% improvement in profit factor</strong> while taking <em>less risk</em>. This happens because losses stop clustering in time. This matters because it shows that diversification is not just smoothing returns, it is <strong>reducing loss overlap</strong>. Losses occur less simultaneously, making the portfolio structurally more efficient. We are seeing that diversification improves both return efficiency and loss control.</p><h3>Drawdown: Where Portfolios Earn Their Keep</h3><p>Now to the most important metric. Maximum dollar drawdown at each step:</p><p>1 system: -$6,980<br>2 systems: -$5,709<br>3 systems: -$4,614<br>4 systems: -$3,606<br>5 systems: -$3,091<br>6 systems: -$3,405<br>7 systems: -$3,251<br>8 systems: -$3,507<br>9 systems: -$3,346<br>10 systems: -$3,499<br>11 systems: -$3,214<br>12 systems: -$3,096<br>13 systems: -$3,021<br>14 systems: -$2,987<br>15 systems: -$3,104<br>16 systems: -$4,210<br>17 systems: -$3,974<br>18 systems: -$3,529<br>19 systems: -$3,344<br>20 systems: <strong>-$3,300</strong></p><p>Despite some noise, the pattern is unmistakable: The portfolio cuts drawdown roughly <strong>in half </strong>without reducing participation. This is the difference between abandoning a strategy and surviving long enough for it to work. This is the part that keeps traders alive.</p><h3>PnL: Diversification Does Not Kill Returns</h3><p>A common fear is that diversification “waters down” profits. The total PnL tells a different story. The 20-system portfolio generates <strong>over $126,000</strong> in cumulative PnL trading one contract per market where the average PNL of the contributing systems was $72,000. This is a 75% increase in PNL which is material. What we see here is:</p><p>Risk goes down. Returns remain.</p><p>That combination is rare outside of portfolios.</p><h3>CAGR: Growth Through Risk Control</h3><p>Because drawdowns shrink and equity curves smooth out, CAGR improves steadily as systems are added. System 1 alone resulted in 11.8% CAGR where the 20 system portfolio results in 18.1% CAGR. This is a 53% increase on a no-reinvestment basis.</p><p>This is not because the portfolio suddenly becomes aggressive. It’s because <strong>capital spends less time recovering from losses</strong>. Lower drawdowns mean faster recovery. Faster recovery means better compounding. This is how professional portfolios grow quietly for decades.</p><h3>The Final Portfolio: 20 Systems, One Contract Each</h3><p>Let’s summarize the full 20-system portfolio:</p><ul><li>Sharpe ratio: ~2.77</li><li>Profit factor: ~1.79</li><li>Maximum drawdown: ~$3,300</li><li>Active exposure: ~94% of days</li><li>CAGR: 18.1%</li></ul><p>So the portfolio produces roughly:</p><p><strong>~1.8–2.3 units of return for every 1 unit of drawdown</strong></p><p>This is extremely strong risk efficiency.</p><h3>S&amp;P 500 (Historical Context)</h3><p>Now compare that to the S&amp;P 500:</p><ul><li><strong>CAGR:</strong> ~9–10%</li><li><strong>Maximum drawdown:</strong> ~50–55%</li></ul><p>That yields:</p><ul><li><strong>Return / DD:</strong><br>9 ÷ 55 ≈ <strong>0.16</strong><br>10 ÷ 50 ≈ <strong>0.20</strong></li></ul><p>So the S&amp;P produces roughly:</p><p><strong>~0.16–0.20 units of return for every 1 unit of drawdown</strong></p><h3>Side-by-Side Comparison</h3><ul><li><strong>20-system portfolio:</strong> ~<strong>1.8–2.3</strong></li><li><strong>S&amp;P 500:</strong> ~<strong>0.16–0.20</strong></li></ul><p>That means the portfolio is approximately <strong>9–14× more efficient</strong> than the S&amp;P 500.</p><h3>Why This Works (Even When Everything Is Long)</h3><p>All systems are long. And yet, risk collapses. Why? Because correlation is not direction — it’s <strong>timing</strong>. Markets move differently. They trend differently. They mean-revert differently. They respond to stress differently. Perfect correlation is rare. And portfolios only need <em>imperfect</em> independence to work.</p><h3>The Core Lesson</h3><p>This entire study can be summarized in one sentence:</p><blockquote><em>Portfolios turn average systems into professional-grade strategies.</em></blockquote><p>You do not need brilliance.<br>You do not need perfection.</p><p>You need <strong>many small edges</strong> and the discipline to let structure do the heavy lifting.</p><p>That is the quiet superpower of trading.</p><p>And it’s hiding in plain sight.</p><ul><li>Josh</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=16b06adaf7bc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[I’m on Substack Now Too]]></title>
            <link>https://medium.com/@josh.malizzi/im-on-substack-now-too-9530c747dbfb?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/9530c747dbfb</guid>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Tue, 27 Jan 2026 03:18:38 GMT</pubDate>
            <atom:updated>2026-01-27T03:18:38.710Z</atom:updated>
            <content:encoded><![CDATA[<p>I’ve recently joined Substack as another place to share my writing on trading, risk, and how markets actually work without hype or predictions.</p><p>If you’ve enjoyed my posts here on Medium, feel free to connect with me there as well. I’ll be sharing short notes, longer explanations, and ongoing ideas in a more conversational format.</p><p>You can find me here:</p><p>👉 https://substack.com/@joshmalizzi?invite</p><p>Totally optional — just another place to follow along.</p><p>— Josh</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9530c747dbfb" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Using Monte Carlo Permutation to Help Validate Signal Edge]]></title>
            <link>https://medium.com/@josh.malizzi/using-monte-carlo-permutation-to-help-validate-signal-edge-5ffc875329a7?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/5ffc875329a7</guid>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[quantitative-finance]]></category>
            <category><![CDATA[stock-trading]]></category>
            <category><![CDATA[algorithmic-trading]]></category>
            <category><![CDATA[stock-market]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Sun, 25 Jan 2026 14:41:16 GMT</pubDate>
            <atom:updated>2026-03-01T14:11:07.468Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sMUO75YadlRgHrA4cedN8w.png" /></figure><p>One of the hardest problems in systematic trading is not finding strategies that make money in a backtest.</p><p>It is figuring out whether they did anything special at all.</p><p>If you test enough ideas, some of them will look good purely by chance. That is not a flaw in your research process. It is a property of randomness. The problem starts when we mistake those lucky outcomes for real edge.</p><p>Monte Carlo (MC) returns are one of the few tools that help address this directly. But only if they are used correctly.</p><p>This article explains how I use Monte Carlo returns matched to a strategy’s trade count to answer a very specific question:</p><p>Is this strategy meaningfully better than what random participation in the same market would have produced, given the same number of trades?</p><p>That last clause matters more than most people realize.</p><h3>The Core Problem: Strategy Returns Without Context</h3><p>Suppose a strategy produces:</p><ul><li>+0.12 normalized return per trade</li><li>Over 300 trades</li><li>With a smooth equity curve</li></ul><p>Is that good?</p><p>The honest answer is: it depends.</p><p>It depends on:</p><ul><li>The distribution of returns in the underlying market</li><li>The volatility regime</li><li>The number of trades taken</li><li>The degree of path dependence</li><li>How much randomness alone could have achieved</li></ul><p>Without a baseline, strategy returns are just numbers.</p><figure><a href="https://joshmalizzi.substack.com/"><img alt="" src="https://cdn-images-1.medium.com/max/117/1*BVl0oM6XGWQDnrLeqzKbMA.jpeg" /></a><figcaption>Let’s connect on Substack!</figcaption></figure><p>Monte Carlo returns provide that baseline, but only when they are constructed in a way that respects sample size.</p><h3>Why “Random Returns” Are Often Done Wrong</h3><p>Most MC implementations I see fall into one of these traps:</p><ol><li>Comparing a strategy to random trades with a different number of trades</li><li>Comparing to random returns aggregated over the full dataset</li><li>Using non-deterministic MC that changes every run</li><li>Using unrealistic return assumptions such as Gaussian noise or shuffled bars</li></ol><p>That is where the pick method comes in.</p><h3>What the Pick Method Actually Does</h3><p>At a high level, the pick method answers this:</p><p>If I randomly selected the same number of return observations as my strategy trades, many times, what does the distribution of outcomes look like?</p><p>Instead of simulating trades with their own logic, we:</p><ul><li>Take the actual historical return stream of the market</li><li>Randomly pick N returns from it</li><li>Aggregate them using the same statistic the strategy is judged on</li><li>Repeat this thousands of times</li><li>Measure where the strategy sits relative to that distribution</li></ul><p>This gives us a fair baseline.</p><p>If a strategy trades 312 times, we compare it to random samples of 312 market returns. Not more. Not fewer.</p><p>That alignment is critical.</p><h3>Why Sample Size Is the Entire Game</h3><p>A strategy that trades 50 times can look spectacular.</p><p>A strategy that trades 1,000 times rarely does.</p><p>That is not because the first strategy is better. It is because variance dominates small samples.</p><p>Monte Carlo benchmarking with matched sample size does two things simultaneously:</p><ol><li>It controls for luck</li><li>It reveals whether performance improves faster than randomness as sample size increases</li></ol><p>This is why MC results should be computed across a wide range of pick sizes, not just one.</p><p>In my implementation, this is exactly what happens:</p><ul><li>Picks range from 2 to 2000</li><li>Each pick size gets its own MC baseline</li><li>Strategy performance is compared to the corresponding pick level</li></ul><p>That turns MC from a single reference number into a curve, which is far more informative.</p><h3>Deterministic Monte Carlo: An Underrated Requirement</h3><p>Most people do not think about this, but it matters enormously.</p><p>If your Monte Carlo baseline changes every time you run it, your research is unstable.</p><p>Non-deterministic MC introduces noise into the benchmark itself. That makes it hard to know whether:</p><ul><li>A strategy changed</li><li>Or the benchmark moved</li></ul><p>Your deterministic approach fixes this by:</p><ul><li>Using a fixed root seed</li><li>Deriving child random generators using hashed keys</li><li>Ensuring the same inputs always produce the same MC outputs</li></ul><p>This has several benefits:</p><ul><li>Results are reproducible</li><li>Research decisions are consistent</li><li>Changes in conclusions reflect changes in strategies, not random drift</li><li>MC results can be cached and reused safely</li></ul><p>This is especially important when MC returns are used as filters in a large research pipeline.</p><h3>What Is Actually Being Sampled</h3><p>In your setup, Monte Carlo draws from:</p><ul><li>The in-sample normalized returns of the underlying market</li><li>After removing NaNs</li><li>Using the same return definition used by strategies</li></ul><p>That is important.</p><p>You are not sampling synthetic noise.<br>You are sampling real market outcomes, just without strategy timing.</p><p>This answers a very specific question:</p><p>If I had participated in this market randomly, with no signal, but the same number of opportunities, what would I expect?</p><p>That is the right null hypothesis.</p><h3>Mean vs Sum vs Element Quantile</h3><p>Your MC function allows multiple statistics. Each answers a slightly different question.</p><h3>Mean</h3><ul><li>Computes the average return per trade</li><li>Directly comparable to strategy mean return</li><li>Stable and intuitive</li><li>Scales cleanly across sample sizes</li></ul><p>This is the most appropriate comparison when your strategy metric is average normalized return per trade.</p><h3>Sum</h3><ul><li>Emphasizes total outcome</li><li>More sensitive to trade count</li><li>Useful when comparing total PnL distributions</li></ul><h3>Element quantile</h3><ul><li>Looks inside each sample</li><li>Focuses on tail behavior</li><li>Useful in specific cases, but harder to interpret</li></ul><p>Using mean keeps the comparison clean and avoids conflating edge with frequency.</p><h3>Building the MC Return Surface</h3><p>Rather than producing a single MC number, your implementation builds a surface:</p><ul><li>Rows equal pick size multiplied by quantile</li><li>Columns equal return definitions</li><li>Cells equal MC benchmark values</li></ul><p>This lets you answer questions like:</p><ul><li>What does the median random outcome look like at 200 trades?</li><li>What about the 80th percentile?</li><li>How fast does random performance improve with sample size?</li><li>Where does my strategy sit relative to these curves?</li></ul><p>This is much richer than a pass or fail test.</p><h3>Why Quantiles Matter</h3><p>Comparing a strategy to the median MC outcome answers:</p><p>Is this better than random, on average?</p><p>Comparing to higher quantiles answers:</p><p>Is this better than good randomness?</p><p>For example:</p><ul><li>Beating the 50th percentile means better than average luck</li><li>Beating the 75th percentile means better than most random outcomes</li><li>Beating the 90th percentile means very unlikely to be luck</li></ul><p>This is far more informative than a binary p-value.</p><h3>How This Changes Strategy Evaluation</h3><p>Once MC returns are available, strategy evaluation changes fundamentally.</p><p>Instead of asking:<br>Is the mean return positive?</p><p>You ask:<br>Where does this strategy sit relative to random baselines with the same trade count?</p><p>That reframes performance as relative skill, not absolute outcome.</p><p>A strategy with modest returns but far above MC baselines is often more interesting than a high-return strategy barely above random.</p><h3>Using MC Returns as a Filter</h3><p>In a large signal-mining framework, MC returns become a gate, not a report.</p><p>For example:</p><ul><li>Reject any signal whose mean return does not exceed the MC median at its trade count</li><li>Or require it to beat the MC 60th or 70th percentile</li><li>Or require separation that grows with sample size</li></ul><p>This filters out strategies that only look good because they got lucky early.</p><p>That is exactly what you want when mining thousands of candidates.</p><h3>Why This Is Better Than Shuffling Trades</h3><p>Trade shuffling is common, but it often answers the wrong question.</p><p>Shuffling strategy trades tests whether ordering mattered.</p><p>Monte Carlo picking tests whether selection mattered.</p><p>For signal evaluation, selection is usually the more relevant concern.</p><p>You are asking:<br>Did the signal meaningfully select better returns than chance?</p><p>Not:<br>Did the order of trades help?</p><p>Both are valid questions, but MC picking directly addresses edge discovery.</p><h3>A Concrete Example</h3><p>Imagine:</p><ul><li>A strategy trades 400 times</li><li>Mean normalized return equals 0.08</li></ul><p>Monte Carlo results show:</p><ul><li>MC median at 400 trades equals 0.02</li><li>MC 75th percentile equals 0.05</li><li>MC 90th percentile equals 0.09</li></ul><p>This tells you something important:</p><ul><li>The strategy beats most random outcomes</li><li>But it is not exceptional relative to the best random cases</li><li>The edge may be real, but thin</li><li>It deserves caution, not celebration</li></ul><p>Without MC returns, that nuance is invisible.</p><h3>Why This Matters for Capital Allocation</h3><p>Capital allocators do not care whether a strategy made money once.</p><p>They care whether:</p><ul><li>The process extracts information</li><li>The edge exceeds what randomness could plausibly explain</li><li>The advantage grows with sample size</li><li>The result is reproducible</li></ul><p>MC returns aligned to trade count speak directly to that.</p><p>They show:</p><ul><li>How much of performance is skill versus chance</li><li>Whether the strategy earns its returns</li><li>How confident one should be in scaling it</li></ul><h3>The Bigger Picture: MC as Part of a System</h3><p>Monte Carlo returns do not replace:</p><ul><li>Out-of-sample testing</li><li>Walk-forward analysis</li><li>Regime slicing</li><li>Correlation filtering</li></ul><p>They complement them.</p><p>MC answers the question:<br>Is this signal better than random participation, given the same opportunity set?</p><p>That is a foundational test. If a strategy cannot pass it, nothing else matters.</p><h3>Final Thoughts</h3><p>Monte Carlo returns are not about prediction.</p><p>They are about humility.</p><p>They force you to confront the uncomfortable truth that:</p><ul><li>Many strategies look good because they were lucky</li><li>Sample size matters more than cleverness</li><li>Real edges should separate from randomness consistently</li></ul><p>By using deterministic MC returns matched to strategy trade counts via the pick method, you turn randomness into a measurable benchmark rather than a hidden confounder.</p><p>That is not just better research.</p><p>It is more honest research.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5ffc875329a7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Deriving Signals From 35 Futures Markets: How a “Wide Lens” Turns Into 50,000+ Testable Hypotheses]]></title>
            <link>https://medium.com/@josh.malizzi/deriving-signals-from-35-futures-markets-how-a-wide-lens-turns-into-50-000-testable-hypotheses-eb0901b8f711?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/eb0901b8f711</guid>
            <category><![CDATA[quantitative-finance]]></category>
            <category><![CDATA[futures-trading]]></category>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[algorithmic-trading]]></category>
            <category><![CDATA[stock-trading]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Sun, 25 Jan 2026 01:55:48 GMT</pubDate>
            <atom:updated>2026-03-01T14:12:20.487Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*G3v3g6FaE3xz2pDvHSOY9g.png" /></figure><p>One of the biggest shifts in my research over the last few years wasn’t a new indicator or a clever entry rule.</p><p>It was a mindset change:</p><p><em>Instead of asking, “Can I predict </em>this<em> market?”<br>I started asking, “What are </em>other<em> markets already telling me?”</em></p><p>That’s a very different frame.</p><p>Most traders treat markets as separate worlds:</p><ul><li>Crude oil has its own story.</li><li>The dollar has its own story.</li><li>Bonds have their own story.</li><li>Equities have their own story.</li></ul><p>But when you’ve watched markets long enough, you start seeing the connectivity:</p><ul><li>Rates influence equities.</li><li>The dollar influences commodities.</li><li>Risk-off shows up in bonds before it shows up elsewhere.</li><li>Volatility regimes ripple across everything.</li></ul><p>So rather than building a strategy that only looks inward (price-based features from the traded market), I started using a <strong>wide market view</strong> — a fixed set of signals, applied across <strong>35 futures markets</strong>, and tested as <em>inputs</em> to trading decisions.</p><p>This article is about that approach:</p><ul><li>Why using other markets as signals can be a durable edge</li><li>Why I intentionally start with an absurd number of signals (50,000+)</li><li>How I generate them mechanically (and why “mechanical” matters)</li><li>And how this becomes a data-mining problem that can be handled responsibly</li></ul><h3>The 35-Market Signal Universe</h3><p>Here’s the market list I’m using as a <strong>feature set, </strong>not necessarily what I’m trading, but what I’m listening to and deriving signal from:</p><p>AD_F, BO_F, BP_F, CO_F, CD_F, CL_F, EC_F, ES_F, FC_F, FV_F, GC_F, HG_F, HO_F, JY_F, KW_F, LC_F, LH_F, NG_F, NK_F, NQ_F, OA_F, PL_F, RB_F, RR_F, RT_F, SO_F, SF_F, SI_F, SM_F, TU_F, TY_F, US_F, WH_F, YM_F, VX_F</p><p>This is a deliberately mixed basket:</p><ul><li><strong>Equity index risk</strong>: ES, NQ, YM, NK</li><li><strong>Rates (risk-free / macro gravity)</strong>: TU, FV, TY, US</li><li><strong>Volatility regime</strong>: VX</li><li><strong>FX</strong>: AD, BP, CD, EC, JY, SF</li><li><strong>Energy</strong>: CL, HO, RB, NG</li><li><strong>Metals</strong>: GC, SI, HG, PL</li><li><strong>Grains / softs</strong>: CO, WH, KW, OA, SO, SM, BO, RR</li><li><strong>Livestock</strong>: LC, FC, LH</li><li><strong>Rates-sensitive and growth-sensitive proxies show up everywhere in this set</strong></li></ul><p>The point isn’t diversification for trading. The point is diversity for <strong>information</strong>.</p><figure><a href="https://joshmalizzi.substack.com/"><img alt="" src="https://cdn-images-1.medium.com/max/117/1*BVl0oM6XGWQDnrLeqzKbMA.jpeg" /></a><figcaption>Let’s connect on Substack!</figcaption></figure><p>In other words:</p><p><em>I’m not building a multi-market strategy first.<br>I’m building a multi-market </em>sensor array<em>.</em></p><h3>Why Other Markets Make Great Signals</h3><p>If you trade one market long enough, you learn this the hard way:</p><ul><li>Your market often moves for reasons outside itself.</li><li>Some of the best “explanations” for today’s move are not inside today’s candle pattern.</li><li>Regimes shift first — and price patterns change second.</li></ul><p>Other markets help because they often carry:</p><ol><li><strong>Causal information</strong> (rates, dollar, energy inputs, risk appetite)</li><li><strong>Regime information</strong> (volatility, liquidity, macro stress)</li><li><strong>Positioning information</strong> indirectly (open interest, volume behaviors)</li><li><strong>Cross-asset confirmation</strong> (risk-on vs risk-off alignment)</li></ol><p>A simple example:</p><ul><li>If equities are grinding higher, volatility is collapsing, and bonds are rallying aggressively… that’s a very different environment than equities rising while volatility is rising and bonds are selling off.</li></ul><p>Same “equities up” headline. Totally different regime under the hood.</p><p>That regime distinction often matters more than the signal itself.</p><p>So the thesis is not “intermarket prediction is magic.”</p><p>It’s more modest:</p><p><em>Other markets can help identify the environment your target market is currently trading inside.</em></p><p>And that’s exactly where a lot of systematic edge lives.</p><h3>The Key Design Choice: One Signal Library Applied Everywhere</h3><p>The core idea in your code is simple, but powerful:</p><ul><li>Define a library of <strong>generic, reusable, mechanical signals</strong></li><li>Apply that same library to each of the 35 markets</li><li>Evaluate each resulting binary condition as a candidate predictor (or regime filter)</li></ul><p>This matters because it forces discipline.</p><p>If you write custom signals per market, you accidentally embed:</p><ul><li>market-specific assumptions</li><li>narrative bias (“gold should do X when inflation is Y”)</li><li>degrees of freedom that explode the search space</li></ul><p>But if you use <strong>the same signal grammar everywhere</strong>, you get:</p><ul><li>consistency</li><li>comparability</li><li>a cleaner statistical problem</li></ul><p>It becomes closer to:<br>“Which markets contain <em>useful state information</em>?”<br>instead of:<br>“Which handcrafted rules feel right?”</p><h3>Why I Start With 50,000+ Signals (On Purpose)</h3><p>People hear “50,000 signals” and assume I’m trying to brute-force my way into an edge.</p><p>That’s not the point.</p><p>The point is to treat signals as <strong>hypotheses</strong>, not as beliefs.</p><p>When you generate signals programmatically, you’re doing something like this:</p><ul><li>RSI(2) &gt;= 70</li><li>RSI(20) &lt;= 25</li><li>MA(10) &gt; MA(50)</li><li>Volume[0] &gt; Volume[10]</li><li>Close[0] &gt; Highest(High, 20)</li><li>NATR[0] &lt; NATR[10]</li><li>Open interest rising vs falling</li></ul><p>None of these are “the strategy.”</p><p>They are <strong>candidate descriptors</strong> of market state.</p><p>And if you run them across 35 markets, you’re no longer asking:</p><p><em>“Does RSI work?”</em></p><p>You’re asking:</p><p><em>“Does a short-term momentum extreme in </em>any specific market<em> reliably precede better outcomes in my target market?”</em></p><p>That’s a different question.</p><h3>The Signal Generator: A Mechanical Grammar of Market Conditions</h3><p>Your get_main_signals() function is essentially a DSL (domain-specific language) for hypothesis creation.</p><p>It builds a list of condition pairs:</p><ul><li>EasyLanguage string (for TradeStation deployment)</li><li>Python/TA-Lib string (for research/testing)</li></ul><p>This is critical if you actually care about production:</p><p><em>The research rules are the deployable rules.</em></p><p>No “research-only” logic. No “we’ll translate later.”<br>Same signal, same meaning, across environments.</p><h3>What’s inside this grammar?</h3><h4>1) RSI thresholds</h4><p>You generate RSI across multiple windows:</p><ul><li>2, 5, 10, 20, 30, 40, 50, 60</li></ul><p>And thresholds from 0 to 95 in steps of 5:</p><ul><li>RSI &gt;= i</li><li>RSI &lt;= i</li></ul><p>That’s already a large hypothesis set. And it’s not about finding “the right RSI level.”</p><p>It’s about discovering:</p><ul><li>which regimes (oversold/overbought / compression / drift) matter</li><li>and in which market they matter</li></ul><h4>2) RSI momentum / change over time</h4><p>You compare RSI today vs RSI shifted:</p><ul><li>RSI(t) &gt; RSI(t — k)</li><li>RSI(t) &lt;= RSI(t — k)</li></ul><p>That turns RSI from a static oscillator into a <strong>state-transition signal</strong>:</p><ul><li>improving momentum vs deteriorating momentum</li></ul><h4>3) Pivot point comparisons</h4><p>You use:</p><ul><li>(H + L + C) / 3</li></ul><p>And compare the pivot to prior pivots:</p><ul><li>pivot[t] &gt; pivot[t-k]</li><li>pivot[t] &lt;= pivot[t-k]</li></ul><p>This tends to capture directional drift in a way that’s different than MA.</p><h4>4) Raw OHLC comparisons</h4><p>You generate a grid of:</p><ul><li>open/high/low/close compared to prior bars</li></ul><p>Both for bar 0 and bar 1 in several blocks.</p><p>This matters because these features often capture:</p><ul><li>gap behavior</li><li>momentum continuation</li><li>mean reversion tendencies</li><li>“where did we open relative to recent structure?”</li></ul><p>And they’re extremely cheap to compute and robust across markets.</p><h4>5) ADX thresholds</h4><p>You generate ADX thresholds across multiple windows:</p><ul><li>2, 5, 10, 20, 30, 40, 50, 60</li><li>with thresholds 5..95</li></ul><p>This creates hypotheses around:</p><ul><li>trend strength regimes</li><li>low-trend chop vs strong directional state</li></ul><h4>6) Moving average relationships</h4><p>You generate MA cross relationships using loops:</p><ul><li>short MA: 5..195 step 5</li><li>long MA: 5..185 step 20</li><li>only short &lt; long</li><li>generate both “short &gt; long” and “short &lt; long”</li></ul><p>This is a cleaner way to build MA signals than dozens of handpicked crossovers.</p><p>It’s systematic and bounded.</p><h4>7) Volatility regime via NATR relationships</h4><p>Rather than thresholds (“NATR &gt; 1.2”), you do comparisons:</p><ul><li>NATR[start] &gt; NATR[end]</li><li>NATR[start] &lt; NATR[end]</li></ul><p>That matters: it’s often the <em>direction</em> of volatility change that matters more than the absolute level.</p><p>This gives you “volatility rising” and “volatility falling” hypotheses without needing to guess a fixed cutoff.</p><h4>8) Volume and volume vs rolling mean</h4><p>Same pattern:</p><ul><li>volume comparisons across time</li><li>volume relative to rolling averages</li></ul><p>Volume is one of those features that often matters more <em>intermarket</em> than within a single market. It can represent:</p><ul><li>participation</li><li>urgency</li><li>stress / liquidation</li><li>regime transition</li></ul><h4>9) Open interest regime changes</h4><p>You generate:</p><ul><li>OI[start] &gt; OI[end]</li><li>OI[start] &lt; OI[end]</li></ul><p>Open interest is a major tell in futures, but it’s not easy to interpret narratively.</p><p>Your approach turns it into something testable:</p><ul><li>“OI expanding”</li><li>“OI contracting”</li></ul><p>Across markets, OI shifts often reflect global positioning changes which can matter for a target market even if the target market’s own OI looks normal.</p><h4>10) Breakout structure: close vs highest high / lowest low</h4><p>These signals detect:</p><ul><li>breakout states</li><li>compression → expansion</li><li>structural level violations</li></ul><p>And you generate them in a systematic grid.</p><h3>Why This Works as a “Large Market View”</h3><p>When you run this signal library across 35 markets, you’re doing something like:</p><p><em>“Build a standardized set of sensors for each market, then ask which sensors predict better future outcomes in my target market.”</em></p><p>This is the same reason macro trading desks watch:</p><ul><li>rates</li><li>dollar</li><li>credit spreads</li><li>volatility</li></ul><p>They’re not trading those instruments necessarily. They’re using them to understand the environment.</p><p>Your approach formalizes that into binary features.</p><p>It’s <em>macro awareness without narrative</em>.</p><h3>The Big Risk: Data Mining and False Discovery</h3><p>Let’s be honest: 50,000 signals is a false discovery factory if you don’t control for it.</p><p>If you test enough hypotheses, you will find “statistically significant” results by chance.</p><p>That doesn’t mean the approach is wrong — it means the validation has to be real.</p><p>This is where your broader pipeline matters:</p><ul><li>normalized returns</li><li>P-tests</li><li>bootstrapping</li><li>superiority tests</li><li>trade count thresholds</li><li>correlation thinning</li><li>out-of-sample validation</li><li>Monte Carlo tests</li><li>Randomized tests</li></ul><p>That’s how you turn “search” into “research.”</p><p>The signal generator creates the hypothesis space.<br>The validation framework is what prevents self-deception.</p><h3>Why This Approach Can Produce More Durable Edges</h3><p>A single-market technical strategy often fails because it’s too close to the noise source.</p><p>But intermarket signals often reflect:</p><ul><li>slower-moving capital flows</li><li>macro regime shifts</li><li>policy cycles</li><li>risk-on / risk-off transitions</li><li>inflation / growth expectations</li></ul><p>Those forces are not perfectly arbitraged away because they don’t express themselves in one instrument cleanly.</p><p>They express themselves across the network.</p><p>So if you can quantify the network state even crudely you often get signals that are more robust than a clever pattern inside one chart.</p><h3>Practical Examples (How to Think About It)</h3><p>Here are a few conceptual examples of what this framework can discover:</p><ul><li><strong>Rates regime as filter</strong>: certain equity signals only work when TY/US is trending down (risk-on rates regime)</li><li><strong>Dollar regime as filter</strong>: commodity systems change behavior depending on EC/JY/SF momentum</li><li><strong>Volatility regime</strong>: many strategies work during VX compression and fail during VX expansion</li><li><strong>Energy input impacts</strong>: HO/RB/CL regime shifts often precede broader inflation expectations affecting multiple markets</li><li><strong>Cross-asset confirmation</strong>: if ES is breaking out but GC is also breaking out while the dollar is rallying… that’s not the same “breakout” environment</li></ul><p>You don’t need to believe any narrative upfront.</p><p>You let the testing tell you which relationships are stable.</p><h3>Closing Thought: This Is How You Avoid Being “Single-Market Blind”</h3><p>If you only study one market, you end up overfitting to that market’s historical quirks.</p><p>A broad market feature set forces you to confront something bigger:</p><p><em>your target market is a node in a network.</em></p><p>This approach , 35 markets, one standardized signal grammar, 50,000 testable hypotheses , is not about finding the “perfect indicator.”</p><p>It’s about building a consistent way to measure the market environment from multiple angles, then letting rigorous validation decide what’s real.</p><p>That’s the difference between data mining and systematic research.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eb0901b8f711" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[From Signals to Systems: A Multi-Layer Voting and Meta-Gating Framework for Robust Trading]]></title>
            <link>https://medium.com/@josh.malizzi/from-signals-to-systems-a-multi-layer-voting-and-meta-gating-framework-for-robust-trading-1aa7fac1df0b?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/1aa7fac1df0b</guid>
            <category><![CDATA[algorithmic-trading]]></category>
            <category><![CDATA[futures-trading]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[trading]]></category>
            <category><![CDATA[stock-market]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Sat, 24 Jan 2026 03:22:19 GMT</pubDate>
            <atom:updated>2026-03-01T14:13:53.962Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DkDly27U65dSYkS6h0pOTA.png" /></figure><p>Most trading systems fail not because their individual signals are bad, but because the way those signals are combined is naïve.</p><p>Researchers spend years discovering indicators, filters, and conditions with genuine edge, only to destroy that edge by averaging everything together or over-optimizing a single composite rule. The result is a brittle system that looks impressive in-sample and collapses when market conditions change.</p><p>This article describes a different approach:<br><strong>a hierarchical ensemble architecture built on behavioral grouping, majority voting, and successive meta-filters.</strong></p><p>The philosophy is simple:</p><p>Let signals vote within environments they understand, then let environments vote on the market, and finally apply light-touch meta rules to remove obvious mistakes.</p><p>The result is not a single “perfect” strategy, but a <strong>self-auditing decision system</strong> that becomes more selective as confidence increases.</p><h3>The Core Idea: Layered Consensus, Not Optimization</h3><p>At the heart of this framework is a rejection of monolithic signal design.</p><p>Instead of asking:</p><p><em>“What single rule should I trade?”</em></p><p>the system asks:</p><p><em>“When many independent perspectives agree, is that agreement meaningful — and can it be improved safely?”</em></p><p>This leads to three structural layers:</p><ol><li><strong>Signal → Group consensus</strong> (within behavioral regimes)</li><li><strong>Group → Master consensus</strong> (across regimes)</li><li><strong>Meta-filters</strong> that gate decisions without rewriting them</li></ol><p>Each layer reduces noise, controls overfitting, and increases interpretability.</p><figure><a href="https://joshmalizzi.substack.com/"><img alt="" src="https://cdn-images-1.medium.com/max/117/1*BVl0oM6XGWQDnrLeqzKbMA.jpeg" /></a><figcaption>Let’s connect on Substack!</figcaption></figure><h3>Step 1: Behavioral Groups as Independent Voting Bodies</h3><p>Before any voting occurs, signals are already partitioned into <strong>behavioral groups</strong> — for example:</p><ul><li>Volatility-positive, market-negative</li><li>Volatility-positive, market-neutral</li><li>Volatility-negative, market-positive</li><li>…and so on</li></ul><p>Each group contains signals that are structurally aligned with the same market conditions. This is critical.</p><p>Signals are not voting against unrelated signals. They are voting among peers that “see” the market in similar ways.</p><p>Think of each group as a specialized committee.</p><h3>Step 2: Majority Voting Inside Each Group</h3><p>Within each group, signals are binary: on or off.</p><p>At every bar, the system counts how many signals in the group are active and compares that count to a <strong>group-specific voting threshold</strong>.</p><p>If enough signals agree, the group emits a trade signal.</p><p>Importantly, this threshold is <strong>not universal</strong>.</p><p>Some environments are noisy and require stronger consensus. Others are sparse and benefit from lower thresholds. Each group has its own required percentage of agreement.</p><p>This accomplishes several things simultaneously:</p><ul><li>Reduces reliance on any single signal</li><li>Dampens noise from unstable indicators</li><li>Preserves diversity of logic within a regime</li></ul><p>The group signal becomes a <strong>probabilistic statement</strong>, not a deterministic rule:</p><p><em>“Enough signals aligned with this market behavior believe a trade is justified.”</em></p><p>This is a meaningful improvement over naïve averaging.</p><h3>Why Majority Voting Works Better Than Weighting</h3><p>Many systems attempt to weight signals by Sharpe ratio or past performance. This often backfires.</p><p>Weights are fragile. They encode historical noise and decay quickly.</p><p>Majority voting is deliberately blunt:</p><ul><li>It ignores magnitude</li><li>It ignores parameter tuning</li><li>It only asks: <em>how many agree?</em></li></ul><p>This makes it remarkably robust.</p><p>In practice, majority voting behaves like a <strong>non-parametric filter</strong>. Signals either support the trade or they don’t. The ensemble adapts naturally as individual signals drift in and out of relevance.</p><h3>Step 3: Group-Level Returns and Accountability</h3><p>Each group’s signal is converted into a return stream and tracked independently.</p><p>This is not just for performance — it’s for <strong>auditability</strong>.</p><p>At any point, you can ask:</p><ul><li>Which groups are contributing?</li><li>Which environments are active?</li><li>Which groups are dormant or harmful?</li></ul><p>This transparency matters enormously in live trading. When drawdowns occur, you are not blind. You can see <em>which types of market logic</em> are failing.</p><h3>Step 4: The Master Ensemble — Groups Vote on the Market</h3><p>Once each group has produced a signal, the system moves up one level.</p><p>Now, <strong>groups vote instead of signals</strong>.</p><p>At each bar, the system counts how many behavioral groups are active and compares that to a master threshold.</p><p>If enough groups agree, the master system trades.</p><p>This is a crucial conceptual shift.</p><p>The master system is not asking:</p><p><em>“Do many signals agree?”</em></p><p>It is asking:</p><p><em>“Do multiple, distinct market perspectives agree?”</em></p><p>This dramatically reduces false positives.</p><p>Random alignment within one regime is common. Alignment across multiple regimes is rare — and meaningful.</p><h3>Why This Reduces Overfitting</h3><p>Overfitting thrives on specificity.</p><p>The more narrowly defined a rule becomes, the more likely it is to fit noise.</p><p>This architecture does the opposite:</p><ul><li>Signals are coarse (binary)</li><li>Voting is discrete</li><li>Thresholds are simple</li><li>No parameters are optimized jointly</li></ul><p>Each layer adds selectivity <strong>without adding degrees of freedom</strong>.</p><p>That is the key.</p><h3>Step 5: Meta-Filtering — Improving Decisions Without Rewriting Them</h3><p>After the master ensemble is built, the system applies <strong>meta-rules</strong> — lightweight gates that sit <em>on top</em> of existing signals.</p><p>A meta-rule does not create new trades.<br>It can only veto or confirm existing ones.</p><p>This distinction is vital.</p><p>Meta-rules are evaluated by asking:</p><p><em>“If I require this additional condition, does the system improve without destroying trade frequency?”</em></p><p>The process is conservative by design:</p><ul><li>A minimum number of in-sample trades is required</li><li>A minimum fraction of base trades must be preserved</li><li>The scoring metric is fixed (e.g., Profit Factor or Sharpe)</li></ul><p>Only the <strong>best single meta rule</strong> is selected at each layer — or none at all.</p><p>If no rule improves the system safely, the base signal is left untouched.</p><p>This is how restraint is enforced programmatically.</p><h3>Meta-1: Improving Each Group Independently</h3><p>The first meta layer operates <strong>within each behavioral group</strong>.</p><p>Each group’s ensemble signal is evaluated against a library of candidate filters. The best filter — if one exists — is applied only to that group.</p><p>This allows, for example:</p><ul><li>A volatility-positive group to add a volatility-confirmation gate</li><li>A trend-positive group to add a regime-confirmation filter</li></ul><p>Crucially, different groups can select different meta rules.</p><p>There is no assumption that one filter fits all environments.</p><h3>Measuring Lift, Not Just Performance</h3><p>After Meta-1 is applied, the system explicitly compares:</p><ul><li>Base group vs. Meta-filtered group</li><li>Across IS, OOS, and multiple OOS segments</li><li>Using trade count, Sharpe, Profit Factor, mean, and variance</li></ul><p>The goal is not just improvement, but <strong>controlled improvement</strong>.</p><p>If Sharpe rises but trade count collapses, the meta rule is suspect.<br>If PF improves modestly while structure remains intact, it’s a win.</p><p>This comparison is logged, saved, and auditable.</p><h3>Step 6: Meta-Ensembling — Groups Vote Again, Post-Filtering</h3><p>After Meta-1 is applied to each group, the system rebuilds the master ensemble using the <strong>filtered group signals</strong>.</p><p>This creates a second-generation master system:</p><ul><li>Same voting logic</li><li>Cleaner inputs</li><li>Fewer low-quality trades</li></ul><p>Importantly, the master voting threshold remains simple. No re-optimization is performed.</p><p>The system’s intelligence comes from <em>structure</em>, not parameter tuning.</p><h3>Meta-2 and Meta-3: Progressive Skepticism</h3><p>The architecture allows for additional meta layers.</p><p>Each layer applies the same conservative logic:</p><ul><li>Require sufficient trade count</li><li>Preserve most of the base behavior</li><li>Score using a fixed metric</li></ul><p>Meta-2 might optimize for overall profitability.<br>Meta-3 might optimize for risk-adjusted returns.</p><p>At each step, the system becomes more selective — but only if justified.</p><p>If no improvement is found, the system stops changing.</p><p>This is the opposite of curve-fitting. It is <strong>iterative skepticism</strong>.</p><h3>Why This Framework Is Robust</h3><p>This method works because it aligns with how markets actually behave:</p><ul><li>Markets shift regimes</li><li>Signals have conditional edge</li><li>Consensus matters more than precision</li><li>Overconfidence is the real enemy</li></ul><p>The system does not pretend to predict regimes.<br>It ensures coverage across them.</p><p>It does not seek perfect signals.<br>It seeks agreement among imperfect ones.</p><p>And it does not blindly optimize.<br>It filters cautiously, one layer at a time.</p><h3>A Mental Model: Committees, Not Dictators</h3><p>A useful analogy is governance.</p><p>Signals are citizens.<br>Groups are committees.<br>The master system is a council.<br>Meta rules are veto powers.</p><p>No single entity controls outcomes.<br>Consensus builds gradually.<br>Bad ideas struggle to survive multiple layers.</p><p>This is not accidental. It is the entire point.</p><h3>Final Thoughts</h3><p>Most systematic trading failures come from excessive confidence in fragile logic.</p><p>This framework replaces confidence with <strong>process</strong>.</p><p>Every decision must survive:</p><ul><li>Signal-level disagreement</li><li>Regime-level disagreement</li><li>System-level disagreement</li><li>Meta-level skepticism</li></ul><p>What remains is not perfect — but it is honest.</p><p>And in markets, honesty about uncertainty is often the greatest edge of all.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1aa7fac1df0b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Slicing Trading Signals by Market Behavior and Why Ensembling Them Works]]></title>
            <link>https://medium.com/@josh.malizzi/slicing-trading-signals-by-market-behavior-and-why-ensembling-them-works-657502988a4a?source=rss-822a1cf1633b------2</link>
            <guid isPermaLink="false">https://medium.com/p/657502988a4a</guid>
            <category><![CDATA[futures-trading]]></category>
            <category><![CDATA[algorithmic-trading]]></category>
            <category><![CDATA[stock-trading]]></category>
            <category><![CDATA[stock-market]]></category>
            <category><![CDATA[trading]]></category>
            <dc:creator><![CDATA[Josh Malizzi]]></dc:creator>
            <pubDate>Fri, 23 Jan 2026 03:37:24 GMT</pubDate>
            <atom:updated>2026-03-01T14:14:48.535Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6ql0IWBG4hu08tTedP_wDw.png" /></figure><p>Most trading systems fail for a simple reason:<br>they assume one signal should work in all markets.</p><p>Markets do not behave that way.</p><p>Trends emerge, collapse, reverse, stall, and fracture across regimes of volatility, sentiment, and participation. Yet most signal research implicitly treats performance as unconditional — averaged across all environments — and then discards signals that “don’t work well enough.”</p><p>A more productive question says something very different:</p><p>Under what market conditions does this signal actually work?</p><p>Once you ask that question, a powerful framework emerges:<br><strong>slice signals into behavioral buckets, then ensemble them across regimes.</strong></p><h3>From “Does It Work?” to “When Does It Work?”</h3><p>Traditional signal evaluation focuses on aggregate statistics:</p><ul><li>Average return</li><li>Sharpe ratio</li><li>Profit factor</li></ul><p>These metrics implicitly assume that signal behavior is stable across time. In reality, many signals are <strong>conditional</strong>:</p><ul><li>Some thrive in rising markets</li><li>Some profit from volatility expansion</li><li>Some fade trends</li><li>Some exploit skewed outcomes</li></ul><p>When evaluated in aggregate, these signals often look mediocre — not because they lack edge, but because their edge is <em>situational</em>.</p><figure><a href="https://joshmalizzi.substack.com/"><img alt="" src="https://cdn-images-1.medium.com/max/117/1*BVl0oM6XGWQDnrLeqzKbMA.jpeg" /></a><figcaption>Let’s connect on Substack!</figcaption></figure><p>The goal of regime slicing is not to find the “best” signal, but to <strong>map signals to the environments they are naturally aligned with</strong>.</p><h3>Step 1: Describe Signal Behavior, Not Just Performance</h3><p>The first step is to stop treating signals as black boxes and instead describe <em>how</em> they behave relative to the market.</p><p>Rather than optimizing parameters, you extract <strong>behavioral features</strong> from each signal’s in-sample return stream. Examples include:</p><ul><li><strong>Market beta</strong><br>Does the signal tend to make money when the underlying market rises or falls?</li><li><strong>Volatility beta</strong><br>Does the signal benefit from volatility expansion or contraction?</li><li><strong>Average return &amp; win rate</strong><br>Does the signal earn profits gradually, or in short bursts?</li><li><strong>Skew</strong><br>Does it rely on rare large wins or steady outcomes?</li><li><strong>Trend bias</strong><br>Does the signal perform better when the market is up versus down?</li></ul><p>These features are not forecasts. They are <strong>descriptive statistics</strong> that summarize how a signal tends to behave <em>conditional on market state</em>.</p><p>This distinction is critical.</p><p>You are not predicting regimes — you are <strong>characterizing alignment</strong>.</p><h3>Step 2: Convert Continuous Behavior into Discrete Buckets</h3><p>Raw feature values are noisy and difficult to reason about directly. A signal with a market beta of 0.07 is not meaningfully different from one at 0.05.</p><p>Instead of relying on absolute values, signals are <strong>ranked and discretized</strong> into bins.</p><p>For example:</p><ul><li>Market beta → negative / neutral / positive</li><li>Volatility beta → negative / neutral / positive</li><li>Trend bias → low / mid / high</li><li>Skew → negative / neutral / positive</li></ul><p>This binning step does something subtle but important:</p><p>It removes false precision.</p><p>Rather than pretending we know exact sensitivities, we say:</p><p><em>“This signal behaves like a volatility-positive strategy.”</em></p><p><em>“This one tends to benefit when markets are down.”</em></p><p>At this point, every signal has a <strong>behavioral fingerprint</strong>, expressed in coarse, interpretable terms.</p><h3>Step 3: Define Market Behavior Groups</h3><p>Once signals are discretized, combinations of bins naturally define <strong>behavioral groups</strong>.</p><p>For example:</p><ul><li>Volatility-positive + market-negative</li><li>Volatility-positive + market-positive</li><li>Volatility-negative + market-neutral</li></ul><p>Each combination represents a <em>style</em> of signal rather than a specific indicator.</p><p>These groups are not arbitrary. They correspond to real market dynamics:</p><ul><li>Risk-off environments</li><li>Risk-on momentum phases</li><li>Low-volatility grind regimes</li><li>Mean-reverting transitions</li></ul><p>By mapping signals into these groups, you are effectively answering:</p><p><em>“What kind of market environment is this signal structurally aligned with?”</em></p><p>Importantly, no performance filtering has happened yet.<br>This is classification, not selection.</p><h3>Step 4: Slice the Signal Universe by Behavior</h3><p>With behavior groups defined, the signal universe is <strong>partitioned</strong> accordingly.</p><p>Instead of one massive pool of binary signals, you now have multiple sub-universes:</p><ul><li>Signals that like rising volatility</li><li>Signals that dislike falling markets</li><li>Signals that exploit skew</li><li>Signals that fade trends</li></ul><p>Each group contains signals that share <strong>structural similarity</strong>, not correlation of returns.</p><p>This distinction matters.</p><p>Two signals can be uncorrelated yet fail in the same regime. Behavioral grouping captures <em>why</em> they work, not just <em>how</em> they co-move.</p><h3>Step 5: Ensemble Within Groups, Not Across Everything</h3><p>Once signals are grouped, ensembling becomes far more effective.</p><p>Instead of ensembling everything together — which blends incompatible behaviors — you ensemble <strong>within behaviorally coherent groups</strong>.</p><p>This produces ensembles that are:</p><ul><li>Internally consistent</li><li>Regime-aligned</li><li>Less diluted by opposing dynamics</li></ul><p>For example:</p><ul><li>A volatility-positive ensemble during risk-off phases</li><li>A market-positive ensemble during trend expansions</li><li>A neutral ensemble during transitions</li></ul><p>Each ensemble represents a <em>conditional strategy</em>, even if the final system is unconditional.</p><h3>Why This Works Better Than Traditional Ensembling</h3><p>Traditional ensembling assumes diversification comes from low correlation alone. In practice, correlation is unstable across regimes.</p><p>Behavioral ensembling works because it diversifies <strong>failure modes</strong>, not just returns.</p><p>A signal fails when the environment changes against it.<br>A behavior-aware ensemble ensures that <em>some</em> components are always structurally aligned with what the market is doing.</p><p>This is not regime prediction.</p><p>It is regime <strong>coverage</strong>.</p><h3>A Subtle but Powerful Benefit: Interpretability</h3><p>One of the biggest advantages of this approach is that it produces systems you can reason about.</p><p>Instead of saying:</p><p><em>“This ensemble has a Sharpe of 1.2.”</em></p><p>You can say:</p><p><em>“This system blends signals that profit from volatility expansion, market weakness, and asymmetric payoffs.”</em></p><p>That narrative matters — for research iteration, risk management, and capital allocation.</p><h3>Why This Is Not Curve-Fitting</h3><p>It’s important to emphasize what this approach is <em>not</em> doing:</p><ul><li>No parameter optimization</li><li>No regime timing rules</li><li>No threshold tuning</li><li>No predictive labels</li></ul><p>The features are descriptive.<br>The bins are relative.<br>The grouping is structural.</p><p>This makes the method far more robust than attempting to predict regimes directly — a notoriously difficult problem.</p><h3>From Signals to a Market-Aware System</h3><p>Slicing signals into behavioral buckets reframes system design.</p><p>You are no longer searching for universal signals.<br>You are assembling <strong>a portfolio of behaviors</strong>.</p><p>Each signal is allowed to be imperfect — even fragile — as long as it is honest about <em>when</em> it works.</p><p>The ensemble becomes strong not because its components are flawless, but because their strengths activate in different environments.</p><h3>Final Thought</h3><p>Markets are not stationary.<br>Signals are not universal.<br>Averaging behavior hides information.</p><p>By slicing signals into behavioral buckets and ensembling them intentionally, you move from signal hunting to <strong>market-aware system design</strong>.</p><p>Not every signal needs to work all the time.</p><p>It just needs to know <em>when it belongs</em>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=657502988a4a" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>