<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Quantreo]]></title><description><![CDATA[Real-life quant trading tips.
All Friday by mail.]]></description><link>https://www.newsletter.quantreo.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Y0GG!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5709b73-08d5-47ec-9254-66545ec25261_512x512.png</url><title>Quantreo</title><link>https://www.newsletter.quantreo.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 20 Apr 2026 00:48:55 GMT</lastBuildDate><atom:link href="https://www.newsletter.quantreo.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Lucas]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[quantreo@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[quantreo@substack.com]]></itunes:email><itunes:name><![CDATA[Lucas]]></itunes:name></itunes:owner><itunes:author><![CDATA[Lucas]]></itunes:author><googleplay:owner><![CDATA[quantreo@substack.com]]></googleplay:owner><googleplay:email><![CDATA[quantreo@substack.com]]></googleplay:email><googleplay:author><![CDATA[Lucas]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Build once. Run live.]]></title><description><![CDATA[A unified approach to feature pipelines across research and production]]></description><link>https://www.newsletter.quantreo.com/p/build-once-run-live</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/build-once-run-live</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 17 Apr 2026 14:30:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b7fd6461-aa53-4bab-8f06-1e4941f1a2c7_1280x640.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most pipelines break when they leave research.</p><p>Not because they are incorrect, but because <strong>they were never designed to run incrementally</strong>. They assume full history, they assume recomputation, and they assume a static environment where everything can be rebuilt at each step.</p><p><strong>Live systems operate under very different constraints</strong>. Data arrives sequentially, latency accumulates, and every inefficiency becomes persistent. In that context, the feature pipeline is no longer a preprocessing step. It becomes part of the system itself.</p><div><hr></div><h2>1. A pipeline that works in both worlds</h2><p>With <a href="https://oryonlib.dev">Oryon</a>, the same pipeline object can be <strong>used across both research and production environments</strong> without modification.</p><p>It can be applied on full historical datasets in batch mode, and <strong>it can continue updating in a streaming setting using the exact same logic</strong>. There is no distinction between the two modes, no hidden adaptation layer, and no change in behavior.</p><p>This is not a convenience feature. It is a design constraint. <strong>The pipeline is built to behave identically regardless of how it is fed</strong>.</p><p>To keep the example simple, we can start from one of the sample datasets available directly in Oryon.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;451573a2-eb9a-4c4a-956c-37e14a02c924&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from oryon.datasets import load_sample_bars

df = load_sample_bars()
historical_bars, live_bars = df.iloc[:-10, :], df.iloc[-10:, :]</code></pre></div><p>For the rest of this example, the idea is straightforward: we use the <strong>historical portion to initialize</strong> and validate the pipeline in research conditions, then we use the last ten bars to simulate a <strong>live stream and observe the updates one step at a time</strong>.</p><div><hr></div><h2>2. Defining a feature pipeline</h2><p>We start by defining a set of features <strong>as a structured pipeline</strong>. Each component is <strong>stateful and designed to update</strong> incrementally.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;aa54d9a4-bcab-451c-ba90-e114ff95d0a3&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from oryon import FeaturePipeline
from oryon.features import Sma, ParkinsonVolatility, Correlation, ShannonEntropy, Adf


features_list = [
    Sma(inputs=["close"], window=10, outputs=["close_sma_10"]),
    Sma(inputs=["close"], window=50, outputs=["close_sma_50"]),
    ParkinsonVolatility(inputs=["high", "low"], window=20, outputs=["close_pvol_20"]),
    ParkinsonVolatility(inputs=["high", "low"], window=100, outputs=["close_pvol_100"]),
    Correlation(inputs=["close", "volume"], window=30, outputs=["close_volume_corr_30"]),
    ShannonEntropy(inputs=["close"], window=50, outputs=["close_entropy_50"]),
    Adf(inputs=["close"], window=100, outputs=["close_adf_100", "close_adf_pval_100"])
]

pipe = FeaturePipeline(features_list, input_columns=["high", "low", "close", "volume"])</code></pre></div><p>This is not a collection of independent indicators. It is a coherent system that maintains its own internal state and evolves as new data arrives.</p><div><hr></div><h2>3. Applying the pipeline in research</h2><p>Once the pipeline is defined, we can apply it on historical data to inspect the outputs in research conditions.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;58d861fd-5aa9-4bee-a8dd-bab37c742e37&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from oryon.adapters import run_features_pipeline_pandas
df_features = run_features_pipeline_pandas(pipe, historical_bars)</code></pre></div><p>Under the hood, the pipeline is designed to consume data as a list of lists rather than as a DataFrame directly. This may look slightly less convenient at first, but it comes from the same <strong>architectural choice that makes the system efficient</strong> in live trading: the update path is built around a minimal, streaming-oriented input structure.</p><p>In practice, this means the research interface stays aligned with the production one. Instead of introducing a separate batch-only abstraction, <strong>Oryon keeps the same core design and provides adapters to make research workflows</strong> easier to use.</p><p>That is exactly what <code>run_features_pipeline_pandas</code> does here. It converts the DataFrame into the internal list-of-lists format and applies the pipeline sequentially, so the historical execution remains fully consistent with the live update model.</p><p>The <strong>same idea is also available for Polars</strong>, which makes it easy to keep the same workflow regardless of the dataframe engine used upstream.</p><div><hr></div><h2>4. Switching to streaming</h2><p>Once the historical pass is complete, the same pipeline can continue operating in streaming mode.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;a6a703e7-a8f5-4863-af60-275f9cb3e8d0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">for bar in live_bars.itertuples():
  input_values = [bar.high, bar.low, bar.close, bar.volume] # pipe needs a list for the inputs
  output = pipe.update(input_values)
  print(output)

# [102.03397795639191, 102.41105040279119, 0.001373007598669601, 0.0018930289783861594, -0.21026851276116704, 0.948176332443655, -1.800248586774662, 0.380344996295653]
# ...
# [102.03397795639194, 102.25925749878635, 0.001373007598669601, 0.0018768715423311845, -0.1494113110563763, 0.8844888723968832, -4.77931213498186, 6.212151160126344e-05]</code></pre></div><div><hr></div><h2>5. Why this matters</h2><p>In most trading systems, the pipeline is effectively implemented twice. Once in research, often using batch-oriented tools, and once again in production, using a different stack optimized for streaming.</p><p><strong>This duplication introduces divergence</strong>. Subtle differences appear, edge cases behave differently, and the system becomes harder to validate as a whole.</p><p><strong>Oryon removes that duplication entirely</strong>. The pipeline is defined once, validated once, and then used as-is in production.</p><p></p><blockquote><p><strong>If you want to take this further and connect feature pipelines with AI agents, you can take a look at <a href="https://www.quantreo.com/ai-trading-lab/">AI Trading Lab</a>.</strong></p></blockquote><p></p><p><a href="https://oryonlib.dev">Oryon</a> is now available in beta.</p><p>If you want to take a closer look at the library and its design, you can explore it directly on <a href="https://github.com/lucasinglese/oryon">GitHub</a>.</p><p>And if you find it useful, consider adding a star. it helps more than it seems.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em><strong>Subscribe to follow the ideas, tools, and production-grade systems shaping modern quantitative trading.</strong></em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[From Quantreo to Oryon]]></title><description><![CDATA[Latency does not start at execution. It starts upstream, in the feature pipeline.]]></description><link>https://www.newsletter.quantreo.com/p/from-quantreo-to-oryon</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/from-quantreo-to-oryon</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 10 Apr 2026 14:30:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e6499621-e8a4-4c3b-bbf1-7318f7b1ba93_1280x640.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most trading systems do not lose performance at execution time. They <strong>lose it upstream</strong>, in the way features are computed, updated, and maintained. In research, full recomputation is acceptable. In production, <strong>it becomes a structural inefficiency</strong>.</p><p>Every unnecessary pass over the data, every oversized state, every hidden dependency in the pipeline introduces latency that compounds over time. Not always visible, but always present.</p><p><strong>Oryon was designed to remove that layer entirely</strong>.</p><p>Not by optimizing it. By redefining it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TzKp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TzKp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TzKp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TzKp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TzKp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TzKp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg" width="1280" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61236,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/193673294?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1abdf4af-d1bf-46ed-96d1-4f9460ac8ca3_1280x640.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TzKp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TzKp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TzKp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TzKp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06fd1045-3ab7-434e-91f9-639035964a4f_1280x640.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h2>1. Rethinking Feature Computation</h2><p>Oryon is the beta 2 of Quantreo, but more importantly, it introduces a different abstraction. Features are no longer batch transformations. They are <strong>stateful, incremental objects</strong>.</p><p>Each update processes only the newest observation, maintains only the strictly required state, and returns the current value immediately.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;a81cbfc0-4163-40ee-b2ec-eb225a84ecfd&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from oryon.features import Sma

sma = Sma(["close"], window=3, outputs=["sma_3"])

sma.update([100.0])  # &#8594; [nan]
sma.update([101.0])  # &#8594; [nan]
sma.update([102.0])  # &#8594; [101.0]
sma.update([103.0])  # &#8594; [102.0]</code></pre></div><p>The important part is not the indicator itself. A 3-period moving average stores exactly three values. No history, <strong>no recomputation</strong>, <strong>no hidden overhead</strong>.</p><p>This same design extends consistently across the library:</p><ul><li><p>entropy-based features</p></li><li><p>ADF-style statistical tests</p></li><li><p>multiple volatility estimators</p></li><li><p>rolling and dynamic correlations</p></li><li><p>operators, transformations, and scalers</p></li></ul><p>All built around the same constraint:</p><p><strong>&#8594; Compute once, update incrementally, stay minimal in memory.</strong></p><div><hr></div><h2>2. Performance where it actually matters</h2><p>Oryon is built on a Rust-backed core, exposed through a minimal Python interface.</p><p>This is not an implementation detail. It is a design requirement.</p><p>Under production conditions:</p><ul><li><p>fast paths run below <strong>1 microsecond</strong></p></li><li><p>the slowest feature update remains under <strong>19 microseconds</strong></p></li><li><p>a full feature state can be refreshed in <strong>less than 1 millisecond</strong></p></li></ul><p>This is where the difference becomes tangible.</p><p>Not in isolated benchmarks, but in continuous pipelines running live, where every microsecond accumulates.</p><div><hr></div><h2>3. One pipeline, from research to production</h2><p>The <strong>same abstraction is used everywhere</strong>. The same objects.<br>The same update logic. The same behavior. There is <strong>no distinction between a research pipeline and a production pipeline</strong>. No reimplementation, no hidden mismatch, no translation layer.</p><blockquote><p>What you build is what you run. This removes an entire class of errors that typically appears when moving from notebooks to live systems.</p></blockquote><p>And it forces a discipline. Features must be correct, incremental, and production-ready from the start.</p><p>&#8658; <strong>In the next newsletter, we&#8217;ll build a research pipeline that is natively streaming-ready and can be deployed as-is in production.</strong></p><p></p><p><a href="https://oryonlib.dev">Oryon</a> is now available in beta.</p><p>If you want to take a closer look at the library and its design, you can explore it directly on <a href="https://github.com/lucasinglese/oryon">GitHub</a>.</p><p>And if you find it useful, consider adding a star. it helps more than it seems.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em><strong>Subscribe to follow the ideas, tools, and production-grade systems shaping modern quantitative trading.</strong></em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Why intra-bar features matter]]></title><description><![CDATA[How to enrich higher-timeframe bars with lower-timeframe information without changing your full research workflow.]]></description><link>https://www.newsletter.quantreo.com/p/why-intra-bar-features-matter</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/why-intra-bar-features-matter</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 03 Apr 2026 14:30:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d5e5cc5a-95f9-4fff-bfd5-c30db31224f0_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When we work with hourly or daily bars, we usually keep only OHLCV.</p><p>But two hourly bars with the same OHLCV can hide very different internal behaviors.</p><p>One may trend smoothly.</p><p>Another may be noisy, mean-reverting, or <strong>highly asymmetric inside the bar</strong>.</p><div class="pullquote"><p>That is exactly where intra-bar features become useful.</p></div><p>Instead of treating each bar as a simple summary, we can rebuild it from a lower timeframe and <strong>compute additional metrics</strong> inside the bar, such as <em><strong>slope</strong></em>, <em><strong>skewness</strong></em>, <em><strong>kurtosis</strong></em>, or other <strong>microstructural statistics</strong>. <a href="https://docs.quantreo.com/data-aggregation/bar-metrics/">Quantreo&#8217;s bar metrics</a> are designed for that workflow through the `<em>additional_metrics</em>` mechanism, which adds custom columns computed from the data inside each bar. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1. The Core Idea</h2><p>The idea is simple.</p><p>If you trade on a higher timeframe, for example 1H, you can use a lower timeframe, for example 1 minute, to reconstruct each hourly bar and compute what happened inside it.</p><p>This gives you extra information that standard OHLCV cannot capture.</p><p>In Quantreo, these bar-level metrics are meant to <strong>enrich traditional bars</strong> with statistical and microstructural information extracted from the data inside each bar. </p><p>The documentation explicitly mentions examples such as <strong>skewness, kurtosis, Hurst exponent, volume-profile-type features, and other custom indicators</strong>. </p><div><hr></div><h2>2. Why This Matters</h2><p>A bar is a compression of information.</p><p>And <strong>sometimes</strong>, that compression removes <strong>exactly the behavior you care about</strong>.</p><p>With intra-bar metrics, you can start distinguishing:</p><p>- smooth vs noisy bars<br>- directional vs unstable bars<br>- balanced vs asymmetric internal price action<br>- ordinary bars vs bars with unusual internal structure</p><blockquote><p><strong>This is often where extra signal can appear</strong>, especially when many strategies rely only on the final OHLCV snapshot.</p></blockquote><div><hr></div><h2>3. Examples Of Useful Intra-Bar Features</h2><p>Some useful examples are:</p><p>- linear slope inside the bar<br>- skewness<br>- kurtosis<br>- volume concentration features<br>- custom metrics derived from price or price-volume distributions</p><p><a href="https://docs.quantreo.com/data-aggregation/bar-metrics/">Quantreo</a> already documents built-in bar metrics such as `<em>skewness</em>`, `<em>kurtosis</em>`, `<em>volume_profile_features</em>`, and `<em>max_traded_volume</em>`, and also allows fully custom metrics through `<em>additional_metrics</em>`. </p><div><hr></div><h2>4. The Practical Workflow</h2><p>A clean workflow looks like this:</p><p>- choose your trading timeframe, for example 1H<br>- take a lower timeframe or raw tick data<br>- rebuild the higher-timeframe bars<br>- compute intra-bar metrics during aggregation<br>- use these new columns as additional features in your research pipeline</p><p>In Quantreo, each metric is attached through an `<em>additional_metrics</em>` <strong>tuple</strong> that specifies the function, the input source (`price`, `volume`, or `price_volume`), and the output column names. </p><div><hr></div><h2>5. Why I Like This Approach</h2><p>I like this approach because it adds information <strong>without forcing you to redesign your whole pipeline</strong>.</p><blockquote><p>You still work with bars.</p><p>You still keep a structured dataframe.</p><p>But your bars become much richer.</p></blockquote><p>So instead of changing the whole strategy framework, <strong>you improve the quality of the representation</strong>.</p><div><hr></div><h2>6. Performance Matters Too</h2><p>This kind of idea is only useful if it remains practical at scale.</p><p>Quantreo recommends using <strong>Numba</strong> for <strong>custom metrics</strong> because bar building can involve <strong>millions of ticks</strong>, and the documentation notes that pure Python or Pandas implementations can be <strong>20x to 100x slower than Numba-compiled functions</strong>. </p><div><hr></div><h2>7. Who This Is For</h2><p>This is especially useful for people who:</p><p>- already use bar-based workflows<br>- want more signal without jumping directly to raw tick models<br>- care about microstructure, but still want a clean research pipeline<br>- want to enrich higher-timeframe features with lower-timeframe behavior</p><p></p><p></p><p>OHLCV is often a good starting point, but it is still a compression.</p><p><strong>And sometimes, alpha lives inside what that compression removes.</strong></p><p>That is why intra-bar features are so interesting.</p><p>They let you keep the simplicity of bar-based research while injecting part of the information hidden inside each bar.</p><p></p><p>&#128073; Want to learn from A to Z how to <strong>build and use intra-bar features in a real quantitative research workflow</strong>? That&#8217;s exactly what the <strong><a href="https://www.quantreo.com/ml4trading-course/">ML4Trading</a></strong> Program is designed for.</p>]]></content:encoded></item><item><title><![CDATA[Why I always try to simplify my alpha formulas]]></title><description><![CDATA[Simpler formulas will miss some cases. But in many situations, that is exactly what makes them more robust.]]></description><link>https://www.newsletter.quantreo.com/p/why-i-always-try-to-simplify-my-alpha</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/why-i-always-try-to-simplify-my-alpha</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 27 Mar 2026 15:30:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c07ec044-50b4-4525-bcb5-47f9199247dc_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I work on an alpha, I almost always try to simplify the formula as much as possible.</p><p>Not because simple models are always better.<br>Not because complexity is useless.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>But because every unnecessary degree of freedom increases the risk of overfitting.</p><p>In practice, I often prefer very simple structures such as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;y = \\beta_0 + \\beta_1 x_1 + ... + \\beta_n x_n&quot;,&quot;id&quot;:&quot;WJXJLUBNDO&quot;}" data-component-name="LatexBlockToDOM"></div><p>and sometimes a square or cubic term when it is clearly justified.</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;y = \\beta_0 + \\beta_1 x_1 +  \\beta_{1*} x_{1}^2 + ... + \\beta_n x_n&quot;,&quot;id&quot;:&quot;FBCUWSRGIA&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>Of course, the goal is not to destroy the alpha just to end up with a pretty equation.</p><p>The real objective is to find the sweet spot between simplicity and performance.</p><div><hr></div><p><strong>1. Why Simplicity Matters</strong></p><p>A formula that is too flexible can fit noise very easily.</p><p>The more parameters, interactions, nonlinearities, and transformations you add, the easier it becomes to explain the past.</p><p>But explaining the past <strong>is not the same as capturing a repeatable market effect</strong>.</p><p>A simpler formula usually gives you three major benefits:</p><p>- <strong>lower overfitting</strong> risk<br>- easier interpretation<br>- easier <strong>monitoring in live</strong> trading</p><p>And in many cases, that last point matters more than people think.</p><p>If an alpha starts degrading, a simple structure is much easier to diagnose than a black box.<br></p><div><hr></div><h2>2. Simple Does Not Mean Naive</h2><p>This is where many people get the message wrong.</p><p>The goal is <strong>not to force every alpha into a linear model</strong> just because it looks cleaner.<br>The goal is to <strong>remove unnecessary complexity while preserving the core market logic</strong>.</p><p>Sometimes the signal is already captured well by a linear combination (with or without linear expansion).</p><p>And sometimes the real structure is more complex, and <strong>oversimplifying it would simply kill the alpha</strong>.</p><p>So the real question is not: &#8220;Can I make it simple?&#8221;</p><p>It is: &#8220;<strong>How much complexity is truly necessary to preserve the signal?</strong>&#8221;</p><div><hr></div><h2>3. The Types Of Formulas I Prefer</h2><p>In most cases, I start by testing whether the alpha can be expressed through a very compact structure.</p><p>Typically:</p><p>- linear terms<br>- maybe one or two polynomial terms<br>- very limited interactions<br>- very few input variables</p><p>That gives me a model that is <strong>easier to understand</strong>, easier to stress test, and much harder to overfit than a more flexible alternative.</p><p></p><p>Only when this simplification fails do I consider a machine learning model.</p><p>And even then, I usually keep that for situations where:</p><p>- the number of input variables is small<br>- the relationship looks real but not easily compressible into a simple equation<br>- the added complexity is justified by out-of-sample behavior, not just in-sample fit</p><div><hr></div><h2>4. A Case Where Simplification Helps</h2><p>Imagine a signal that depends mostly on:</p><p>- short-term return<br>- recent volatility<br>- distance from a local mean</p><p>A complex model may build a tangled nonlinear response with many interactions.</p><p>But in practice, you may find that something as simple as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\alpha =  \\beta_0 +  \\beta_1 return + \\beta_2 volatility^2 + \\beta_3*dist^3&quot;,&quot;id&quot;:&quot;THKHNZZFQO&quot;}" data-component-name="LatexBlockToDOM"></div><p>already captures most of the usable signal.</p><p>Will it miss some edge cases? <strong>Yes</strong>.</p><p>But if the simplified version keeps most of the predictive power while being much more stable, that is often the better trade-off.</p><div><hr></div><p>5. A Case Where Simplification Fails</p><p>Now imagine a signal where the effect only appears under a <strong>specific conditional structure</strong>.</p><p>For example:</p><p>- feature A matters <strong>only</strong> when volatility is high<br>- feature B becomes relevant <strong>only</strong> when liquidity is thin<br>- the relationship changes sharply across regimes</p><p>In that case, <strong>forcing everything into one clean linear equation</strong> may remove exactly what makes the alpha work.</p><p>This is where a slightly more flexible model, or even a small machine learning model, can be justified.</p><p><strong>But the key point is that complexity should come from necessity, not from habit.</strong></p><div><hr></div><h2>6. The Real Objective: Find The Sweet Spot</h2><p>This is how I think about it:</p><p>- too simple, and you may t<strong>hrow away real structure</strong><br>- too complex, and you <strong>may fit noise</strong><br>- somewhere in between, there is a level of complexity that <strong>preserves the alpha while keeping it robust</strong></p><p>That is the sweet spot.</p><p>And in my experience, most people start too far on the complex side.</p><div><hr></div><h2>7. A Practical Checklist I Use</h2><p>Before keeping a more complex formula, I usually ask:</p><ul><li><p>Does the extra complexity improve out-of-sample results?</p></li><li><p>Does it survive across periods and regimes?</p></li><li><p>Can I explain why this extra term should exist economically or behaviorally?</p></li><li><p>Can I monitor it properly in live trading?</p></li><li><p>If I simplify it, how much signal do I really lose?</p></li><li><p>If complexity does not clearly earn its place, I usually remove it.</p></li></ul><p></p><p></p><p>A good alpha is not the most sophisticated equation you can write.</p><p>It is a signal that keeps working when reality stops being friendly.</p><p>That is why I usually start with the simplest valid structure I can build, and only add complexity when the data clearly proves it is needed.</p><p></p><p>&#128073; If you want to go <strong>deeper into the strategy design process</strong> and use AI to generate, structure, and refine trading ideas faster, that&#8217;s exactly what <strong><a href="https://www.quantreo.com/ai-trading-lab/">AI Trading Lab</a></strong> is built for.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Finding Alphas. A solid map of alpha research.]]></title><description><![CDATA[A concise review of what the book does well, where it falls short, and which chapters are worth reading first.]]></description><link>https://www.newsletter.quantreo.com/p/finding-alphas-a-solid-map-of-alpha</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/finding-alphas-a-solid-map-of-alpha</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 20 Mar 2026 15:30:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e389dffc-e35f-45c1-9000-fd33f1b0e873_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I recently read <strong>Finding Alphas</strong>, edited by Igor Tulchinsky and contributors from WorldQuant.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GfVI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GfVI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic 424w, https://substackcdn.com/image/fetch/$s_!GfVI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic 848w, https://substackcdn.com/image/fetch/$s_!GfVI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic 1272w, https://substackcdn.com/image/fetch/$s_!GfVI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GfVI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic" width="246" height="380" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:380,&quot;width&quot;:246,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28299,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/190610639?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GfVI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic 424w, https://substackcdn.com/image/fetch/$s_!GfVI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic 848w, https://substackcdn.com/image/fetch/$s_!GfVI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic 1272w, https://substackcdn.com/image/fetch/$s_!GfVI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29b91614-4864-4f69-8c32-fb5cf04640ce_246x380.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is not a deep technical monograph, and it is not a book that will hand you a ready-to-trade edge. It is better understood as a structured overview of how professional alpha research is framed: idea generation, data selection, backtesting, robustness, turnover, correlation, bias control, risk, and portfolio thinking.</p><p>That is also its main strength. The book gives a broad and practical map of the research process, with many short chapters written from the perspective of practitioners rather than academics. </p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1. What The Book Does Well</h2><p>Its biggest strength is breadth with structure.</p><p>The book covers the full <strong>alpha research pipeline</strong> rather than obsessing over one narrow topic. The strongest part is clearly the &#8220;<strong>Design and Evaluation</strong>&#8221; section, where the discussion moves through alpha design, data, turnover, correlation, overfitting, biases, robustness, risk factors, drawdowns, and automated search. For someone building research habits, this is much more valuable than yet another book full of isolated signals. </p><p>Another strong point is that the book repeatedly <strong>brings the reader back to the same core reality</strong>: alpha research is not only about finding a signal, but about testing whether it survives costs, bias, crowding, instability, and implementation constraints. That emphasis appears throughout the book, especially in the chapters on turnover, backtest overfitting, controlling biases, robustness, and risk. </p><p>The tone is also pragmatic. The objective is not to impress with theory, but to give a framework for <strong>thinking like a systematic researcher</strong>.</p><p></p><div><hr></div><h2>2. Where The Book Is Weaker</h2><p>The main limitation is also obvious: this is a WorldQuant-style book.</p><p>That makes it useful, but it also gives it a specific lens. You get many high-level principles, many conceptual tools, and many short examples, but <strong>not the level of implementation detail needed</strong> to go from &#8220;good research mindset&#8221; to a fully deployable institutional strategy.</p><p>In other words, the book is strong on framework, weaker on depth.</p><p>It also reads more like a collection of essays than a single tightly argued book. That makes it accessible, but it also means some chapters feel more useful than others, and the overall depth is uneven.</p><p>Finally, if you already have a strong background in robust backtesting, data engineering, portfolio construction, and production constraints, <strong>a fair part of the material will feel familiar</strong>.</p><div><hr></div><h2>3. The Most Useful Chapters</h2><p>If you read only a subset, I would prioritize these:</p><p>- <strong>Chapter 4</strong>, Alpha Design<br>- <strong>Chapter 6</strong>, Data and Alpha Design<br>- <strong>Chapter 7</strong>, Turnover<br>- <strong>Chapter 9</strong>, Backtest. Signal or Overfitting?<br>- <strong>Chapter 10</strong>, Controlling Biases<br>- <strong>Chapter 12</strong>, Techniques for Improving the Robustness of Alphas<br>- <strong>Chapter 14</strong>, Risk and Drawdowns<br>- <strong>Chapter 15</strong>, Alphas from Automated Search</p><p>Together, these chapters capture the real value of the book: not &#8220;a list of alpha ideas,&#8221; but a way of thinking about signal design under real-world constraints. </p><div><hr></div><h2>4. Who Should Read It</h2><p>This book is especially useful for:</p><p>- beginners who want a <strong>structured map</strong> of alpha research<br>- intermediate quants who already test ideas <strong>but need a cleaner framework</strong><br>- researchers who think too much about signals and not enough about <strong>implementation risk</strong></p><p>For very advanced readers, I would see it more as a compact refresher than a game-changing text.</p><div><hr></div><h2>5. Final Take</h2><p>My overall view is simple.</p><p>Finding Alphas is a good professional overview of the alpha research process. Its value is not that it reveals secret signals. Its value is that it helps you think more clearly about how alphas are actually designed, evaluated, stress-tested, and organized inside a systematic research workflow.</p><p>So no, this is not the one book that will teach you how to print money.</p><p>But yes, it is a book that can help you build a much better research mindset. And in quant, that is often more valuable than one extra idea. </p><p>&#128073; If you want to go <strong>deeper into the strategy design process</strong> and use AI to generate, structure, and refine trading ideas faster, that&#8217;s exactly what <strong><a href="https://www.quantreo.com/ai-trading-lab/">AI Trading Lab</a></strong> is built for.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Quantreo 0.2.0. We rebuild of the foundations. ]]></title><description><![CDATA[A major step forward to make the library more robust, more scalable, and closer to production-grade quantitative research standards.]]></description><link>https://www.newsletter.quantreo.com/p/quantreo-020-we-rebuild-of-the-foundations</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/quantreo-020-we-rebuild-of-the-foundations</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 13 Mar 2026 15:31:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0a263319-ba6d-4c73-8da6-74d11e756d7a_2406x1518.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Quantreo 0.2.0 Beta is not a simple update. It is a complete rebuild of the foundations behind the library.<br>The goal was clear: create a <strong>stronger base for research</strong>, simplify the creation of new features, <strong>raise engineering standards</strong>, and prepare the project for what comes next.<br>And yes, the project name will also change soon. More on that at the right time.</p><div><hr></div><h2>1. A New Foundation</h2><p>A new version, but more importantly, a new foundation.<br><br>Quantreo 0.2.0 Beta is not about adding a few new features on top of the existing codebase. It is about <strong>rebuilding the foundations properly</strong>, so the project can grow with more structure, more robustness, and a much higher standard of development.<br><br>This release also opens the door to a broader evolution of the project, including a future name change.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>2. Some News</h2><p>Here are three important changes behind this new beta.</p><p>First, the project is <strong>now opening its contributing process</strong>. The goal is not just to make the library public, but to make it <strong>easier to extend</strong>, cleaner to navigate, and stronger as an <strong>open quantitative research project</strong>.</p><p>Second, <strong>a new pipeline</strong> has been introduced to automate and simplify the creation of many features. This makes feature engineering more scalable, more consistent, and much easier to maintain as the library grows.</p><p>Third, the library now includes more tests and more safeguards across the codebase. The objective is clear: push the project toward a much higher level of reliability and engineering quality, with standards inspired by what serious research environments require.</p><p></p><p></p><p>And this is only part of the work.</p><p>Many other improvements and additions are already on the way. Some are focused on usability, others on architecture, reliability, and the long-term direction of the project.</p><p>Quantreo 0.2.0 Beta is not the end of a rebuild. It is the beginning of a much stronger version of the library.</p><p>The new version is not available yet, however, <strong>I will share more about the release date soon.</strong><br><br>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The 7 Mistakes I See Every Week (ML)]]></title><description><![CDATA[Most ML failures are not about models. They are about problem framing, uncertainty, and turning a score into a tradable portfolio.]]></description><link>https://www.newsletter.quantreo.com/p/the-7-mistakes-i-see-every-week-ml</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/the-7-mistakes-i-see-every-week-ml</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 06 Mar 2026 15:30:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/628c8867-8881-483b-bf4c-504f110ccbe4_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most beginners treat machine learning like a magic button.</p><p>They train a model, get a prediction, and convert it straight into a buy or sell. The backtest looks clean. Then live trading happens, and the edge evaporates.</p><p>Here are the seven mistakes behind most ML misuse in trading, and what experienced quants do instead.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h3>1) Predicting a point instead of modeling uncertainty</h3><p>A single number feels precise. It is usually fragile.</p><p>In markets, what matters is not &#8220;the next return.&#8221; It is the distribution of outcomes given today&#8217;s context.</p><p>If you cannot answer &#8220;how uncertain is this?&#8221; you do not have a signal. You have a guess. (<strong>To go further on this point, you should check conformal forecasting</strong>)</p><div><hr></div><h3>2) Optimizing accuracy instead of optimizing decisions</h3><p><strong>High accuracy can still lose money.</strong></p><p>Why? Because trading is not a classification contest. Costs, slippage, tail losses, and error clustering dominate. A model that is right slightly more often can still be wrong exactly when it hurts.</p><p>What you actually want is a decision rule that survives reality. That means evaluating ML with trading-oriented metrics and stress tests, not just standard ML scores.</p><div><hr></div><h3>3) Thinking &#8220;ML model &#8594; signal&#8221;</h3><p>This shortcut is the biggest conceptual error.</p><p>A model output is not a trade. It is an input to a process.</p><p>A robust pipeline looks like this:<br><strong>Problem &#8594; ML model &#8594; alpha &#8594; position sizing &#8594; strategy rules &#8594; portfolio</strong></p><p>If you skip the middle, you are not trading a model. You are trading noise with confidence.</p><div><hr></div><h3>4) Treating the model as the edge</h3><p>ML does not create an edge out of thin air. It amplifies what you feed it.</p><p>If your data has no stable structure, the model will still fit something. That &#8220;something&#8221; is often a backtest-only pattern.</p><p>In practice, <strong>edge comes from market structure, behavior, flows, constraints, and regimes</strong>. ML helps you measure or express that edge. It does not replace it.</p><div><hr></div><h3>5) Getting the target wrong</h3><p>Most ML blowups start here.</p><p>A fancy architecture cannot fix a target that is unstable, ambiguous, or mismatched to execution.</p><p>Common failures:</p><ul><li><p>horizons that do not match your average holding period</p></li><li><p>labels that are too close to price noise</p></li><li><p>targets that drift as volatility regimes change</p></li></ul><p>A clean target is not &#8220;more ML.&#8221; <strong>It is better research</strong>.</p><div><hr></div><h3>6) Validation that leaks reality</h3><p>Random splits, improper scaling, peeking at the future, tuning on the same regime you test on. <strong>This is the silent killer</strong>.</p><p>In trading, the only validation that matters is forward-looking, regime-aware evaluation.</p><p>If your process does not answer &#8220;<strong>does this survive different market conditions?</strong>&#8221; your performance is a story, not evidence.</p><div><hr></div><h3>7) Ignoring what happens when the model is wrong</h3><p>This is where senior quants spend most of their time.</p><p>The key question is not average performance. It is conditional behavior:</p><ul><li><p>When the model is wrong, how wrong is it?</p></li><li><p>Do errors cluster?</p></li><li><p>Does it fail in specific regimes?</p></li><li><p>What happens to the portfolio in those periods?</p></li></ul><p>A model that is &#8220;good on average&#8221; but collapses in a few scenarios is not robust. It is a hidden tail bet.</p><div><hr></div><h3>The practical takeaway</h3><p>Machine learning is not a trading strategy. It is a tool for conditional estimation under uncertainty.</p><p>If you want to use ML correctly, stop asking: &#8220;What will the market do?&#8221;<br>Start asking: &#8220;Given what I know now, what is the distribution, how reliable is it, and how should my risk respond?&#8221;</p><p><strong>That is the difference between a model that looks smart and a system that survives.</strong></p><p>&#128073; If you want to go deeper, build smarter features, understand signal reliability, and master techniques like <strong>features selection, features engineering, or feature conditioning</strong>, that&#8217;s exactly what we cover in <strong><a href="https://www.quantreo.com/ml4trading-course/">ML4Trading</a></strong>.</p>]]></content:encoded></item><item><title><![CDATA[Kalman Filter in Trading (2/2)]]></title><description><![CDATA[A Volatility-based Position Sizing]]></description><link>https://www.newsletter.quantreo.com/p/kalman-filter-in-trading-22</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/kalman-filter-in-trading-22</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 27 Feb 2026 15:30:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/27bfdf7f-24fc-44a6-aaa2-04a18ffd80fd_708x369.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the first part of this series, we introduced the Kalman filter from a theoretical perspective and discussed why it is a natural tool for online estimation problems.</p><p>In this second part, we move from theory to practice and show how a Kalman filter can be used in a real trading context. Not to predict returns, but to <strong>control risk dynamically</strong>.</p><p>The goal is simple: estimate volatility online and transform it into a stable, realistic position sizing rule.</p><p>Find all the codes <a href="https://colab.research.google.com/drive/1XcwG_jfYvTaHQovBiFTUgv76ziZKfoy9?usp=sharing">here</a>.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1. What problem are we actually solving?</h2><p>Volatility is not constant. It changes over time, often abruptly, and usually when it matters the most.</p><p>Most traders rely on rolling volatility estimates. These approaches <strong>suffer from two major issues</strong>:</p><ul><li><p>they react too slowly to regime changes,</p></li><li><p>they are extremely noisy at short horizons.</p></li></ul><p>In live trading, what we really need is: an <strong>online</strong> estimate, reasonably <strong>smooth</strong>, but able to <strong>adapt</strong> when market conditions change.</p><p>This is a risk management problem, not a forecasting one.</p><div><hr></div><h2>2. Volatility as a latent variable</h2><p><strong>Volatility is not directly observable</strong>. What we observe are returns, which are highly noisy at the single-period level.</p><p>We therefore model volatility as a latent state variable. More precisely, we work with the <strong>log-variance</strong>:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;x_t&#8203;=log(&#963;_t^2&#8203;)&quot;,&quot;id&quot;:&quot;JDRKSNTVSI&quot;}" data-component-name="LatexBlockToDOM"></div><p>This choice has three advantages:</p><ul><li><p>it enforces positivity,</p></li><li><p>it leads to additive dynamics,</p></li><li><p>it is compatible with a linear Kalman filter.</p></li></ul><div><hr></div><h2>3. From returns to an observable proxy</h2><p>Since volatility cannot be observed directly, we construct a noisy proxy from returns:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;y_t&#8203;=log(r_t^2&#8203;+&#949;)&quot;,&quot;id&quot;:&quot;SZHCKXYRTY&quot;}" data-component-name="LatexBlockToDOM"></div><p>Under a conditional Gaussian assumption, this quantity can be interpreted as a noisy observation of the latent log-variance.</p><p>This is clearly an approximation. However, our objective is not statistical inference, but <strong>stable risk control</strong>, which makes this approach both acceptable and effective in practice.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vfDr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vfDr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic 424w, https://substackcdn.com/image/fetch/$s_!vfDr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic 848w, https://substackcdn.com/image/fetch/$s_!vfDr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic 1272w, https://substackcdn.com/image/fetch/$s_!vfDr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vfDr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic" width="1197" height="377" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:377,&quot;width&quot;:1197,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54759,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/187407774?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vfDr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic 424w, https://substackcdn.com/image/fetch/$s_!vfDr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic 848w, https://substackcdn.com/image/fetch/$s_!vfDr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic 1272w, https://substackcdn.com/image/fetch/$s_!vfDr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5ec107f-2123-4b16-aba7-5c1cca4db5cd_1197x377.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The visual difference already highlights the benefit of filtering.</p><div><hr></div><h2>4. Kalman filtering the log-variance</h2><p>We model the latent state with a simple random walk:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;x_t=x_{t&#8722;1}+&#951;_t&quot;,&quot;id&quot;:&quot;QZMTIQOXMU&quot;}" data-component-name="LatexBlockToDOM"></div><p>and the observation equation:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;y_t&#8203;=x_t&#8203;+&#1013;_t&#8203;&quot;,&quot;id&quot;:&quot;XLNOBNYGAW&quot;}" data-component-name="LatexBlockToDOM"></div><p>Both noise terms are assumed Gaussian.</p><p>The two key parameters of the filter are:</p><ul><li><p><strong>Q</strong>, which controls how fast volatility is allowed to evolve,</p></li><li><p><strong>R</strong>, which reflects how noisy the observation log&#8289;(rt2) is.</p></li></ul><p>In practice, <strong>R is kept relatively large</strong>, because squared returns are extremely noisy at short horizons.</p><div><hr></div><h2>5. From volatility estimation to position sizing</h2><p>At this stage, we have an online estimate of volatility:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;&#963;^t=\\sqrt{e^{\\hat{x}_t}}&quot;,&quot;id&quot;:&quot;ZXAVBOZTTL&quot;}" data-component-name="LatexBlockToDOM"></div><p>The key idea is to use this estimate to scale exposure such that portfolio risk remains approximately constant over time.</p><p>This leads to the target-volatility sizing rule:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;w_t=\\frac{&#963;_{target}}{\\hat{&#963;_t}}&quot;,&quot;id&quot;:&quot;GAQSKEVCIT&quot;}" data-component-name="LatexBlockToDOM"></div><p>This equation captures the core intuition:</p><ul><li><p>when volatility increases, exposure is reduced,</p></li><li><p>when volatility decreases, exposure is increased.</p></li></ul><p>Importantly, w_t&#8203; is <strong>not a signal</strong>. It does not tell us which direction to trade. It only determines <strong>how much risk to take</strong>.</p><div><hr></div><h2>6. Practical constraints for live trading</h2><p>In real trading systems, several safeguards are required.</p><p>First, a volatility floor prevents excessive leverage when estimated volatility becomes too small.</p><p>Second, exposure is capped to remain within acceptable leverage limits.</p><p>Finally, position weights are smoothed to reduce turnover and transaction costs:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;w_t^{smooth&#8203;} =(1&#8722;&#945;)w_{t&#8722;1&#8203;}+&#945;w_t&#8203;&quot;,&quot;id&quot;:&quot;AIPAIVYORD&quot;}" data-component-name="LatexBlockToDOM"></div><p>This smoothing introduces a small delay, but significantly improves stability in practice.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bV8p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bV8p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic 424w, https://substackcdn.com/image/fetch/$s_!bV8p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic 848w, https://substackcdn.com/image/fetch/$s_!bV8p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic 1272w, https://substackcdn.com/image/fetch/$s_!bV8p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bV8p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic" width="1197" height="377" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:377,&quot;width&quot;:1197,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51010,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/187407774?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bV8p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic 424w, https://substackcdn.com/image/fetch/$s_!bV8p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic 848w, https://substackcdn.com/image/fetch/$s_!bV8p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic 1272w, https://substackcdn.com/image/fetch/$s_!bV8p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f53b5bc-55fd-4c7c-8bd6-5bfb362d3016_1197x377.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>7. What this approach does (and does not)</h2><p>This framework works well because it:</p><ul><li><p>stabilizes portfolio risk,</p></li><li><p>adapts to changing volatility regimes,</p></li><li><p>is simple, robust, and computationally efficient,</p></li><li><p>can be combined with any alpha signal.</p></li></ul><p>However, it is important to be clear about its limitations:</p><ul><li><p>it does not predict returns,</p></li><li><p>it does not perform market timing.</p></li></ul><p>It is a <strong>risk controller</strong>, not an alpha generator.</p><div><hr></div><p>Kalman filters are often presented as complex mathematical tools. In practice, their strength lies in their simplicity and flexibility.</p><p>Used correctly, they provide a clean and effective way to control risk in environments where volatility is unstable and noisy.</p><p>In systematic trading, improving risk control is often more impactful than improving return forecasts.</p><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p>]]></content:encoded></item><item><title><![CDATA[Kalman Filter in Trading (1/2)]]></title><description><![CDATA[A simple mental model to blend predictions and noisy observations]]></description><link>https://www.newsletter.quantreo.com/p/kalman-filter-in-trading-12</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/kalman-filter-in-trading-12</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 20 Feb 2026 15:30:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!17Jh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In trading, almost everything you touch is noisy. Prices jump because of microstructure, spreads widen for a few prints, volatility spikes just because your window is short. If you react to every wiggle, you trade randomness. If you smooth too much, you react too late.</p><p></p><p>The Kalman filter is a clean way to sit in the middle. It estimates a &#8220;true signal&#8221; behind noisy observations by doing the same two-step loop every time: predict what should happen, then correct using what you observed. The correction is not arbitrary. It is weighted by uncertainty, which is why Kalman feels both smooth and responsive.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1) The problem, in one minute</h2><p>Markets are messy. <strong>Your indicators are messier</strong>.</p><p>A price series mixes real moves with microstructure <strong>noise</strong>. A rolling volatility mixes real regime shifts with estimation error. </p><p>Same story <strong>for any feature built on finite windows</strong>. Feed that raw signal into a strategy and you get false triggers, unstable sizing, and lots of noise masquerading as information.</p><blockquote><p>What we want is simple. Keep the information, drop the useless wiggles.</p></blockquote><p></p><div><hr></div><h2>2) The key idea. Two realities</h2><p>Kalman starts with a clean separation.</p><ul><li><p>What you observe: <strong>y_t</strong> (noisy)</p></li><li><p>What you want: <strong>x_t</strong> (latent state, hidden signal)</p></li></ul><p>You assume:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;y_t = x_t + v_t&quot;,&quot;id&quot;:&quot;SRBADWNZWB&quot;}" data-component-name="LatexBlockToDOM"></div><p>where <strong>v_t</strong> is measurement noise.</p><p>The &#8220;latent state&#8221; is not a mystical fair value. It is simply the signal you choose to model: a smoother price level, a latent volatility, a stable trend component, a cleaner spread.</p><p><strong>A tiny example (with a simulated &#8220;latent signal&#8221;)</strong></p><p>To make this concrete, we can build a toy signal.</p><ul><li><p>First, we create a latent state x_t&#8203;. Think of it as the clean underlying level we wish we could observe.</p></li><li><p>Then we generate what the market actually shows us:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;y_t=x_t+noise&quot;,&quot;id&quot;:&quot;LNPKAJSFMO&quot;}" data-component-name="LatexBlockToDOM"></div><p>This mimics noisy prints, bid ask bounce, and random micro wiggles.</p></li></ul><p>In a simulation, we can plot both x_t&#8203; and y_t&#8203;. This lets us visually check whether the Kalman estimate&#8203; is actually recovering the hidden signal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!17Jh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!17Jh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic 424w, https://substackcdn.com/image/fetch/$s_!17Jh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic 848w, https://substackcdn.com/image/fetch/$s_!17Jh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic 1272w, https://substackcdn.com/image/fetch/$s_!17Jh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!17Jh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic" width="1104" height="455" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:455,&quot;width&quot;:1104,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51786,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/187381181?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!17Jh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic 424w, https://substackcdn.com/image/fetch/$s_!17Jh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic 848w, https://substackcdn.com/image/fetch/$s_!17Jh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic 1272w, https://substackcdn.com/image/fetch/$s_!17Jh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c8077aa-df95-46bd-b807-cacdce954e21_1104x455.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Important</strong>: In real trading, <strong>we never see x_t&#8203;</strong>. That is the whole point. The filter is valuable precisely because it produces an estimation of x_t&#8203;, a disciplined estimate of what might be behind y_t&#8203;.</p><blockquote><p><strong>We do not trade y. We trade an estimate of what is behind y.</strong></p></blockquote><p></p><div><hr></div><h2>3) Kalman is a two-step loop</h2><p>Kalman is a loop with one question repeated forever:</p><p><strong>What did I expect? What did I see? How much should I adjust?</strong></p><p></p><h4>Predict</h4><p>You start each step with a belief about the hidden signal. Then you move it forward using a simple model.</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\hat x_{t|t-1} = \\hat x_{t-1|t-1}\n&quot;,&quot;id&quot;:&quot;MYEPUDANMD&quot;}" data-component-name="LatexBlockToDOM"></div><p>This is your <strong>prior</strong>. It is what you believe before seeing the new data point.</p><blockquote><p>t&#8739;t&#8722;1 means: estimate at time t using information up to t&#8722;1 (before seeing y_t&#8203;)</p><p>My best guess for the hidden <strong>level today is yesterday&#8217;s filtered estimate</strong>.</p></blockquote><p></p><h4>Update</h4><p>Then you look at the new observation and measure the surprise:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{innovation}_t \\;=\\; y_t - \\hat x_{t|t-1}\n&quot;,&quot;id&quot;:&quot;CWAYVXVZNO&quot;}" data-component-name="LatexBlockToDOM"></div><p>Finally you adjust toward the observation:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\hat x_{t|t} \\;=\\; \\hat x_{t|t-1} + K_t \\cdot \\text{innovation}_t\n&quot;,&quot;id&quot;:&quot;WUWNBRDHKV&quot;}" data-component-name="LatexBlockToDOM"></div><p>The updated estimate is always &#8220;between&#8221; the prediction and the observation. The only thing that decides where you land is the <strong>gain K_t&#8203;</strong>.</p><p><strong>K_t&#8203; is the trust weight you give to the new observation.</strong></p><ul><li><p>K_t&#8203;&#8776;1 means &#8220;I trust the data&#8221;. Fast reaction, little smoothing.</p></li><li><p>K_t&#8776;0 means &#8220;I trust the model&#8221;. Slow reaction, strong smoothing.</p></li></ul><div><hr></div><h2>4) Focus on the Kalman Gain K_t</h2><p>The gain K_t is the adaptive weight that controls the update. It answers one question:</p><p><strong>Do I trust the new observation, or do I trust my current belief?</strong></p><p>In the simplest 1D case, the gain is computed from two sources of uncertainty:</p><ul><li><p><strong>Prediction uncertainty</strong> (how unsure you are before seeing the new point)</p></li><li><p><strong>Measurement noise</strong> (how noisy the observation is)</p></li></ul><p>Here are the two key equations.</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P_{t|t-1} = P_{t-1|t-1} + Q\n&quot;,&quot;id&quot;:&quot;TKWCSIUUCJ&quot;}" data-component-name="LatexBlockToDOM"></div><p>Each step forward adds uncertainty. <strong>Q is how much you allow the hidden signal to &#8220;wander&#8221;</strong> between two observations. Bigger Q means &#8220;the state can move fast&#8221;, so you become more willing to adjust.</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;K_t = \\frac{P_{t|t-1}}{P_{t|t-1} + R}\n&quot;,&quot;id&quot;:&quot;YFYWCWMJNI&quot;}" data-component-name="LatexBlockToDOM"></div><p>The gain compares how uncertain your prediction is versus how noisy the observation is.</p><ul><li><p>Bigger <strong>R means noisier data</strong>. The gain shrinks. You smooth more.</p></li><li><p>Bigger Q makes your prediction less certain (through P). The gain grows. You adapt faster.</p></li></ul><p>So the only real knobs you set in practice are <strong>Q</strong> and <strong>R</strong>:</p><ul><li><p>R controls how much you distrust the data.</p></li><li><p>Q controls how flexible the hidden signal is.</p></li></ul><p></p><p>In the next newsletter, we will walk through a simple trading example and show how to use the Kalman estimate in a real signal.</p><p>Yes, there were a few equations here, but the goal is not to memorize them. <strong>The goal is to internalize the intuition: predict, measure the surprise, and adjust by an uncertainty weighted amount.</strong></p><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p>]]></content:encoded></item><item><title><![CDATA[Quant never predict... They quantify uncertainty!]]></title><description><![CDATA[Why serious quants think in distributions, not forecasts]]></description><link>https://www.newsletter.quantreo.com/p/quant-never-predict-they-quantify</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/quant-never-predict-they-quantify</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 13 Feb 2026 15:30:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hME9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It&#8217;s a sentence everyone has heard. It sounds smart. <strong>It is often misunderstood</strong>.</p><p>Many people take it to mean that quants refuse to say anything about the future. Others use it as a kind of intellectual shield, a way to avoid being wrong. Both readings miss the point.</p><p>The issue is not prediction itself.<br>The issue is <strong>believing that a single prediction can be treated as truth</strong>.</p><p>This distinction matters because markets are not difficult just because they are noisy. They are difficult because they punish certainty far more than they punish error.</p><p>This is what this newsletter is about. Not repeating a slogan, but explaining what experienced quants actually do <strong>when they say they &#8220;quantify uncertainty.&#8221;</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1. The real problem is not prediction, but believing in a prediction</h2><p>Prediction is not the enemy.</p><p>When people say &#8220;the market will go up&#8221; or &#8220;this strategy works&#8221;, they are not just making an estimate. They are implicitly choosing a <strong>single future</strong> and treating it as if it were reliable.</p><p>Even when numbers are involved, the mental model is usually the same. One central scenario. One expected outcome. <strong>Everything else pushed to the background</strong>.</p><p>The human brain is very good at constructing a coherent story. It is much worse at holding multiple incompatible futures at the same time.</p><p>This is where most mistakes start.<br>Not because the forecast is wrong, but because its uncertainty is ignored.</p><p>A trader who knows they can be wrong by a wide margin <strong>will size positions differently</strong>, manage risk differently, and <strong>survive longer</strong>. A trader who believes their prediction will hold tends to discover the tails the hard way.</p><p>For a quant, the question is never &#8220;what will happen?&#8221;.<br>It is &#8220;<strong>how wrong can I be, and what happens to my system when I am</strong>?&#8221;.</p><div><hr></div><h2>2. What experienced quants do instead</h2><p>An experienced quant replaces a point estimate <strong>with a distribution</strong>.</p><p>This is a critical shift. Not cosmetic. Structural.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hME9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hME9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic 424w, https://substackcdn.com/image/fetch/$s_!hME9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic 848w, https://substackcdn.com/image/fetch/$s_!hME9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic 1272w, https://substackcdn.com/image/fetch/$s_!hME9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hME9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic" width="1456" height="316" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:316,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16950,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/187371169?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hME9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic 424w, https://substackcdn.com/image/fetch/$s_!hME9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic 848w, https://substackcdn.com/image/fetch/$s_!hME9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic 1272w, https://substackcdn.com/image/fetch/$s_!hME9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa2ee557-c40b-4ea0-b899-bc7b45987d59_1934x420.heic 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A single metric, a Sharpe ratio, a Calmar ratio, a CAGR, always looks clean in isolation. It gives the illusion of precision. But taken alone, it tells you almost nothing about <strong>how fragile the result is</strong>.</p><p>One number cannot tell you whether performance is repeatable or accidental.<br>It cannot tell you whether the strategy is robust or just lucky once.</p><p>This is why mature quant workflows never stop at a single backtest outcome. They generate <strong>distributions of outcomes</strong>.</p><p>Different subsamples. Different start dates. Different regimes. Different perturbations.</p><p>What matters is no longer the best result, but the <strong>shape of the distribution</strong>.</p><p>Is performance concentrated around a stable core, or carried by a few extreme runs?<br><strong>Are drawdowns consistently manageable, or occasionally catastrophic?</strong><br>Does the strategy degrade gracefully, or collapse when conditions shift?</p><p>A strategy with a lower average metric but a tight, well-behaved distribution is often far superior to one with a spectacular headline number driven by lucky randomness.</p><p>This is what quantifying uncertainty looks like in practice.<br>You stop asking &#8220;how good is this strategy?&#8221; and start asking &#8220;<strong>how often does this strategy behave acceptably?</strong>&#8221;</p><blockquote><p>Once you see the distribution, you cannot unsee it.<br>And from that point on, single-number metrics feel dangerously incomplete.</p></blockquote><p></p><div><hr></div><h2>3. Why this matters in real trading and machine learning</h2><p>In trading, an edge is not a guarantee.<br>It is a small statistical bias that only exists under specific conditions.</p><p>A machine learning model does not &#8220;predict&#8221; the market. It outputs a conditional estimate based on past data. <strong>Treating that output as a forecast is where most mistakes begin</strong>.</p><p>What really matters is not average accuracy. It is how the model behaves when it is wrong.</p><p>Take a simple example.<br>Two strategies show the same Sharpe ratio on a backtest. One <strong>delivers steady, repeatable performance across many subsamples</strong>. The other makes most of its profits in a handful of runs and collapses in the rest.</p><p>On paper, they look identical. In reality, one is robust. The other likely driven by luck or highly risky.</p><p>This is why experienced quants care more about <strong>distributions than point metrics</strong>. They want to know how often a strategy behaves acceptably, not how good it looks in the best case.</p><blockquote><p>&#8220;<strong>A model is not a crystal ball. It is a noisy sensor in an unstable environment.<br>The goal is not to remove uncertainty. The goal is to build systems that can live with it.</strong>&#8221;</p></blockquote><div><hr></div><p></p><p>Quantifying uncertainty is not about being cautious. It is about being realistic.</p><p>Markets are not difficult because they are unpredictable. They are difficult because <strong>they punish systems that are built around fragile assumptions and single-scenario thinking</strong>.</p><p>Experienced quants do not avoid prediction out of intellectual modesty. They move past it because they understand that <strong>robustness matters more than being right</strong>, and that survival comes before precision.</p><p>Once you start thinking in distributions, <strong>your entire process changes</strong>. How you backtest. How you size risk. How you interpret models. How you react when things break, which they inevitably do.</p><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p><p></p>]]></content:encoded></item><item><title><![CDATA[False negatives are better than false positives...]]></title><description><![CDATA[Why false negatives are often preferable to false positives in trading]]></description><link>https://www.newsletter.quantreo.com/p/false-negatives-are-better-than-false</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/false-negatives-are-better-than-false</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 06 Feb 2026 15:30:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!J4oZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In trading, <strong>not all mistakes are equal</strong>. Machine learning metrics often treat false positives and false negatives as symmetric errors. <strong>Markets do not</strong>&#8230;</p><p>A false positive creates a trade where no real opportunity exists. A false negative simply means staying out.</p><p>This asymmetry changes how models should be evaluated and how signals should be used in practice.</p><p>Understanding this difference is essential when dealing with noisy markets and rare trading opportunities.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1. False positives and false negatives are different by nature</h2><p>In any decision system, two types of errors can occur.</p><p>A <strong>false positive</strong> happens when a system signals that something is happening, while in reality nothing is happening.<br>A <strong>false negative</strong> happens when something is happening, but the system fails to detect it.</p><p>These two errors are not interchangeable.</p><p>Their impact depends entirely on the context and on what happens <strong>after</strong> the decision is made.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J4oZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J4oZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic 424w, https://substackcdn.com/image/fetch/$s_!J4oZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic 848w, https://substackcdn.com/image/fetch/$s_!J4oZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic 1272w, https://substackcdn.com/image/fetch/$s_!J4oZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J4oZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic" width="747" height="441" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:441,&quot;width&quot;:747,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28358,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/184773562?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J4oZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic 424w, https://substackcdn.com/image/fetch/$s_!J4oZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic 848w, https://substackcdn.com/image/fetch/$s_!J4oZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic 1272w, https://substackcdn.com/image/fetch/$s_!J4oZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681bb9f8-b140-4186-b6a3-a525c04c4f28_747x441.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In some domains, <strong>false positives</strong> are preferred:</p><ul><li><p>In natural disaster monitoring, issuing a <strong>tsunami alert</strong> that turns out to be unnecessary is often acceptable compared to missing a real one.</p></li><li><p>In medical screening, <strong>early detection systems</strong> may tolerate false alarms to avoid missing critical conditions.</p></li></ul><p>In other domains, <strong>false negatives</strong> are preferred:</p><ul><li><p>In <strong>credit risk decisions</strong>, rejecting a good borrower is often less costly than approving a bad one.</p></li><li><p>In legal and <strong>compliance systems</strong>, a false accusation can cause irreversible damage, while a missed case can often be reviewed later.</p></li></ul><p>The key point is simple.<br><strong>The cost of an error is not symmetric</strong>, and the preferred type of error depends on the consequences of acting or not acting.</p><p>Understanding this distinction is essential before choosing metrics, thresholds, or optimization objectives.</p><div><hr></div><h2>2. In Trading, acting has a cost</h2><p>The critical difference between false positives and false negatives in trading appears <strong>after</strong> the signal is generated. A signal is not just a prediction. It is a <strong>decision to allocate capital</strong>.</p><p>When a false positive occurs, the system acts: a <strong>position is opened</strong>, <strong>costs are paid</strong>, <strong>capital is exposed</strong> to randomness, <strong>risk accumulates</strong> over time. Each false positive adds friction and noise to the strategy. These effects compound.</p><p>By contrast, when a false negative occurs, nothing happens: no position is taken, no cost is paid, no drawdown is created. <strong>The opportunity is missed</strong>, but the system remains stable.</p><p>This is why trading systems are fundamentally different from pure prediction systems.<br>The cost is not attached to being wrong. The cost is attached to <strong>acting when you should not</strong>.</p><p>This is also why being more selective often leads to more robust strategies, <em><strong>even if fewer opportunities are captured</strong></em>.</p><blockquote><p>In trading, stability comes from controlling actions, not from predicting more events.</p></blockquote><div><hr></div><h2>3. Why evaluation metrics push trading systems in the wrong direction</h2><p>The problem is not only how trading systems behave, but also <strong>how they are evaluated</strong>.</p><blockquote><p>Most machine learning metrics are designed for prediction tasks, not for decision systems with asymmetric costs.</p></blockquote><p>Accuracy is the most common example. <strong>When events are rare</strong>, accuracy is largely driven by true negatives. A model can appear excellent simply by predicting &#8220;no signal&#8221; most of the time.</p><p><strong>This gives a false sense of reliability.</strong></p><p><strong>Recall</strong> can be more informative, as it measures how many real opportunities are detected. </p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;Recall = \\frac{True Positives}{True Positives + False Negatives}&quot;,&quot;id&quot;:&quot;EYASCYVNXW&quot;}" data-component-name="LatexBlockToDOM"></div><p>However, <strong>recall ignores what happens when the model is wrong in the other direction</strong>.</p><p>By construction, increasing recall often increases false positives. In trading, <strong>this trade-off is rarely neutral</strong>. Optimizing a metric in isolation pushes the system toward <strong>more actions</strong>, not necessarily toward better decisions.</p><p>This is why trading systems must be evaluated with metrics that reflect <strong>when capital is exposed</strong>, not just how often predictions are correct.</p><p></p><blockquote><p><strong>In trading, the objective is not to maximize precision or recall.<br>It is to trade only when acting is justified, and to act often enough for the strategy to matter.</strong></p></blockquote><p></p><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p>]]></content:encoded></item><item><title><![CDATA[Bayes in Trading (3/3)]]></title><description><![CDATA[Bayes in practice. What actually matters for rare-event signals]]></description><link>https://www.newsletter.quantreo.com/p/bayes-in-trading-33</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/bayes-in-trading-33</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 30 Jan 2026 15:30:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/13a2f50f-fa76-4742-bba3-680fccaa83a2_990x490.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the <a href="https://open.substack.com/pub/quantreo/p/bayes-in-trading-23?r=1o765i&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">previous newsletters</a>, we applied the <strong>exact Bayes computation</strong> for a rare-event trading signal.</p><p>Now, instead of adding more math, we will vary the key parameters one by one and observe what really moves the probability that a signal is correct.</p><p>The goal is simple: <strong>identify which levers matter in practice, and which ones are often overestimated.</strong></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>For reference, the model parameters are fixed to the same values as in <em><strong><a href="https://open.substack.com/pub/quantreo/p/bayes-in-trading-23?r=1o765i&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">Bayes in Trading (2/3)</a></strong></em>:</p><ul><li><p>The event occurs <strong>2%</strong> of the time. P(E)=2%.</p></li><li><p>When the event is present, the model detects it <strong>90%</strong> of the time. P(S&#8739;E)=90%.</p></li><li><p>When the event is not present, the model still triggers a signal <strong>12%</strong> of the time. P(S&#8739;E bar)=12%.</p></li></ul><p>In the following sections, each parameter will be varied <strong>one at a time</strong> to isolate its effect.</p><div><hr></div><h2>1. False positives dominate everything</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jqfK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jqfK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic 424w, https://substackcdn.com/image/fetch/$s_!jqfK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic 848w, https://substackcdn.com/image/fetch/$s_!jqfK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic 1272w, https://substackcdn.com/image/fetch/$s_!jqfK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jqfK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic" width="1456" height="479" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:479,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19133,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/184677057?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jqfK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic 424w, https://substackcdn.com/image/fetch/$s_!jqfK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic 848w, https://substackcdn.com/image/fetch/$s_!jqfK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic 1272w, https://substackcdn.com/image/fetch/$s_!jqfK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84db1dff-998d-4bd9-97d5-4f524efd03cf_1490x490.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This first plot <strong>isolates the impact of the false positive rate</strong>, while keeping all other parameters fixed. The effect is immediate and severe. Even small increases in P(S&#8739;E bar) lead to a sharp collapse in the probability that a signal is actually correct.</p><p>When the event is rare, <strong>most observations belong to the &#8220;no-event&#8221; regime</strong>.<br>As a result, false positives quickly outnumber true signals, even if the model performs well when the event is present.</p><p>This is why many strategies fail not because they miss opportunities, but because they <strong>trigger too often when nothing is happening</strong>.</p><blockquote><p>Reducing false positives is usually far more important than improving accuracy.</p></blockquote><div><hr></div><h2>2. Event rarity is a structural constraint</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SAD_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SAD_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic 424w, https://substackcdn.com/image/fetch/$s_!SAD_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic 848w, https://substackcdn.com/image/fetch/$s_!SAD_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic 1272w, https://substackcdn.com/image/fetch/$s_!SAD_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SAD_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic" width="1456" height="479" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:479,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/184677057?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SAD_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic 424w, https://substackcdn.com/image/fetch/$s_!SAD_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic 848w, https://substackcdn.com/image/fetch/$s_!SAD_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic 1272w, https://substackcdn.com/image/fetch/$s_!SAD_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F804e8386-5e5d-4c67-bdb1-4ef8b271837d_1490x490.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In this second experiment, we keep the model behavior fixed and vary only the frequency of the event itself. The detection accuracy remains at <strong>90%</strong>, and the false positive rate at <strong>12%</strong>, exactly as before. Only the base rate P(E) changed.</p><p>The result is unambiguous.</p><p>When the event is extremely rare, even a well-behaved model produces signals that are mostly noise. As the event becomes more frequent, the same model suddenly appears far more reliable.</p><p>Nothing about the model changed. <strong>Only the market context did</strong>.</p><p>This highlights an <strong>important limitation of rare-event strategies</strong>.<br>Below a certain frequency, signal quality is structurally capped, regardless of how good the classifier is.</p><blockquote><p>Sometimes the main problem is not the model, but the rarity of the event being traded.</p></blockquote><div><hr></div><h2>3. Accuracy helps, but far less than expected</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q95W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q95W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic 424w, https://substackcdn.com/image/fetch/$s_!Q95W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic 848w, https://substackcdn.com/image/fetch/$s_!Q95W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic 1272w, https://substackcdn.com/image/fetch/$s_!Q95W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q95W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic" width="1456" height="479" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:479,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22158,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/184677057?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q95W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic 424w, https://substackcdn.com/image/fetch/$s_!Q95W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic 848w, https://substackcdn.com/image/fetch/$s_!Q95W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic 1272w, https://substackcdn.com/image/fetch/$s_!Q95W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27ff9cec-8f9a-44bd-88b0-07df75922de2_1489x490.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In this final experiment, we vary only the detection accuracy of the model.</p><p>The event frequency is fixed at <strong>2%</strong>, and the false positive rate remains at <strong>12%</strong>, exactly as in the previous sections. Only P(S&#8739;E) is allowed to change.</p><p>The improvement is real, but modest. <strong>Even large increases in detection accuracy</strong> translate into relatively <strong>small gains</strong> in the probability that a signal is actually correct.<br><em><strong>This is a direct consequence of event rarity and persistent noise.</strong></em></p><p>This explains why strategies that aggressively optimize accuracy often fail to deliver meaningful improvements in live trading.</p><blockquote><p>Accuracy is rarely the dominant lever in rare-event strategies.</p></blockquote><p></p><h2>Conclusion. What to remember</h2><ul><li><p>For rare events, <strong>accuracy is not the right metric</strong>.</p></li><li><p>Signal quality is driven first by <strong>false positives</strong>, then by <strong>event frequency</strong>.</p></li><li><p>Detection accuracy helps, but <strong>far less than most people expect</strong>.</p></li><li><p>A strong model can still produce mostly noise if the base rate is low.</p></li><li><p>Bayes is not optional. It defines the ceiling of what a signal can achieve.</p></li></ul><p></p><p>Before trusting any trading signal, always ask:</p><ul><li><p>How rare is the event?</p></li><li><p>How often does the model fire when nothing happens?</p></li><li><p>What is the resulting probability that a signal is actually correct?</p></li></ul><p>If these questions are not answered explicitly, the signal is likely misleading.</p><p></p><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p>]]></content:encoded></item><item><title><![CDATA[Bayes in Trading (2/3)]]></title><description><![CDATA[This newsletter is a direct continuation of the previous one.]]></description><link>https://www.newsletter.quantreo.com/p/bayes-in-trading-23</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/bayes-in-trading-23</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 23 Jan 2026 15:31:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/49796362-b81e-41b7-b058-793e22bb2acd_927x498.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This newsletter is a direct continuation of the <strong><a href="https://open.substack.com/pub/quantreo/p/bayes-in-trading-13?r=1o765i&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">previous one</a></strong>.</p><p>Last week, we discussed a very common problem in trading and machine learning: <strong>predicting a rare event</strong>.</p><p>We saw that even models with high reported accuracy can be misleading when the event itself occurs infrequently.</p><p>Now, we will go through the computation explicitly and show how Bayes quantifies this effect.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1. Restating the problem and identifying the quantities</h2><p>We consider a binary classification problem applied to trading. A model attempts to detect a specific market pattern that occurs rarely.</p><p>We define two events:</p><ul><li><p><strong>E</strong>: the pattern is truly present in the market</p></li><li><p><strong>S</strong>: the model triggers a signal</p></li></ul><p></p><p>The available information is the following:</p><ul><li><p>When the pattern truly occurs, the model detects it with a 90% reliability.</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P(S\\mid E) = 0.90&quot;,&quot;id&quot;:&quot;AKQKGDZCRQ&quot;}" data-component-name="LatexBlockToDOM"></div><p></p></li><li><p>The pattern occurs 2% of the time.</p></li></ul><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P(E) = 0.02&quot;,&quot;id&quot;:&quot;VNOVYUNIXI&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><ul><li><p>The model still produces signals even when the pattern is not present with a probability of 12%.</p></li></ul><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P(S \\mid \\bar E) = 0.12&quot;,&quot;id&quot;:&quot;ACXNVAKDVK&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>Our goal is not to evaluate the model conditionally,<br>but to answer the trading-relevant question:</p><blockquote><p><strong>When the model triggers a signal, what is the probability that the pattern is actually real?</strong></p></blockquote><p>This corresponds to computing a posterior probability. In other words, with a prior probability (2% that it can occur), how knowing that the model predict a signal will impact the posterior probability.</p><div><hr></div><h2>2. What information is required and why</h2><p>At this point, it is important to pause and clarify something.</p><p>With only:</p><ul><li><p>the base rate of the event,</p></li><li><p>and the model&#8217;s detection rate when the event occurs,</p></li></ul><p>the problem is <strong>not solvable</strong>.</p><p>To compute the probability that a signal is actually correct, we need <strong>three distinct pieces of information</strong>:</p><ul><li><p>How often the event occurs in general.</p></li><li><p>How often the model detects the event when it is truly present.</p></li><li><p>How often the model produces a signal when the event is not present.</p></li></ul><p>The last quantity is usually overlooked.<br>Yet it is the one that dominates the result when events are rare.</p><p>This is why reported accuracy alone is insufficient in trading applications.</p><p></p><div><hr></div><h2>3. Bayes formula</h2><p>Bayes&#8217; theorem provides a direct relationship between these quantities.</p><p>It allows us to invert the question from &#8220;<strong>how good is the model when the event happens?</strong>&#8221; to &#8220;<strong>how likely is the event when the model fires?</strong>&#8221;</p><p>Formally, Bayes&#8217; rule gives:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P(E \\mid S)\n= \\frac{P(S \\mid E)\\,P(E)}\n{P(S \\mid E)\\,P(E) + P(S \\mid \\bar E)\\,P(\\bar E)}\n\n&quot;,&quot;id&quot;:&quot;NEQBBOXFKA&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><div><hr></div><h2>4. Applying the formula</h2><p>We now substitute the values from the problem:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;P(E \\mid S)\n= \\frac{0.9 \\times 0.02}\n{0.9 \\times 0.02 + 0.12 \\times 0.98} = \\frac{0.018}{0.1356}\n\\approx 13.27\\%&quot;,&quot;id&quot;:&quot;FCCMDQXTDK&quot;}" data-component-name="LatexBlockToDOM"></div><p>The result is simple to interpret. Even with a <strong>high detection rate</strong> <strong>when the pattern is real</strong>, and a <strong>seemingly reasonable</strong> false positive rate, only about <strong>1 signal out of 7</strong> corresponds to a true pattern.</p><p>This outcome is not caused by a bad model. It is caused by the combination of:</p><ul><li><p>a <em><strong>low base rate</strong></em>,</p></li><li><p>and <em><strong>non-negligible false positives</strong></em>.</p></li></ul><p></p><p><strong>In the next newsletter</strong>, we will stop computing and start reasoning. We will vary the base rate, the false positive rate, and the detection rate, to understand <strong>which quantities truly matter</strong>, and which ones are often overemphasized.</p><p><em><strong>This is where Bayes becomes a practical trading reflex rather than a formula.</strong></em></p><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p>]]></content:encoded></item><item><title><![CDATA[Bayes in Trading (1/3)]]></title><description><![CDATA[Rare events may not be your friend in trading...]]></description><link>https://www.newsletter.quantreo.com/p/bayes-in-trading-13</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/bayes-in-trading-13</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 16 Jan 2026 15:30:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b2abd5d1-5339-4332-b7b6-c5ce54784238_764x406.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You often see trading or ML models online claiming <strong>90% accuracy</strong>. On common events, that can be meaningful. On <strong>rare events</strong>, it is often useless.</p><p>Many models try to predict chart patterns, breakouts, or specific market regimes that occur only a small fraction of the time. Even with very high conditional accuracy, these models can still lose money. Why?</p><p>Because accuracy is not the right question to ask. And <strong>Bayes explains exactly why</strong>.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1. A quick reminder on conditional probability</h2><p>A conditional probability answers a simple question:</p><blockquote><p><em>Given that A happened, how likely is B?</em></p></blockquote><p>In trading and machine learning, this often appears as:</p><blockquote><p><strong>P(Signal | Event)</strong><br>When the event truly occurs, how often does the model detect it?</p></blockquote><p>This is what most people mean when they talk about model accuracy.</p><p>The problem is that this is <strong>not</strong> the probability traders actually care about.</p><p>What matters in practice is the inverse question:</p><blockquote><p><strong>P(Event | Signal)</strong><br>When the model triggers a signal, how likely is it that the event is real?</p></blockquote><p>These two probabilities are not the same.<br>And when events are rare, the difference can be massive.</p><p>This inversion of perspective is exactly what Bayes forces you to confront.</p><p></p><div><hr></div><h2>2. Rare events break intuition</h2><p>Most trading signals are built to detect <strong>unusual situations</strong>.</p><p>Breakouts, chart patterns, volatility expansions, regime shifts. By definition, they do not happen often. This already changes how probabilities should be interpreted.</p><p>When an event is rare, the main risk is not missing it. The main risk is <strong>seeing it everywhere</strong>. A model can be very good at detecting the event <em>when it happens</em>,<br>and still generate mostly useless signals in practice.</p><p>This is not a modeling issue.<br>It is a <strong>base rate issue</strong>.</p><p></p><div><hr></div><h2>3. The wrong performance metric</h2><p>Most models are evaluated using metrics that answer the wrong question.</p><p>They focus on:</p><ul><li><p>Accuracy</p></li><li><p>Recall</p></li><li><p>Detection rate <em>when the event is present</em></p></li></ul><p>All of these describe <strong>P(Signal | Event)</strong>.</p><p></p><p>But trading performance depends on:</p><ul><li><p>How often you trade</p></li><li><p>How often those trades correspond to real opportunities</p></li><li><p>How much noise you are exposed to</p></li></ul><p>In other words, trading cares about <strong>P(Event | Signal)</strong>.</p><p>Bayes is simply the formal way of forcing this inversion.</p><p></p><div><hr></div><h2>4. Why this matters in practice</h2><p>When <strong>base rates are low</strong>, false positives dominate.</p><p>That leads to:</p><ul><li><p>Overtrading</p></li><li><p>Higher transaction costs</p></li><li><p>Unstable equity curves</p></li></ul><p>The model is not necessarily wrong. <strong>The interpretation is</strong>.</p><p></p><div><hr></div><h2>A concrete example</h2><p>Assume the following:</p><ul><li><p>A trading model detects a specific market pattern.</p></li><li><p>When the pattern truly occurs, the model is correct <strong>90% of the time</strong>.</p></li><li><p>The pattern itself occurs in only <strong>2% of market observations</strong>.</p></li><li><p>When the pattern is <strong>not</strong> present, the model still triggers a signal <strong>12% of the time</strong>.</p></li></ul><p></p><p><strong>Question</strong>: When the model triggers a signal, what is the probability that the pattern is actually real?</p><p>Answer: <strong>13,27%.</strong></p><p>&#8212;&gt; </p><p>With such a low signal reliability, an extremely high risk-reward ratio would be required just to break even.</p><p></p><p><em><strong>In the next newsletter, we will go through the exact calculations and show how these numbers combine, using Bayes, step by step.</strong></em></p><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Strategies Generate Returns. Portfolios Control Risk.]]></title><description><![CDATA[Why the real edge is not a single strategy]]></description><link>https://www.newsletter.quantreo.com/p/strategies-generate-returns-portfolios</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/strategies-generate-returns-portfolios</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 09 Jan 2026 15:30:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hLiT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Many traders spend years searching for the perfect strategy. One that delivers high returns, low drawdowns, and works in all market conditions. <strong>This strategy does not exist</strong>. Every trading strategy, even a good one, comes with risk. Periods of underperformance, drawdowns, and sensitivity to specific regimes are unavoidable.</p><p>A strategy&#8217;s role is simple. <strong>It generates returns</strong>. Risk management at the strategy level can limit damage, but it cannot eliminate uncertainty. If you try to reduce risk too aggressively within a single strategy, you usually end up reducing returns just as much.</p><p>Real risk reduction happens elsewhere. <strong>It happens at the portfolio level</strong>, by combining multiple strategies with different behaviors and low correlation. This is where risk is averaged out far more efficiently than returns.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>1. What Strategies Actually Do</h3><p>A trading strategy has a single purpose. <strong>It exploits a specific market behavior to generate returns</strong>. Nothing more. Nothing less. Even the <strong>most robust strategy is built around one idea</strong>, one source of edge, and one set of assumptions about how the market behaves.</p><p>Because of this, every strategy is exposed to risk by design. <strong>It performs well in certain conditions and struggles in others</strong>. Drawdowns are not a sign of failure. They are the cost of participation. Trying to eliminate them at the strategy level usually weakens the edge instead of making it safer.</p><p>A strategy can control how losses occur, but it cannot remove uncertainty. <strong>Risk is not something you can fully solve within a single strategy</strong>. It is something you have to manage at a higher level.</p><p></p><div><hr></div><h3>2. Why Risk Cannot Be Solved at the Strategy Level</h3><p>When risk becomes uncomfortable, the natural reaction is to fix it inside the strategy. Tighter stops. More filters. Fewer trades. Lower exposure. <strong>These adjustments often make the backtest look cleaner, but they come at a cost</strong>. The expected return usually drops at the same time.</p><p>This happens because risk and return are linked at the strategy level. <strong>The edge exists precisely because the strategy accepts a certain type of uncertainty</strong>. Trying to remove that uncertainty internally often means removing the conditions that make the strategy profitable in the first place.</p><p>You can reshape the risk profile of a strategy, but you cannot neutralize it without damaging the edge. The risk does not disappear. It simply reappears elsewhere, through missed opportunities, lower returns, or increased sensitivity to specific regimes. This is why risk cannot be fully solved by optimizing a single strategy in isolation.</p><p></p><div><hr></div><h3>3. Diversification Across Strategies Is the Real Risk Lever</h3><p>The most effective way to reduce risk is not to keep refining a single strategy. <strong>It is to combine several strategies that behave differently</strong>. What matters is not that each strategy is perfect, but that their returns are not highly correlated.</p><p>Each strategy reacts to different market conditions. One may perform well in trending markets, another in range bound environments, another during volatility expansions. When <strong>these strategies are combined</strong>, their drawdowns do not occur at the same time. Losses in one are often offset by gains or stability in others.</p><p>This is where portfolios become powerful. <strong>By mixing non correlated strategy returns</strong>, you average out unfavorable periods without averaging out the edge itself. </p><blockquote><p><strong>You must take a look to their behavior especially during crashes or specific events (that will make your portfolio even stronger).</strong></p></blockquote><p>The individual strategies still generate returns, but the <strong>portfolio smooths the path</strong>. Risk is reduced not by suppressing volatility inside a strategy, but by letting different sources of performance balance each other over time.</p><p>This is also why <strong>diversification across strategies</strong> is fundamentally different from diversification across assets. What matters is the behavior of returns, not the instrument being traded.</p><p></p><div><hr></div><h3>4. Why Portfolios Reduce Risk More Than They Reduce Returns</h3><p>When you combine multiple non correlated strategies, something important happens. The portfolio <strong>return becomes smoother, but the average performance does not collapse</strong>. This is because diversification primarily acts on variance, not on the underlying edges.</p><p>Each strategy still contributes its own expected return. <strong>What the portfolio reduces is the impact of extreme outcomes</strong>. Large drawdowns from one strategy are diluted by the others. Volatility decreases faster than returns because bad periods are less synchronized.</p><p>This is why portfolios are so powerful. You do not need exceptional strategies. You need several decent ones that behave differently. Even simple allocations, such as assigning X percent to each strategy, are often enough to capture most of the diversification benefit (but of course, we can do much better using more complex methods).</p><p>At the portfolio level, <strong>risk is not eliminated, but it is transformed</strong>. It becomes more predictable, more stable, and easier to manage than the risk of any single strategy taken in isolation.</p><p></p><div><hr></div><h3>5. Simple Allocation Improves the Return to Risk Tradeoff</h3><p>The chart makes the point very clearly. Individually, most strategies generate acceptable returns, but they come with deep and uneven drawdowns. Several strategies reach drawdowns well beyond minus 15 to minus 20 percent, sometimes while their final return remains modest. The return to drawdown ratio at the strategy level is therefore poor and highly unstable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hLiT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hLiT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic 424w, https://substackcdn.com/image/fetch/$s_!hLiT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic 848w, https://substackcdn.com/image/fetch/$s_!hLiT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic 1272w, https://substackcdn.com/image/fetch/$s_!hLiT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hLiT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic" width="1338" height="644" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:644,&quot;width&quot;:1338,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98052,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/182069459?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hLiT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic 424w, https://substackcdn.com/image/fetch/$s_!hLiT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic 848w, https://substackcdn.com/image/fetch/$s_!hLiT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic 1272w, https://substackcdn.com/image/fetch/$s_!hLiT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe33d1d87-6cee-4e72-9f42-0ef5239b5084_1338x644.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Now look at the portfolio built with a simple equal weight allocation, around 5 percent per strategy. The portfolio return becomes smoother, but more importantly, the drawdown profile changes completely. While individual strategies suffer large and frequent drawdowns, the portfolio drawdown remains shallow and short lived. <strong>The worst portfolio drawdown is small compared to the individual ones</strong>, even though the portfolio still compounds steadily.</p><p>This is the key result. <strong>The portfolio does not outperform the best individual strategy in absolute return</strong>, but it massively improves the <strong>return to drawdown</strong> ratio. Risk is reduced far more than returns. This is exactly what diversification across non correlated strategies is supposed to achieve.</p><p>No clever tuning is required to observe this effect. The allocation is simple, almost naive. <strong>Yet the improvement in stability and risk efficiency is obvious</strong>. This is why portfolio construction matters more than fine tuning individual strategies. The edge comes from how strategies interact, not from squeezing one strategy to perfection.</p><div><hr></div><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>There is no perfect trading strategy. <strong>Strategies generate returns, but portfolios control risk</strong>. The most reliable way to improve performance is not to search for a single exceptional strategy, but to combine several decent ones with low correlation.</p><p>Simple diversification dramatically improves the return to drawdown tradeoff. Risk falls much faster than returns. This is where robustness comes from.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[How to Prepare for a Quant Research Role]]></title><description><![CDATA[What actually matters when you are aiming for research, not pure development]]></description><link>https://www.newsletter.quantreo.com/p/how-to-prepare-for-a-quant-research</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/how-to-prepare-for-a-quant-research</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 02 Jan 2026 15:30:30 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/55bed2c6-527a-476d-930d-08eadd937910_800x533.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Preparing for a quant research role is often confusing because the expectations are rarely stated clearly. <strong>Many candidates try to cover everything</strong>. Advanced models, complex codebases, exotic strategies. In reality, quant research is not about being an expert developer. <strong>It is about reasoning, modeling, and explaining uncertainty with rigor</strong>.</p><p>The skills required overlap with quant development, but the priorities are different. What matters most is your <strong>ability to think statistically</strong>, structure a research question, build something original, and explain it clearly. This newsletter focuses on the few elements (non exhaustive) that actually make a difference when preparing for a quant research position.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>1. Revisit the Fundamentals. Stats, Algebra, Calculus, Logic</h3><p>Quant research interviews almost always start with the basics. Not because firms want to trick you, but because <strong>these fundamentals reveal how you think</strong>. Probability, statistics, linear algebra, and calculus are the language of the role. You do not need to master every advanced topic, but you must be comfortable with the core concepts <strong>and especially the intuition behind that</strong>.</p><p>Typical questions revolve around conditional probabilities, common distributions, expectations, variance, and basic matrix operations. Logical reasoning questions are also frequent. They test <strong>how you structure a problem</strong> and how you react under uncertainty, not how fast you recall a formula.</p><p>About the logic/probability questions, you should take a look to <a href="https://www.quantguide.io">https://www.quantguide.io</a></p><p></p><div><hr></div><h3>2. Personal Projects Matter More Than Fancy Strategies</h3><p>Good projects often revolve around a <strong>specific behavior you are trying to isolate</strong>, not around a ready made strategy. This can take many forms. For example, you might design:</p><ul><li><p> <strong>An alternative optimization method</strong> that focuses on stability across regimes instead of maximizing a single metric.You could explore how combining simple strategies changes their joint behavior rather than their standalone performance.</p></li><li><p>Another strong angle is f<strong>eature engineering aimed at highlighting a particular market behavior</strong>, such as volatility compression, intraday flow effects, or cross asset interactions.</p></li></ul><p>Projects like these tend to trigger interviews because they stand out. But they also come with a requirement. <strong>You must master them completely</strong>. Interviewers will often dig into your assumptions, your methodology, and your results. </p><p>If you cannot explain why you made certain choices or how the conclusions were reached, the project quickly becomes a liability instead of an asset.</p><p><strong>A strong project is not just interesting. It is something you can defend in detail.</strong></p><p></p><div><hr></div><h3>3. Do Your Own Research and Learn to Explain It</h3><p>Doing personal research is <strong>only valuable if you can explain it clearly</strong>. In a quant research interview, you will usually face two very different audiences. A senior quant will focus on your reasoning, your assumptions, and the technical consistency of your work. A hiring manager or HR interviewer may be less technical, <strong>but they will still want to understand what you did and why it matters</strong>.</p><p>You must be able to adapt your explanation <strong>without changing the substance</strong>. With a technical interviewer, you should be comfortable discussing data choices, statistical tests, modeling assumptions, and limitations. With a non technical interviewer, you should be able to explain the same project in simpler terms, focusing on the intuition, the objective, and the conclusions.</p><p>This ability to <strong>translate your work across audiences is not secondary</strong>. It signals that you truly understand what you built. If you cannot explain your research clearly, it usually means the ideas are not fully structured in your own mind.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>These points focus on what truly matters from a quant research perspective. They do not replace the standard HR advice that is also essential when applying for a role. CV structure, interview behavior, communication, and general professionalism still matter and are well covered elsewhere.</p><p>If you are looking for solid and practical guidance on these aspects, the <a href="https://www.youtube.com/@CareerVidz">CareerVidz</a> YouTube channel explains them very clearly and complements the research focused preparation described here.</p><p>Think of this as a split. HR fundamentals help you get through the door. Research skills determine whether you belong inside.</p>]]></content:encoded></item><item><title><![CDATA[Why You Must Test Your Strategy’s Sensitivity to Parameters]]></title><description><![CDATA[Because markets do not respect perfect calibration]]></description><link>https://www.newsletter.quantreo.com/p/why-you-must-test-your-strategys</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/why-you-must-test-your-strategys</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 26 Dec 2025 15:30:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zeQT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A strategy that only works with <strong>one exact parameter setting is fragile by design</strong>. Change the lookback window slightly. Adjust the threshold. Move the stop level. If performance collapses, the strategy was never robust. It was tuned to the past, not built for the future.</p><p>Markets are noisy, unstable, and uncertain. <strong>Any edge that requires perfect precision to survive is unlikely to persist</strong>. Robust strategies do not depend on one optimal point. They operate across a reasonable range of parameters, where small errors do not destroy the signal.</p><p>This is why parameter sensitivity testing is not optional. It is one of the clearest ways to distinguish a real edge from a statistical illusion.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>1. The Illusion of the Perfect Parameter</h3><p>Optimization often creates a <strong>false sense of confidence</strong>. You scan a range of parameters, find a clear maximum, and assume you have discovered the optimal configuration. In reality, you <em><strong>may have only found the point that best fits past noise</strong></em>.</p><p>Lookback windows, thresholds, filters, stop levels. All of them are sensitive by nature. If the strategy&#8217;s performance depends on one exact value, it means the signal is tightly coupled to historical conditions that will not repeat in the same way.</p><blockquote><p>A <strong>single</strong> Sharpe optimum is not a sign of strength. It is a warning. Robust edges do not require precision. They tolerate small mistakes because the underlying structure remains valid beyond one specific setting.</p></blockquote><div><hr></div><h3>2. What Robustness Really Means</h3><p>Robustness does not mean finding the best parameter. <strong>It means finding a region where the strategy behaves consistently</strong>. Performance does not need to be maximal. It needs to be stable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DcJn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DcJn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic 424w, https://substackcdn.com/image/fetch/$s_!DcJn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic 848w, https://substackcdn.com/image/fetch/$s_!DcJn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic 1272w, https://substackcdn.com/image/fetch/$s_!DcJn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DcJn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic" width="728" height="559.7768924302788" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:579,&quot;width&quot;:753,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:51487,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/182067388?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DcJn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic 424w, https://substackcdn.com/image/fetch/$s_!DcJn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic 848w, https://substackcdn.com/image/fetch/$s_!DcJn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic 1272w, https://substackcdn.com/image/fetch/$s_!DcJn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3355a60a-47cb-4e88-ab75-820a82f47b01_753x579.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>A robust strategy <strong>works across a reasonable range of parameters</strong>. You can shift the lookback window, adjust the threshold, or slightly change the stop level, and the behavior remains coherent. Returns may vary, but the edge does not disappear.</p><p>This is the key distinction. <strong>Fragile strategies rely on precision</strong>. Robust strategies tolerate uncertainty. They accept that parameters are estimates, not constants. When performance survives small errors in assumptions, it has a chance to survive the future as well.</p><div><hr></div><h3>3. What Fragility Looks Like in Practice</h3><p>Fragility appears when <strong>performance depends on very precise parameter choices</strong>. On the surface, the strategy may look acceptable. But once you explore the parameter space, the instability becomes obvious. Small changes lead to large swings in performance. Peaks are narrow. Valleys are deep. There is no continuity.</p><p>This <strong>behavior indicates that the strategy is not exploiting a stable market structure</strong>. It is exploiting coincidences in the historical data. The parameters are not tuning an edge. They are aligning the model with past noise.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zeQT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zeQT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic 424w, https://substackcdn.com/image/fetch/$s_!zeQT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic 848w, https://substackcdn.com/image/fetch/$s_!zeQT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic 1272w, https://substackcdn.com/image/fetch/$s_!zeQT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zeQT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic" width="1278" height="587" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:587,&quot;width&quot;:1278,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91638,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/182067388?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zeQT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic 424w, https://substackcdn.com/image/fetch/$s_!zeQT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic 848w, https://substackcdn.com/image/fetch/$s_!zeQT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic 1272w, https://substackcdn.com/image/fetch/$s_!zeQT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0b134d-3b9d-4717-a56e-10ece4525b15_1278x587.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In practice, this means the strategy has no margin for error. <strong>Any shift in volatility, regime, or execution conditions will move it away from the narrow zone where it appears to work</strong>. Strategies like this often perform well in backtests and fail quickly in live trading.</p><p>Fragility is not subtle once you look for it. It is visible in sharp peaks, abrupt drops, and highly irregular performance surfaces. When you see this pattern, the conclusion is simple. <strong>The edge is not robust</strong>.</p><p></p><div><hr></div><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>Parameter sensitivity testing <strong>is not about finding the best setting</strong>. It is about <strong>verifying that an edge exists</strong> beyond one precise configuration. If performance only survives at a single point, the strategy is fragile by construction.</p><p>Robust strategies tolerate uncertainty. They work across a reasonable neighborhood of parameters, not because they are perfectly tuned, but because the underlying structure is real.</p><blockquote><p>If you do not test sensitivity, you are not validating robustness. You are validating luck.</p></blockquote><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Look-Ahead Bias. The Invisible Killer!]]></title><description><![CDATA[Why strategies that look perfect on paper collapse in live trading]]></description><link>https://www.newsletter.quantreo.com/p/look-ahead-bias-the-invisible-killer</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/look-ahead-bias-the-invisible-killer</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 19 Dec 2025 15:30:28 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f843b71c-e617-4923-9aa9-6620f7c2ebed_1170x577.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Look-ahead bias is one of the most dangerous errors in quantitative research because it <strong>rarely looks like a mistake</strong>. The backtest is clean. The metrics are stable. The equity curve is smooth. Everything suggests robustness. Yet the <strong>strategy was never tradable</strong> in the first place.</p><p>This bias appears when <strong>information from the future leaks into the decision process</strong>. Often unintentionally. A target slightly misaligned. A feature computed with data not available at the time. A normalization done on the full dataset. Each individual step looks reasonable. Together, they create a strategy that knows more than it should.</p><p>Look-ahead bias does not exaggerate performance randomly. <strong>It removes uncertainty by construction</strong>. And when uncertainty disappears, realism disappears with it.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>1. What Look-Ahead Bias Really Is</h3><p><strong>Look-ahead bias</strong> occurs when a strategy uses <strong>information that was not available</strong> at the moment a decision was made. The trade appears valid in the backtest because the future has already been revealed. In live trading, that information does not exist yet, and <strong>the strategy collapses</strong>.</p><p><strong>This bias is rarely obvious</strong>. It does not come from a single line of code that clearly looks wrong. It usually emerges from small <strong>misalignments in the research process</strong>. A feature that relies on a full window instead of past data only. A target that leaks future movement. A normalization step that quietly uses information from the entire sample.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!amOP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!amOP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic 424w, https://substackcdn.com/image/fetch/$s_!amOP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic 848w, https://substackcdn.com/image/fetch/$s_!amOP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic 1272w, https://substackcdn.com/image/fetch/$s_!amOP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!amOP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic" width="950" height="222" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:222,&quot;width&quot;:950,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20570,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/182066152?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!amOP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic 424w, https://substackcdn.com/image/fetch/$s_!amOP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic 848w, https://substackcdn.com/image/fetch/$s_!amOP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic 1272w, https://substackcdn.com/image/fetch/$s_!amOP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792e57fa-ceff-456f-915f-2b209bd2c249_950x222.heic 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><blockquote><p>The result is a strategy that reacts too well, too early. <strong>It seems to anticipate market moves</strong> because, in practice, it already knows them.</p></blockquote><div><hr></div><h3>2. The Most Common Sources of Look-Ahead Bias</h3><p>Look-ahead bias usually comes from the research pipeline, not from the trading logic itself. The backtest still looks clean, which is why these errors are so dangerous. Common sources include:</p><p>&#8226; <strong>Misaligned targets: </strong>Forward returns or event based labels that are not shifted correctly, allowing future price movements to leak into the learning signal.</p><p>&#8226; <strong>Feature computation errors: </strong>Rolling statistics or indicators that include future observations, end of period values used before they are known, or windows that are not strictly backward looking.</p><p>&#8226; <strong>Data normalization and scaling: </strong>Standardization, ranking, or normalization performed using statistics computed on the full dataset instead of using past data only.</p><p>&#8226; <strong>Feature selection leakage: </strong>Selecting features based on their performance over the full sample, including periods that should remain unseen.</p><p>&#8226; <strong>Improper validation methods: </strong>Using classical cross validation instead of time aware methods, which breaks the temporal structure and leaks future information into training.</p><p>Each of these steps may look reasonable in isolation. Together, they create strategies that unknowingly trade on future data.</p><div><hr></div><h3>3. How to Detect Look-Ahead Bias</h3><p>Look-ahead bias is difficult to spot because it does not announce itself clearly. Detection requires suspicion, not optimism. If a strategy looks too stable, it deserves closer inspection. Here are practical ways to detect it:</p><p>&#8226; <strong>Check data availability at decision time: </strong>For every feature, target, and filter, ask a simple question. <em>Could this value have been known at the exact moment the trade was placed</em> ? If the answer is unclear, assume there is leakage.</p><p>&#8226; <strong>Enforce strict time alignment: </strong>Verify that all features use only past data and that targets are shifted correctly. A one step misalignment is enough to invalidate the entire backtest.</p><p>&#8226; <strong>Break the pipeline on purpose: </strong>Delay features or targets artificially and observe how performance reacts. A strategy that collapses under a small delay was probably relying on future information.</p><p>&#8226; <strong>Compare backtest and live logic: </strong>If the backtest pipeline cannot be replicated exactly in live trading, there is almost certainly a look-ahead issue.</p><p>&#8226; <strong>Test across assets and periods: </strong>Leakage often fits one asset or one regime extremely well. If performance vanishes when you change markets or time windows, realism was likely missing.</p><blockquote><p>Look-ahead bias does not disappear by chance. It disappears when every step of the process is questioned and validated <strong>under real time constraints</strong>.</p></blockquote><div><hr></div><p>If you want to speed up your work with features that already capture robust market behaviors, the <a href="https://docs.quantreo.com">Quantreo library</a> and the <a href="https://www.quantreo.com/ai-trading-lab/">AI Trading Lab</a> give you everything you need to enrich your data and restart your research with a much stronger foundation.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p>Look-ahead bias is not a small technical mistake. <strong>It is a fundamental violation of realism</strong>. A strategy affected by it may look stable, profitable, and well behaved in a backtest, yet it has no chance of surviving live trading.</p><p>The only reliable defense is a disciplined process. Every feature must respect data availability. Every target must be built with strict time alignment. Every validation step must preserve the temporal structure of the data. When realism is enforced at each stage, performance usually drops, but credibility increases.</p><p>In quantitative research, <strong>realism always matters more than performance</strong>. A weaker backtest that can be deployed is infinitely more valuable than a perfect curve that never could.</p>]]></content:encoded></item><item><title><![CDATA[Don’t Add Complexity. Add Information.]]></title><description><![CDATA[Better Features Beat Bigger Models]]></description><link>https://www.newsletter.quantreo.com/p/dont-add-complexity-add-information</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/dont-add-complexity-add-information</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 12 Dec 2025 15:30:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/da3dea64-b5e4-453b-b764-c074a7e580e1_1678x1144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every quant researcher reaches a point where nothing works. No alpha emerges, no model improves, no backtest makes sense. <strong>The usual reaction is to add more complexity.</strong> </p><p>A deeper model, a new architecture, more tuning. Yet this rarely fixes anything. When a model fails, it is almost never because the model is too simple. It is because the information it receives is too weak to reveal anything useful.</p><p><strong>The solution is not to increase complexity. It is to increase information.</strong></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h3>1. Complexity Is Not the Cure</h3><p>When research goes nowhere, adding complexity feels like the logical next step. A more advanced model, a larger network, an extra layer of regularization. In practice, this only makes the problem harder to diagnose. <strong>A complex model does not create information</strong>. It can only amplify whatever structure is already present in the data.</p><p>If that structure is weak or nonexistent, the model will either fit noise or collapse entirely. You end up with a backtest that looks unstable, a signal that disappears out of sample, or a model that learns patterns that are specific to one regime. <strong>Increasing complexity increases the risk of overfitting</strong> without increasing the quality of what the model learns.</p><blockquote><p>When nothing works, the limitation is almost always the information content of the inputs, not the sophistication of the model.</p></blockquote><p></p><div><hr></div><h3>2. What Actually Fixes the Problem. More Information</h3><p>If a model cannot learn anything useful, the issue is not the architecture. It is the information available to it. The fastest way to unblock research is to increase the amount of meaningful structure in the data.</p><p>There are three ways to do that.</p><ol><li><p>First, <strong>expand the raw data</strong>. Add more assets, more horizons, or more context so the model sees a wider range of behaviors.</p></li><li><p>Second, <strong>refine the targets</strong>. A clearer target creates a clearer learning objective and reduces the noise the model has to fight.</p></li><li><p>Third, and most important, <strong>enrich the features</strong>. Good features reveal patterns that are invisible in the raw time series.</p></li></ol><p>Information is the real bottleneck. Once you improve it, even simple models start producing signals that make sense.</p><blockquote><p>You can also accelerate this step by using the <a href="https://docs.quantreo.com">Quantreo library</a>, which provides a large set of ready to use features to enrich your data instantly.</p></blockquote><p></p><div><hr></div><h3>3. Feature Engineering Is the Real Breakthrough</h3><p>Features are the fastest way to increase the amount of usable information in your dataset. Raw prices contain very little structure. Features extract and highlight the behaviors that matter. Volatility patterns, microstructure signals, relative strength, regime shifts, liquidity imbalances. <strong>These transformations turn noise into something the model can actually learn from.</strong></p><p>Most breakthroughs in research come from better features, not better models. A single well designed feature can reveal more signal than an entire stack of complex architectures. It creates clarity in the data, stabilizes the learning process, and reduces the sensitivity to market noise.</p><p>When nothing works, generate more features, test them carefully, and <strong>let the data show you where the structure exists</strong>. This is usually the point where research starts moving again.</p><p></p><p></p><p>When research stalls, the answer is rarely more complexity. It is more information. Better targets, richer data, and stronger features give your models something real to learn from. This approach reduces noise, exposes structure, and turns a stagnant process into a productive one.</p><p>If you want to speed up this step and work with features that already capture robust market behaviors, the <a href="https://docs.quantreo.com">Quantreo library</a> and the <a href="https://www.quantreo.com/ai-trading-lab/">AI Trading Lab</a> give you everything you need to enrich your data and restart your research with a much stronger foundation.</p>]]></content:encoded></item><item><title><![CDATA[How to Think in Distributions, Not in Points]]></title><description><![CDATA[Why Single Numbers Create False Confidence]]></description><link>https://www.newsletter.quantreo.com/p/how-to-think-in-distributions-not</link><guid isPermaLink="false">https://www.newsletter.quantreo.com/p/how-to-think-in-distributions-not</guid><dc:creator><![CDATA[Lucas]]></dc:creator><pubDate>Fri, 05 Dec 2025 15:31:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wrNY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most traders think in single numbers. One Sharpe ratio. One expected return. One drawdown. It feels precise, but <strong>it hides the reality of financial markets</strong>. The future is random, and every model, every backtest, every live trade has a full range of possible outcomes. A single number is only one sample from that range.</p><p>Thinking in distributions means accepting uncertainty instead of compressing it. It means asking what the possible results are, how wide the range is, and how often each scenario occurs. Robust strategies do not aim for the best outcome. <strong>They are built to survive the entire distribution of outcomes</strong>, including the parts that most traders prefer to ignore.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.newsletter.quantreo.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Quantreo! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h3>1. The Future Is Random. Your Model Must Accept It</h3><p>Financial markets <strong>do not evolve along a single path</strong>. They generate a wide range of possible scenarios driven by volatility shifts, liquidity changes, structural breaks, and unexpected events. Even a robust signal behaves differently depending on the environment. This is what makes point thinking dangerous. It assumes a level of certainty that does not exist.</p><p>A strategy does not produce one return. <strong>It produces a distribution of returns</strong>. Some outcomes are good, some are acceptable, and some fall into the tail that most traders ignore. When you accept this, <strong>you stop treating a backtest as a fixed prediction and start seeing it as one sample among many possible futures.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wrNY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wrNY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic 424w, https://substackcdn.com/image/fetch/$s_!wrNY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic 848w, https://substackcdn.com/image/fetch/$s_!wrNY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic 1272w, https://substackcdn.com/image/fetch/$s_!wrNY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wrNY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29732,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.newsletter.quantreo.com/i/180245241?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wrNY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic 424w, https://substackcdn.com/image/fetch/$s_!wrNY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic 848w, https://substackcdn.com/image/fetch/$s_!wrNY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic 1272w, https://substackcdn.com/image/fetch/$s_!wrNY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee59a2b8-7fb3-40e3-bc6c-782cd7933ce5_1500x1000.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A researcher that ignores randomness becomes fragile. <strong>A researcher that accepts randomness becomes realistic</strong>. Robust research begins when you recognize that uncertainty is not a flaw to remove but a property to measure and work with.</p><p></p><div><hr></div><h3>2. The Danger of Point Thinking</h3><p>Point thinking reduces uncertainty to a single number. One Sharpe. One CAGR. One maximum drawdown. These metrics look objective, but they hide the fact that they are only one realization of a much broader range of outcomes. <strong>They give the illusion of control by compressing all variability into a single value.</strong></p><p>This mindset creates weak decisions. Traders oversize positions because the backtest shows a single attractive path. They discard strategies that looked average even though their distribution was stable and resilient. They underestimate risk because they anchor on one drawdown instead of the worst scenarios that could have occurred with slightly different market conditions.</p><p>A point estimate is comfortable, but it is incomplete. It tells you nothing about how the strategy behaves in the tails, nothing about the variability between runs, and nothing about how sensitive the results are to small changes in parameters or regimes. A strategy that looks exceptional on a single path may collapse across a wider set of simulations.</p><blockquote><p>When you limit your thinking to points, you train yourself to ignore the outcomes that matter most.</p></blockquote><p></p><div><hr></div><h3>3. How to Think in Distributions</h3><p>Thinking in distributions means shifting the question from &#8220;what is the return&#8221; to &#8220;what are the possible returns and how often do they occur&#8221;. <strong>You stop looking for a single answer</strong> and start evaluating the full set of outcomes that a strategy can generate.</p><blockquote><p>The idea is simple. Every strategy has a central tendency, a spread, and tails. You care about all three. The average tells you what is typical. The spread tells you how variable the results are. The tails tell you the price you pay when the market turns against you. A backtest cannot summarize this complexity with one number.</p></blockquote><p>The right questions become clear.<br>What does the distribution of outcomes look like over multiple simulations or multiple assets.</p><ul><li><p>How wide is the range of scenarios.</p></li><li><p>How often does the strategy produce acceptable returns.</p></li><li><p>How severe are the worst deciles.</p></li><li><p>What happens if volatility changes or a regime breaks.</p></li></ul><p>Once you start thinking this way, fragility becomes obvious. Two strategies with the same Sharpe can have completely different risk profiles. One has a narrow distribution and tight tails. The other has a wide distribution with outcomes that include catastrophic losses. Only the first one is truly robust.</p><blockquote><p><strong>Understanding the distribution tells you how a strategy behaves in reality, not how it behaved on one convenient path.</strong></p></blockquote><p>&#8212;&gt; To generate the different simulations that form the distribution, you can rely on several methods such as cross validation, Monte Carlo resampling, randomized parameter testing, or multi asset evaluation.</p><p></p><p>Trading is not about predicting a single outcome. It is about surviving a wide range of possible scenarios. When you think in distributions instead of points, you stop relying on one idealized backtest and start evaluating how a strategy behaves across many futures. This is how you identify signals that remain stable when volatility shifts, when regimes change, or when noise dominates.</p><p>Robust strategies do not aim for the best result. <strong>They aim for consistency across the entire distribution</strong>. They deliver acceptable outcomes across many paths instead of exceptional outcomes on one path. Once you adopt this mindset, your research becomes more realistic, your risk management becomes clearer, and your decisions become stronger.<br></p><p>&#128073; If you want to go deeper into each step of the strategy building process, with real-life projects, ready-to-use templates to generate distribution metrics, and 1:1 mentoring, that&#8217;s exactly what the <strong><a href="https://www.quantreo.com">Alpha Quant Program</a></strong> is for.</p>]]></content:encoded></item></channel></rss>