<?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[Concretum Group: Coding]]></title><description><![CDATA[Coding Guides by Concretum Group]]></description><link>https://concretumgroup.substack.com/s/coding</link><image><url>https://substackcdn.com/image/fetch/$s_!nVqU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516224c8-26c2-4f2e-8231-c97e0c766bd8_437x437.png</url><title>Concretum Group: Coding</title><link>https://concretumgroup.substack.com/s/coding</link></image><generator>Substack</generator><lastBuildDate>Mon, 06 Jul 2026 18:15:06 GMT</lastBuildDate><atom:link href="https://concretumgroup.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Concretum Group]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[concretumgroup@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[concretumgroup@substack.com]]></itunes:email><itunes:name><![CDATA[Concretum Research]]></itunes:name></itunes:owner><itunes:author><![CDATA[Concretum Research]]></itunes:author><googleplay:owner><![CDATA[concretumgroup@substack.com]]></googleplay:owner><googleplay:email><![CDATA[concretumgroup@substack.com]]></googleplay:email><googleplay:author><![CDATA[Concretum Research]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Complete Norgate Data Toolkit: Three Python Workflows Every Quant Researcher Needs]]></title><description><![CDATA[Building survivorship bias-free equities, point-in-time index membership, and a full futures database, all in Python.]]></description><link>https://concretumgroup.substack.com/p/the-complete-norgate-data-toolkit</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/the-complete-norgate-data-toolkit</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Sat, 04 Jul 2026 13:20:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d32fdb11-6841-4526-87d7-fd4940f0607d_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">Over the past several months, we published three standalone guides on building research-grade financial databases using <a href="https://norgatedata.com/">Norgate Data</a> and Python. Each one solves a different data construction problem that every systematic trader or quant researcher eventually runs into.</p><p style="text-align: justify;">This article brings all three together in one place. We walk through what each workflow does, why it matters, and what it produces. The Jupyter notebooks are provided alongside this article so you can download them, configure the parameters, and run them directly.</p><p style="text-align: justify;">Here is what we built:</p><ol><li><p style="text-align: justify;"><strong><a href="https://concretumgroup.com/how-to-construct-a-survivorship-bias-free-database-in-norgate-using-python/">Survivorship-Bias-Free U.S. Equity Database.</a></strong> The entire U.S. stock market, including delisted companies, enriched with sector classifications, company names, and index membership flags.</p></li><li><p style="text-align: justify;"><strong><a href="https://concretumgroup.com/historical-constituents-of-an-equity-index-in-python-norgate-data/">Point-in-Time Index Membership.</a></strong> Reconstructing which stocks actually belonged to an index (S&amp;P 500, Nasdaq 100, Russell 3000) on any given date in history, with entry/exit dates and re-entry tracking.</p></li><li><p style="text-align: justify;"><strong><a href="https://concretumgroup.com/futures-database-in-python-complete-pipeline-norgate-data/">Complete Futures Database Pipeline.</a></strong> Contract specifications, individual contract histories, continuous adjusted and unadjusted series, and volume decomposition across all futures markets.</p></li></ol><p style="text-align: justify;">Each section below explains the problem, describes the approach, and shows what you get at the end.</p><h3><strong>Part 1: Building a Survivorship-Bias-Free U.S. Equity Database</strong></h3><h3><strong>Why This Matters</strong></h3><p style="text-align: justify;">If you backtest a stock strategy using only companies that trade today, you are testing on the survivors. Companies that went bankrupt, got acquired, or were delisted for any reason are missing from your dataset. This is survivorship bias, and it consistently makes strategies look better than they actually were.</p><p style="text-align: justify;">The fix is straightforward: include every company that ever traded, whether it is still active or not. Norgate Data maintains a complete archive of delisted U.S. equities alongside the active ones, and their Python API lets you pull both.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QkkT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QkkT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!QkkT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!QkkT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!QkkT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QkkT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:279023,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QkkT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!QkkT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!QkkT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!QkkT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ca4e0c4-7919-40d4-9b87-b73eea1a33e5_1774x887.png 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><h3><strong>What the Notebook Does</strong></h3><p style="text-align: justify;">The workflow is a 12-step Jupyter notebook that starts small and scales up.</p><p style="text-align: justify;"><strong>Starting small.</strong><span> The notebook first downloads price data for a few well-known tickers (AAPL, TSLA, GOOG) so you can see how the Norgate API works. It uses total-return-adjusted prices, which account for dividends and stock splits, and returns a clean pandas DataFrame with OHLCV columns.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ixr8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ixr8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Ixr8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Ixr8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Ixr8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ixr8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png&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;:206960,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ixr8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Ixr8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Ixr8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Ixr8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6903ce9-f5e5-4b2e-a23b-6e7242f2af17_1536x1024.png 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 style="text-align: justify;"><strong>Enriching with metadata.</strong> Once you have the raw prices, the notebook adds three layers of information to each row:</p><ul><li><p><strong>Company name</strong> using Norgate&#8217;s security name lookup. Adds a <code>Security_Name</code> column (e.g., &#8220;Apple Inc&#8221;).</p></li><li><p><strong>GICS sector</strong> using the Global Industry Classification Standard. Adds a <code>Sector</code> column (e.g., &#8220;Information Technology&#8221;).</p></li><li><p><strong>Index membership</strong> using Norgate&#8217;s index constituent time series. Adds <code>In_S&amp;P_500</code> and <code>In_Russell_3000</code> columns as binary flags (1 = member on that date, 0 = not).</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xm2c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xm2c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png 424w, https://substackcdn.com/image/fetch/$s_!Xm2c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png 848w, https://substackcdn.com/image/fetch/$s_!Xm2c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png 1272w, https://substackcdn.com/image/fetch/$s_!Xm2c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xm2c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png" width="1456" height="697" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:697,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:206588,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Xm2c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png 424w, https://substackcdn.com/image/fetch/$s_!Xm2c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png 848w, https://substackcdn.com/image/fetch/$s_!Xm2c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png 1272w, https://substackcdn.com/image/fetch/$s_!Xm2c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46eea9dc-8a0d-41eb-9cd2-98017c5454c6_1812x868.png 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 style="text-align: justify;"><strong>Scaling to the full market. The notebook then retrieves every symbol from both the </strong><code>US Equities</code><span> and </span><code>US Equities Delisted</code><span> databases, filters to equities only (excluding ETFs, REITs, etc.), and runs the same enrichment pipeline across the entire universe.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ECvr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ECvr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ECvr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ECvr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ECvr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ECvr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png&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;:238172,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ECvr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ECvr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ECvr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ECvr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F234f939a-0ff1-46ec-9aa8-26dd7a942b04_1536x1024.png 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 style="text-align: justify;"><strong>Merge and export. </strong><span>Finally, active and delisted data are combined into a single DataFrame, sorted by date, and saved as a </span><code>.parquet</code><span> file.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4Um2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4Um2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!4Um2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!4Um2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!4Um2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4Um2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:235091,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4Um2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!4Um2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!4Um2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!4Um2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadff89ad-ebc4-4d2d-8563-c6680a199517_1774x887.png 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><h3><strong>What You Get</strong></h3><p style="text-align: justify;">A single <code>.parquet</code> file containing every U.S. equity, active and delisted, with daily OHLCV prices, company names, GICS sectors, and point-in-time S&amp;P 500 and Russell 3000 membership flags. Ready for backtesting.</p><h2><strong>Part 2: Point-in-Time Index Membership Tables</strong></h2><h3><strong>Why This Matters</strong></h3><p style="text-align: justify;">Even with a survivorship-bias-free price database, there is another subtle bias that can distort your backtests: <strong>index membership bias</strong>.</p><p style="text-align: justify;">If you want to backtest a strategy on &#8220;<strong>S&amp;P 500 stocks</strong>,&#8221; which S&amp;P 500 do you use? Today&#8217;s constituents? That is the <strong>wrong answer</strong>. The S&amp;P 500 composition changes constantly. Companies are added when they grow large enough and removed when they shrink, get acquired, or go bankrupt. Using today&#8217;s list to represent the past means you are implicitly selecting stocks that performed well enough to remain in the index.</p><p style="text-align: justify;">What you actually need is a point-in-time record: on January 15, 2018, which exact stocks were in the S&amp;P 500? On March 3, 2020? The answer is different for every date.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ymdr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ymdr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png 424w, https://substackcdn.com/image/fetch/$s_!ymdr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png 848w, https://substackcdn.com/image/fetch/$s_!ymdr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png 1272w, https://substackcdn.com/image/fetch/$s_!ymdr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ymdr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png" width="1774" height="682" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:682,&quot;width&quot;:1774,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:533457,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e433d39-7ac4-4dd5-aa05-f29a8d60d2bd_1774x887.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ymdr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png 424w, https://substackcdn.com/image/fetch/$s_!ymdr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png 848w, https://substackcdn.com/image/fetch/$s_!ymdr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png 1272w, https://substackcdn.com/image/fetch/$s_!ymdr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44449f46-d43f-4b07-afa1-687dbfb5b595_1774x682.png 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><h3><strong>What the Notebook Does</strong></h3><p style="text-align: justify;">The core concept is <strong>membership spells</strong>: continuous periods during which a stock belongs to an index. A stock can have multiple spells if it was removed and later re-added.</p><p style="text-align: justify;"><strong>Configuration.</strong> You define which indices to analyze (e.g., <code>$NDX</code> for Nasdaq 100, <code>$SPX</code> for S&amp;P 500) and the date range. The notebook explains how to look up the correct Norgate symbol codes using their Data Viewer tool.</p><p style="text-align: justify;"><strong>Symbol universe. </strong>The notebook pulls all active and delisted U.S. equity symbols, because restricting to currently active stocks would reintroduce survivorship bias.</p><p style="text-align: justify;"><strong>Spell detection. </strong>For each symbol and index pair, the notebook retrieves the daily index constituent time series from Norgate (a binary 1/0 signal indicating membership on each date) and scans it sequentially. When a stock enters the index, a new spell begins. When it leaves, the spell ends on the last day the stock was still a member.</p><p style="text-align: justify;">A few design decisions worth noting:</p><ul><li><p style="text-align: justify;">Pre-existing members (stocks already in the index on the start date) get a blank entry date, since the algorithm cannot determine the original entry from within the window.</p></li><li><p style="text-align: justify;">Exit date is the last day the stock was still in the index, not the first day it dropped out.</p></li><li><p style="text-align: justify;">A membership counter tracks re-entries: a stock with membership number 2 entered the index, was removed, and entered again.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dHei!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dHei!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!dHei!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!dHei!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!dHei!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dHei!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png" width="342" height="513" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:342,&quot;bytes&quot;:291097,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dHei!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!dHei!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!dHei!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!dHei!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52201f7b-268f-4b2f-ba86-b33e73eaa774_1024x1536.png 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 style="text-align: justify;"><strong>Full scan.</strong> The notebook runs this function across every symbol in the entire U.S. equity universe for each configured index. Scanning approximately 40,000 symbols per index takes about 4 to 5 minutes each. The results are combined into a single DataFrame and exported as CSV.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h5BK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h5BK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!h5BK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!h5BK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!h5BK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h5BK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png&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;:278878,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h5BK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!h5BK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!h5BK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!h5BK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b168cc5-e5a6-43bf-9f11-f3a9c0d16f1f_1536x1024.png 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><h3><strong>What You Get</strong></h3><p style="text-align: justify;">A CSV file (e.g., <code>ndx_spx_constituents_2015_2025.csv</code>) containing one row per membership spell. Each row tells you exactly when a stock entered and exited a specific index. This file can be directly joined with your price data to filter your backtest to only the stocks that were actually in the index on each date.</p><h2><strong>Part 3: Complete Futures Database Pipeline</strong></h2><h3><strong>Why This Matters</strong></h3><p style="text-align: justify;">Futures data is fundamentally different from equity data. You are not dealing with one continuous time series per instrument. You have dozens or hundreds of individual contracts per market, each with its own expiry date, and you need to stitch them together into continuous series while keeping track of which specific contract you are in at any given time.</p><p style="text-align: justify;">Getting this wrong leads to phantom P&amp;L from roll gaps, incorrect position sizing from using adjusted prices for dollar calculations, and missed roll signals from ignoring volume transitions between contracts.</p><p style="text-align: justify;">This workflow builds four Parquet files that cover the full spectrum: from raw contract metadata to a fully enriched continuous series with volume decomposition.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lCZq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lCZq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!lCZq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!lCZq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!lCZq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lCZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png&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;:271026,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lCZq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!lCZq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!lCZq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!lCZq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F685ddc82-5d96-4b13-8586-5450e718197e_1536x1024.png 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 class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bWuM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bWuM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!bWuM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!bWuM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!bWuM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bWuM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png&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;:295163,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bWuM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!bWuM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!bWuM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!bWuM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46f0769b-540c-4a77-bcd5-959c8cf27c99_1536x1024.png 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 style="text-align: justify;"></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NcDo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NcDo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!NcDo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!NcDo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!NcDo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NcDo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:312983,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NcDo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!NcDo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!NcDo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!NcDo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb112d543-26ea-4916-ba74-3cab6b56ad40_1693x929.png 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 class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DPPX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DPPX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!DPPX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!DPPX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!DPPX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DPPX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png&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;:361776,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DPPX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!DPPX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!DPPX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!DPPX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfa260bb-949c-4b52-8620-2ab6c167d2d7_1536x1024.png 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><h3><strong>What the Notebook Does</strong></h3><p style="text-align: justify;">The notebook produces four Parquet files, each building on the previous one.</p><p style="text-align: justify;"><strong>Layer 1: Contract Specifications. </strong>The pipeline starts by pulling metadata for every futures market: tick size, point value, margin requirements, currency, exchange, and classification group. This is the foundation for position sizing and risk calculations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c1SE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c1SE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!c1SE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!c1SE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!c1SE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c1SE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:307378,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c1SE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png 424w, https://substackcdn.com/image/fetch/$s_!c1SE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png 848w, https://substackcdn.com/image/fetch/$s_!c1SE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png 1272w, https://substackcdn.com/image/fetch/$s_!c1SE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35cc9bf9-4069-4a8c-bdda-d5b0b7554f9a_1693x929.png 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 style="text-align: justify;"><strong>Layer 2: Individual Contracts. </strong>All individual futures contracts are then downloaded, including expired ones. Each contract is queried for its full OHLCV series with open interest. The download runs in parallel with 10 workers since there are roughly 27,000 individual contract symbols producing around 11 million rows.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YhFG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YhFG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png 424w, https://substackcdn.com/image/fetch/$s_!YhFG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png 848w, https://substackcdn.com/image/fetch/$s_!YhFG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png 1272w, https://substackcdn.com/image/fetch/$s_!YhFG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YhFG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png" width="1456" height="841" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d189732d-a5d8-483e-981e-27022224b98a_1650x953.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:841,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:313015,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YhFG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png 424w, https://substackcdn.com/image/fetch/$s_!YhFG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png 848w, https://substackcdn.com/image/fetch/$s_!YhFG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png 1272w, https://substackcdn.com/image/fetch/$s_!YhFG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd189732d-a5d8-483e-981e-27022224b98a_1650x953.png 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 style="text-align: justify;"><strong>Layer 3: Continuous Adjusted and Unadjusted Series.</strong><span> This is where it gets subtle. Norgate provides two types of continuous symbols for each market:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5kPo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5kPo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png 424w, https://substackcdn.com/image/fetch/$s_!5kPo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png 848w, https://substackcdn.com/image/fetch/$s_!5kPo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png 1272w, https://substackcdn.com/image/fetch/$s_!5kPo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5kPo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png" width="1140" height="304" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:304,&quot;width&quot;:1140,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26276,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5kPo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png 424w, https://substackcdn.com/image/fetch/$s_!5kPo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png 848w, https://substackcdn.com/image/fetch/$s_!5kPo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png 1272w, https://substackcdn.com/image/fetch/$s_!5kPo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d86689b-305e-4390-ae74-039d7df45b94_1140x304.png 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 style="text-align: justify;">You need both. Adjusted prices for signal generation (no artificial jumps at roll dates) and unadjusted prices for position sizing (real dollar values). The notebook merges them into a single row so each date has both representations available.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ark7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ark7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png 424w, https://substackcdn.com/image/fetch/$s_!Ark7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png 848w, https://substackcdn.com/image/fetch/$s_!Ark7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png 1272w, https://substackcdn.com/image/fetch/$s_!Ark7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ark7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:336832,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ark7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png 424w, https://substackcdn.com/image/fetch/$s_!Ark7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png 848w, https://substackcdn.com/image/fetch/$s_!Ark7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png 1272w, https://substackcdn.com/image/fetch/$s_!Ark7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26128cd7-2ea4-42db-9822-f80f8043dd03_1600x983.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p style="text-align: justify;"><strong>Layer 4: Volume Decomposition. </strong>The final layer enriches the continuous series with volume from the first-to-expire and second-to-expire contracts, which  (as volume shifts from the front-month to the next contract) is critical for understanding proper roll dynamics.</p><p style="text-align: justify;">The pipeline parses individual contract symbols (e.g., <code>ES-2025M</code>) to determine expiry dates, builds a sorted map of contracts per commodity, and then for each date finds the two nearest active contracts and records their volumes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y5Bw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png 424w, https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png 848w, https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png 1272w, https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png" width="1456" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:386682,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png 424w, https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png 848w, https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png 1272w, https://substackcdn.com/image/fetch/$s_!Y5Bw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb28e72-1a6c-43dc-bd46-b14d3157b515_1953x805.png 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><h3><strong>What You Get</strong></h3><p>Four Parquet files in the <code>norgate_output/</code> directory:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NAP3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NAP3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png 424w, https://substackcdn.com/image/fetch/$s_!NAP3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png 848w, https://substackcdn.com/image/fetch/$s_!NAP3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png 1272w, https://substackcdn.com/image/fetch/$s_!NAP3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NAP3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png" width="1456" height="508" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:508,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70771,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/204632723?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NAP3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png 424w, https://substackcdn.com/image/fetch/$s_!NAP3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png 848w, https://substackcdn.com/image/fetch/$s_!NAP3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png 1272w, https://substackcdn.com/image/fetch/$s_!NAP3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9567c076-f799-4e4d-9bd5-0bb0aeb998f2_1480x516.png 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><h2><strong>Download and Run</strong></h2><p style="text-align: justify;">All three workflows are provided as Jupyter notebooks alongside this article. Download them, adjust the configuration in the first cell (date range, indices, output paths), and run. </p><div class="callout-block" data-callout="true"><p style="text-align: center;"><em>Each notebook includes its own setup instructions and prerequisites.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://drive.google.com/file/d/1XwFF9GaIPIFdxPTshT0GOL2qxCFk5ODA/view&quot;,&quot;text&quot;:&quot;Survivorship Bias-Free Database&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://drive.google.com/file/d/1XwFF9GaIPIFdxPTshT0GOL2qxCFk5ODA/view"><span>Survivorship Bias-Free Database</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://drive.google.com/file/d/1AGgrrL5d4GJdZ2X3cH8piAZ44s84tLFo/view&quot;,&quot;text&quot;:&quot;Historical Index Constituents&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://drive.google.com/file/d/1AGgrrL5d4GJdZ2X3cH8piAZ44s84tLFo/view"><span>Historical Index Constituents</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://drive.google.com/file/d/133q49bZ11O8nRN0eTqOuvcWk6Kch5cDL/view?usp=sharing&quot;,&quot;text&quot;:&quot;Futures Database&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://drive.google.com/file/d/133q49bZ11O8nRN0eTqOuvcWk6Kch5cDL/view?usp=sharing"><span>Futures Database</span></a></p></div><h2><strong>Conclusion</strong></h2><p style="text-align: justify;">Data quality is not glamorous, but it determines whether your research conclusions are real or artifacts. Survivorship bias, index membership bias, and incorrect futures roll handling are three of the most common ways backtests can lie to you.</p><p style="text-align: justify;">These three workflows address each of those problems directly. They produce clean, structured, Parquet-based datasets that you can plug into any backtesting framework or research pipeline.</p><p style="text-align: justify;">Download the notebooks, run them, adapt them, and build on them.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p style="text-align: justify;"><strong>Disclaimer</strong><br><em>This publication is provided by Concretum Group for informational, educational, and research purposes only. It does not constitute investment, financial, legal, or tax advice, nor a recommendation to buy or sell any security, instrument, strategy, or investment product. All investments involve risk, including possible loss of principal. Past performance, backtested performance, and historical analysis are not reliable indicators of future results. Readers should conduct their own research and consult qualified professionals before making investment decisions. </em></p><p style="text-align: justify;"><em>Full disclaimer: <a href="https://concretumgroup.com/disclaimer/">https://concretumgroup.com/disclaimer/</a></em></p>]]></content:encoded></item><item><title><![CDATA[How to Detect and Fix Problems in Intraday Market Data]]></title><description><![CDATA[A reproducible Python companion to &#8220;Can You Trust Your Intraday Database?&#8220;]]></description><link>https://concretumgroup.substack.com/p/how-to-detect-and-fix-problems-in</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/how-to-detect-and-fix-problems-in</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Wed, 13 May 2026 15:58:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/77fe2450-09fc-4058-a369-0ad834e1350b_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">In the previous article, <em><a href="https://concretumgroup.com/backtesting-data-quality-can-your-data-provider-be-trusted/">Can You Trust Your Intraday Database?</a></em>, we showed that running the same intraday strategy across multiple data providers produced materially different results despite identical strategy logic.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a0604beb-bbfa-45b3-862c-b84c7c6406f8&quot;,&quot;caption&quot;:&quot;Introduction&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Can You Trust Your Intraday Database?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:479204854,&quot;name&quot;:&quot;Concretum Research&quot;,&quot;bio&quot;:&quot;Research division of Concretum Group, a quant-driven proprietary trading firm based in Lugano, Switzerland.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3242ffc-f206-4ad6-9ec1-222df88dc1ff_437x437.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-16T08:56:03.063Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8717fd9-3707-49d1-977b-267d9994db01_2048x1536.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://concretumgroup.substack.com/p/can-you-trust-your-intraday-database&quot;,&quot;section_name&quot;:&quot;Articles&quot;,&quot;video_upload_id&quot;:null,&quot;id&quot;:194378696,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:17,&quot;comment_count&quot;:5,&quot;publication_id&quot;:8336125,&quot;publication_name&quot;:&quot;Concretum Group&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!nVqU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F516224c8-26c2-4f2e-8231-c97e0c766bd8_437x437.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The source of the divergence was not the strategy itself.</p><p>It was the data.</p><p>Across providers, we repeatedly observed:</p><ul><li><p>phantom highs and lows</p></li><li><p>post-close bars on early-close sessions</p></li><li><p>stale bars</p></li><li><p>missing intraday intervals</p></li><li><p>differing timestamp conventions</p></li><li><p>inconsistent venue aggregation</p></li></ul><p>This follow-up focuses on the practical side of the problem:</p><p style="text-align: justify;">Can these anomalies be detected systematically, and can any of them be corrected safely?</p><p style="text-align: justify;">In many cases, yes.</p><p style="text-align: justify;">This article introduces <code>concretum_tests</code>, a lightweight Python CLI used internally at <a href="https://concretumgroup.com?utm_source=chatgpt.com">Concretum Group</a> to audit and validate 1-minute OHLCV datasets.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://drive.google.com/file/d/1C3jI9qqwk1SPfNxJBA7VWA8JxtO4yDne/view?usp=sharing&quot;,&quot;text&quot;:&quot;Download concretum_tests&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://drive.google.com/file/d/1C3jI9qqwk1SPfNxJBA7VWA8JxtO4yDne/view?usp=sharing"><span>Download concretum_tests</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.substack.com/subscribe?"><span>Subscribe now</span></a></p><p>The tool performs four core checks:</p><ul><li><p>Early-close leakage</p></li><li><p>Phantom highs and lows</p></li><li><p>Strong stale bars</p></li><li><p>Missing intraday bars</p></li></ul><p style="text-align: justify;">Where corrections are defensible, the tool can also generate reconstructed datasets.</p><div class="pullquote"><p><code>concretum_tests</code> is still an early public release extracted from our internal research workflow. </p><p>We are open-sourcing the current single-file version now because the methodology is already useful in practice.</p></div><h2>The Tool</h2><p style="text-align: justify;"><code>concretum_tests</code> is intentionally lightweight.</p><p style="text-align: justify;">It scans intraday OHLCV CSVs, reports structural anomalies, and optionally applies corrections where those corrections are defensible.</p><p style="text-align: justify;">No APIs.<br>No databases.<br>No external infrastructure.</p><p style="text-align: justify;">Just CSVs and a terminal.</p><h2>Installation</h2><pre><code><code>pip install polars rich exchange-calendars</code></code></pre><h2>Usage</h2><pre><code><code>python concretum_tests.py
python concretum_tests.py Data/Raw/TQQQ_Polygon_1min.csv
python concretum_tests.py --zb 3 --zw 3 --zv 4
python concretum_tests.py --no-fix
python concretum_tests.py --provider MyFeed --bar-label end</code></code></pre><p>The tool expects standard 1-minute OHLCV CSVs:</p><pre><code><code>datetime,open,high,low,close,volume
2016-04-04 09:30:00,105.65,105.70,105.32,105.48,27391
2016-04-04 09:31:00,105.44,105.46,105.33,105.44,5066</code></code></pre><p style="text-align: justify;">Different providers use different timestamp conventions. Most label bars at the start of the minute, while others such as IQFeed label bars at the end. The CLI automatically detects major providers from the filename and applies the appropriate session logic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5l6K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5l6K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp 424w, https://substackcdn.com/image/fetch/$s_!5l6K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp 848w, https://substackcdn.com/image/fetch/$s_!5l6K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp 1272w, https://substackcdn.com/image/fetch/$s_!5l6K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5l6K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp" width="1043" height="590" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1043,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8686,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5l6K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp 424w, https://substackcdn.com/image/fetch/$s_!5l6K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp 848w, https://substackcdn.com/image/fetch/$s_!5l6K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp 1272w, https://substackcdn.com/image/fetch/$s_!5l6K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d889402-d6cf-494c-9601-cdf16bddb528_1043x590.webp 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>Early-Close Leakage</h2><p style="text-align: justify;">A small number of NYSE trading sessions close early each year, typically at 13:00 ET.</p><p style="text-align: justify;">Black Friday, Christmas Eve, and the session before Independence Day are the most common examples.</p><p style="text-align: justify;">Some providers truncate these sessions correctly. Others continue reporting bars until the normal 16:00 ET close.</p><p style="text-align: justify;">Those additional bars are structurally invalid for strategies assuming standard session boundaries.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3TdR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3TdR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp 424w, https://substackcdn.com/image/fetch/$s_!3TdR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp 848w, https://substackcdn.com/image/fetch/$s_!3TdR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp 1272w, https://substackcdn.com/image/fetch/$s_!3TdR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3TdR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp" width="1456" height="684" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:68632,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3TdR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp 424w, https://substackcdn.com/image/fetch/$s_!3TdR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp 848w, https://substackcdn.com/image/fetch/$s_!3TdR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp 1272w, https://substackcdn.com/image/fetch/$s_!3TdR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23c0f91d-772a-47be-b623-850dca409bc9_4304x2023.webp 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 style="text-align: justify;">The example above shows the same half-day session across two providers. IBKR correctly terminates the session at the official close, while Alpaca continues emitting bars afterward.</p><p style="text-align: justify;">Unlike many intraday anomalies, early-close leakage is fully deterministic.</p><p style="text-align: justify;">The NYSE calendar is authoritative. A bar either occurs before the official close or it does not.</p><p style="text-align: justify;">Because of that, the correction is clean:</p><ul><li><p>load the official exchange calendar</p></li><li><p>identify early-close sessions</p></li><li><p>remove all bars after the cutoff</p></li></ul><p>No interpolation or reconstruction is required.</p><p style="text-align: justify;">The tool uses the <code>exchange_calendars</code> package to retrieve the official NYSE schedule, including both recurring and one-off early closes.</p><div><hr></div><h2>Phantom Highs and Lows</h2><p style="text-align: justify;">Phantom spikes are isolated intraday extremes that appear in one provider but not others.</p><p style="text-align: justify;">They are typically single-bar events with unusually large wick extensions and weak accompanying volume.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9cmp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9cmp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp 424w, https://substackcdn.com/image/fetch/$s_!9cmp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp 848w, https://substackcdn.com/image/fetch/$s_!9cmp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp 1272w, https://substackcdn.com/image/fetch/$s_!9cmp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9cmp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp" width="1456" height="786" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:786,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40480,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9cmp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp 424w, https://substackcdn.com/image/fetch/$s_!9cmp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp 848w, https://substackcdn.com/image/fetch/$s_!9cmp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp 1272w, https://substackcdn.com/image/fetch/$s_!9cmp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe675da64-5402-4157-95b6-cee21d4e7d40_3824x2065.webp 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 style="text-align: justify;">In the example above, the detected phantom lows occur during otherwise stable intraday price action and leave almost no footprint in volume.</p><p style="text-align: justify;">These anomalies matter because they can directly affect:</p><ul><li><p>breakout systems</p></li><li><p>stop-loss execution</p></li><li><p>ATR calculations</p></li><li><p>volatility estimates</p></li><li><p>intraday signal generation</p></li></ul><p>Even a single phantom wick can materially alter a backtest.</p><h3>Why They Exist</h3><p>U.S. equities trade across fragmented venues:</p><ul><li><p>exchanges</p></li><li><p>ECNs</p></li><li><p>dark pools</p></li><li><p>off-exchange internalizers</p></li></ul><p>Trades may also arrive late to the consolidated tape.</p><p style="text-align: justify;">Different providers apply different filtering and aggregation rules to those prints. Depending on the feed and consolidation logic, isolated highs or lows may appear in one dataset while remaining absent in another.</p><p style="text-align: justify;">This is why phantom spikes are not always simple &#8220;bad ticks.&#8221; In some cases they are legitimate prints that only certain providers preserve.</p><h3>Detection Methodology</h3><p>The detector uses three simultaneous conditions.</p><p>For phantom highs:</p><h4>Condition 1: Body Baseline</h4><p style="text-align: justify;">The upper wick must exceed <code>z_b</code> times the largest candle body observed that day.</p><p style="text-align: justify;">This identifies spikes that are geometrically inconsistent with normal intraday price movement.</p><h4>Condition 2: Wick Baseline</h4><p>The wick must also exceed <code>z_w</code> times the session&#8217;s median upper wick.</p><p>This measures anomaly size relative to the day&#8217;s normal wick behavior.</p><h4>Condition 3: Volume Coherence</h4><p>The associated volume must remain below <code>z_v</code> times the session&#8217;s median volume.</p><p>This is the key coherence filter.</p><p style="text-align: justify;">Large price dislocations typically attract participation. If a bar produces an extreme wick while volume remains unusually weak, the move becomes statistically suspicious.</p><p style="text-align: justify;">All three conditions must trigger simultaneously.</p><p style="text-align: justify;">The first two conditions identify geometric outliers. The third filters out legitimate high-volatility bars that occur on elevated participation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y52o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y52o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Y52o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Y52o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Y52o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y52o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png&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;:579997,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y52o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Y52o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Y52o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Y52o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3086eed4-78f1-4182-a801-f19874ffbdb4_1536x1024.png 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>Default thresholds are:</p><pre><code><code>z_b = 2
z_w = 2
z_v = 5</code></code></pre><h3>Threshold Trade-Offs</h3><p>There is no universally correct threshold configuration.</p><p style="text-align: justify;">Tighter thresholds reduce false positives but miss more anomalies. Looser thresholds capture more suspicious bars at the cost of flagging legitimate volatility.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X9el!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X9el!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png 424w, https://substackcdn.com/image/fetch/$s_!X9el!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png 848w, https://substackcdn.com/image/fetch/$s_!X9el!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png 1272w, https://substackcdn.com/image/fetch/$s_!X9el!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X9el!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png" width="1456" height="1088" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1088,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144264,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X9el!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png 424w, https://substackcdn.com/image/fetch/$s_!X9el!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png 848w, https://substackcdn.com/image/fetch/$s_!X9el!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png 1272w, https://substackcdn.com/image/fetch/$s_!X9el!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4e1deb-d04a-4553-99f5-92ad21af7f54_2373x1773.png 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 style="text-align: justify;">The figure above illustrates the trade-off directly using the same trading session under two parameter configurations.</p><p>The CLI exposes all thresholds as configurable parameters:</p><pre><code><code>--zb
--zw
--zv</code></code></pre><p>In practice, the recommended workflow is:</p><ol><li><p>start with defaults</p></li><li><p>inspect flagged bars manually</p></li><li><p>adjust thresholds based on the acceptable false-positive / false-negative balance</p></li></ol><h3>Phantom Correction Methodology</h3><p style="text-align: justify;">For strategies sensitive to intraday extremes, detected phantom spikes can optionally be reconstructed.</p><p style="text-align: justify;">The correction intentionally avoids predictive modeling.</p><p style="text-align: justify;">Instead, the anomalous wick is replaced with a statistically typical wick for that session.</p><p>The reconstruction rules are:</p><pre><code><code>Phantom high:
new_high = max(open, close) + median_upper_wick

Phantom low:
new_low = min(open, close) - median_lower_wick</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cCTk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cCTk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png 424w, https://substackcdn.com/image/fetch/$s_!cCTk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png 848w, https://substackcdn.com/image/fetch/$s_!cCTk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png 1272w, https://substackcdn.com/image/fetch/$s_!cCTk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cCTk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png" width="1456" height="1078" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1078,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:258862,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cCTk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png 424w, https://substackcdn.com/image/fetch/$s_!cCTk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png 848w, https://substackcdn.com/image/fetch/$s_!cCTk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png 1272w, https://substackcdn.com/image/fetch/$s_!cCTk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1607a9b6-bb8d-465f-8772-71317a4fc84e_3824x2831.png 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 reconstruction preserves:</p><ul><li><p>candle direction</p></li><li><p>candle body</p></li><li><p>session structure</p></li></ul><p>while removing the isolated outlier.</p><p>Importantly, the corrected value is not exchange-reported market data.</p><p style="text-align: justify;">It is a reconstructed estimate and should always remain identifiable within any research workflow.</p><div><hr></div><h2>Stale Bars and Missing Data</h2><p style="text-align: justify;">Stale bars and missing bars are two representations of the same underlying problem: insufficient trading information during a given interval.</p><p style="text-align: justify;">A strong stale bar occurs when:</p><pre><code><code>open = high = low = close</code></code></pre><p style="text-align: justify;">Some providers emit synthetic stale bars when no trade occurs. Others omit the interval entirely, creating gaps in the minute grid.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vp1G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vp1G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png 424w, https://substackcdn.com/image/fetch/$s_!Vp1G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png 848w, https://substackcdn.com/image/fetch/$s_!Vp1G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png 1272w, https://substackcdn.com/image/fetch/$s_!Vp1G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vp1G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png" width="1456" height="1026" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1026,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:376072,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Vp1G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png 424w, https://substackcdn.com/image/fetch/$s_!Vp1G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png 848w, https://substackcdn.com/image/fetch/$s_!Vp1G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png 1272w, https://substackcdn.com/image/fetch/$s_!Vp1G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb69a54c5-e0c4-45a6-972e-5c0f7a033f53_4304x3033.png 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 examples above show identical market halts represented differently across providers:</p><ul><li><p>one emits flat zero-volume stale bars</p></li><li><p>the other emits missing intervals</p></li></ul><p>The underlying market state is identical.</p><p>Only the representation changes.</p><p>This distinction becomes especially important during volatility events and LULD halts.</p><div><hr></div><h3>Detecting Structural Gaps</h3><p>The stale-bar check is straightforward:</p><ul><li><p>identify bars where all OHLC values are identical</p></li></ul><p>Missing bars require interval analysis:</p><ul><li><p>compute elapsed time between consecutive rows</p></li><li><p>flag any gap larger than one minute</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!84F_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!84F_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png 424w, https://substackcdn.com/image/fetch/$s_!84F_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png 848w, https://substackcdn.com/image/fetch/$s_!84F_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png 1272w, https://substackcdn.com/image/fetch/$s_!84F_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!84F_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png" width="1456" height="597" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:597,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105170,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!84F_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png 424w, https://substackcdn.com/image/fetch/$s_!84F_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png 848w, https://substackcdn.com/image/fetch/$s_!84F_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png 1272w, https://substackcdn.com/image/fetch/$s_!84F_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4639710c-dd0f-4e4d-a14d-1a75a240527d_2373x973.png 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 style="text-align: justify;">The tool uses each session&#8217;s observed first and last timestamp as bounds, allowing early-close sessions and overnight gaps to be handled naturally.</p><h3>Why Missing Data Is Never Auto-Filled</h3><p style="text-align: justify;">Unlike phantom spikes, where there is clearly too much anomalous information, stale and missing regions contain too little information.</p><p>Any fill becomes synthetic.</p><p>That introduces a serious asymmetry.</p><p>A fabricated fill can create:</p><ul><li><p>impossible executions</p></li><li><p>synthetic volatility</p></li><li><p>false stop-outs</p></li><li><p>trades that never existed</p></li></ul><p>A backtest that appears tradable but is structurally impossible is significantly more dangerous than a backtest that simply flags unreliable sessions.</p><p style="text-align: justify;">For that reason, the CLI never fills missing bars automatically.</p><p style="text-align: justify;">It reports them.</p><p style="text-align: justify;">It does not invent them.</p><div><hr></div><h2>Example Output</h2><p style="text-align: justify;">The CLI produces a structured terminal report summarizing all integrity checks and anomaly detections.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VR0a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VR0a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png 424w, https://substackcdn.com/image/fetch/$s_!VR0a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png 848w, https://substackcdn.com/image/fetch/$s_!VR0a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png 1272w, https://substackcdn.com/image/fetch/$s_!VR0a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VR0a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png" width="1091" height="935" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:935,&quot;width&quot;:1091,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76838,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/197234663?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VR0a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png 424w, https://substackcdn.com/image/fetch/$s_!VR0a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png 848w, https://substackcdn.com/image/fetch/$s_!VR0a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png 1272w, https://substackcdn.com/image/fetch/$s_!VR0a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde579d69-6240-46e1-99bd-6bf46e7e031a_1091x935.png 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 class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://drive.google.com/file/d/1C3jI9qqwk1SPfNxJBA7VWA8JxtO4yDne/view?usp=sharing&quot;,&quot;text&quot;:&quot;Download concretum_tests&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://drive.google.com/file/d/1C3jI9qqwk1SPfNxJBA7VWA8JxtO4yDne/view?usp=sharing"><span>Download concretum_tests</span></a></p><p>A typical run includes:</p><ul><li><p>schema validation</p></li><li><p>OHLC consistency checks</p></li><li><p>early-close leakage detection</p></li><li><p>phantom event counts</p></li><li><p>stale-bar statistics</p></li><li><p>missing-gap statistics</p></li></ul><p>Corrected datasets can also be generated for:</p><ul><li><p>early-close cleanup</p></li><li><p>phantom reconstruction</p></li></ul><p>Stale and missing intervals are never modified.</p><div><hr></div><h2>Final Thoughts</h2><p>Intraday market data is not a commodity.</p><p>Different providers make different decisions about:</p><ul><li><p>venue inclusion</p></li><li><p>trade consolidation</p></li><li><p>timestamp labeling</p></li><li><p>inactive intervals</p></li><li><p>delayed prints</p></li><li><p>session boundaries</p></li></ul><p style="text-align: justify;">Those decisions propagate directly into backtests.</p><p style="text-align: justify;">As shown throughout this research series, two datasets can both appear valid while still producing materially different strategy outcomes.</p><p style="text-align: justify;">Once these structural issues are identified and controlled, provider divergence narrows significantly.</p><p style="text-align: justify;">But the broader implication remains unchanged:</p><p style="text-align: justify;">Data is not a neutral input.</p><div><hr></div><p><em>If you found this article useful, share it with a friend. Feel free to leave a comment and reach out via direct message or email at <a href="mailto:info@concretumgroup.com">info@concretumgroup.com</a> for any questions.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.com/p/how-to-detect-and-fix-problems-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.substack.com/p/how-to-detect-and-fix-problems-in?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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><p style="text-align: justify;"><strong>Disclaimer</strong><br><em>This publication is provided by Concretum Group for informational, educational, and research purposes only. It does not constitute investment, financial, legal, or tax advice, nor a recommendation to buy or sell any security, instrument, strategy, or investment product. All investments involve risk, including possible loss of principal. Past performance, backtested performance, and historical analysis are not reliable indicators of future results. Readers should conduct their own research and consult qualified professionals before making investment decisions. </em></p><p style="text-align: justify;"><em>Full disclaimer: <a href="https://concretumgroup.com/disclaimer/">https://concretumgroup.com/disclaimer/</a></em></p>]]></content:encoded></item><item><title><![CDATA[How to Build a Futures Database in Python using Norgate Data]]></title><description><![CDATA[A complete pipeline for contract specs, individual contracts, and continuous futures in Python]]></description><link>https://concretumgroup.substack.com/p/how-to-build-a-futures-database-in</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/how-to-build-a-futures-database-in</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Sun, 03 May 2026 09:01:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/97bf133f-b397-4d55-ae0d-e08c6f2293a9_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G3fh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G3fh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp 424w, https://substackcdn.com/image/fetch/$s_!G3fh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp 848w, https://substackcdn.com/image/fetch/$s_!G3fh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp 1272w, https://substackcdn.com/image/fetch/$s_!G3fh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G3fh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24624,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!G3fh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp 424w, https://substackcdn.com/image/fetch/$s_!G3fh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp 848w, https://substackcdn.com/image/fetch/$s_!G3fh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp 1272w, https://substackcdn.com/image/fetch/$s_!G3fh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceca5dc4-1c07-43b8-b832-273e539d6248_1024x576.webp 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 style="text-align: justify;">Quantitative research depends heavily on historical data, and the choice of data source, together with a robust procedure for retrieving and organizing it, is rarely a detail. It is one of the foundations on which every backtest stands or falls.</p><p style="text-align: justify;">In the past, we have written extensively about how to source data for stocks and ETFs, from daily to intraday strategies (see <a href="https://concretumgroup.com/coding/">here</a>). In this article we turn to a different and considerably trickier asset class: <strong>futures contracts</strong>.</p><p style="text-align: justify;">Futures have, for a long time, been the domain of institutional investors. </p><p style="text-align: justify;">In recent years, however, the industry&#8217;s push toward smaller, retail-friendly products has made them increasingly accessible to well-capitalized individual traders.</p><p style="text-align: justify;">The catch, from a data perspective, is that futures behave very differently from cash equities. </p><p style="text-align: justify;">Stocks and ETFs do not expire; futures contracts do, and they do so on a regular cycle. As each contract approaches expiration, positions are rolled into the next active one, and the resulting price discontinuities, analogous to dividend gaps on equities, must be handled carefully when stitching together a continuous historical series.</p><p style="text-align: justify;">Most professional data providers already adjust for these gaps and supply, alongside individual contract histories, a <em>continuous</em> time series in which the first-to-expire contract is systematically replaced by the next active one.</p><p style="text-align: justify;">A usable futures database in Python typically relies on three core datasets: <strong>contract specifications</strong>, <strong>individual contract histories</strong>, and a <strong>continuous series</strong>. </p><p style="text-align: justify;">The challenge is not access. It is structure. </p><p style="text-align: justify;">These datasets follow different conventions and are not aligned by default, which makes it surprisingly easy to combine them incorrectly or to use the wrong prices when running a backtest.</p><p style="text-align: justify;">The data we use here comes from <a href="https://norgatedata.com/">Norgate Data</a>, which offers long historical coverage across more than 100 futures markets, with some contracts going back to the 1980s. </p><p style="text-align: justify;">This article shows how to retrieve those three datasets and organize them into a single, consistent pipeline.</p><h2><strong>What You Will Learn</strong></h2><p style="text-align: justify;">By the end of this article, you will be able to retrieve contract specifications, individual contract data, and continuous futures series from Norgate, and to combine them into a set of Parquet files ready for research and backtesting.</p><p style="text-align: justify;"><em>A practical note before starting: the article walks through the pipeline step by step, and the companion notebook contains the full code. We recommend reading both from a desktop or laptop rather than a mobile device, since some of the code blocks and column-by-column descriptions are easier to follow on a wider screen, and trying the procedure end-to-end naturally requires a Python environment.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://drive.google.com/file/d/133q49bZ11O8nRN0eTqOuvcWk6Kch5cDL/view?usp=sharing&quot;,&quot;text&quot;:&quot;Code: Norgate_Futures_Data_Download&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://drive.google.com/file/d/133q49bZ11O8nRN0eTqOuvcWk6Kch5cDL/view?usp=sharing"><span>Code: Norgate_Futures_Data_Download</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.substack.com/subscribe?"><span>Subscribe now</span></a></p><h2><strong>Futures Database Output Example</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yd_z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yd_z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Yd_z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Yd_z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Yd_z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yd_z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp&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;:98254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Yd_z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Yd_z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Yd_z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Yd_z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe431b95a-9ea0-4ce6-8348-14f0730ebbe3_1536x1024.webp 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><h2><strong>Output Columns</strong></h2><h3><code>01_contract_specs.parquet</code></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PItp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PItp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp 424w, https://substackcdn.com/image/fetch/$s_!PItp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp 848w, https://substackcdn.com/image/fetch/$s_!PItp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp 1272w, https://substackcdn.com/image/fetch/$s_!PItp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PItp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp" width="1432" height="434" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:434,&quot;width&quot;:1432,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:15324,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PItp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp 424w, https://substackcdn.com/image/fetch/$s_!PItp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp 848w, https://substackcdn.com/image/fetch/$s_!PItp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp 1272w, https://substackcdn.com/image/fetch/$s_!PItp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22f94e00-277d-49b0-9d92-8a0f4912e3c1_1432x434.webp 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><ul><li><p><strong>Symbol</strong><br>Norgate continuous futures symbol (e.g. <code>&amp;ES_CCB</code> for E-mini S&amp;P 500 back-adjusted).</p></li><li><p><strong>Name</strong><br>Full security name as provided by Norgate Data.</p></li><li><p><strong>Exchange</strong><br>Exchange where the contract trades (e.g. CME, NYMEX, ICE).</p></li><li><p><strong>Group</strong><br>Broadest Norgate classification (e.g. Currency, Energy, Grains).</p></li><li><p><strong>Contract Size</strong><br>Value of a one-point move in the contract&#8217;s currency.</p></li><li><p><strong>Tick Size</strong><br>Minimum price increment for the contract.</p></li><li><p><strong>Tick Value</strong><br>Value of one tick in the contract&#8217;s currency. Calculated as:<br>Tick Size &#215; Contract Size.</p></li><li><p><strong>Point Value</strong><br>Same as Contract Size.</p></li><li><p><strong>Currency</strong><br>Contract denomination (e.g. USD, GBP, EUR).</p></li><li><p><strong>Margin</strong><br>Exchange margin requirement in the contract&#8217;s currency.</p></li></ul><h3><code>02_individual_contracts_ohlcv.parquet</code></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gtry!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gtry!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp 424w, https://substackcdn.com/image/fetch/$s_!Gtry!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp 848w, https://substackcdn.com/image/fetch/$s_!Gtry!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp 1272w, https://substackcdn.com/image/fetch/$s_!Gtry!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gtry!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp" width="1022" height="345" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:345,&quot;width&quot;:1022,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9012,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gtry!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp 424w, https://substackcdn.com/image/fetch/$s_!Gtry!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp 848w, https://substackcdn.com/image/fetch/$s_!Gtry!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp 1272w, https://substackcdn.com/image/fetch/$s_!Gtry!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77473d08-1378-4990-9dca-44c4ebc1400e_1022x345.webp 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><ul><li><p><strong>Date</strong><br>Trading date.</p></li><li><p><strong>Open, High, Low, Close</strong><br>Price data for the individual contract.</p></li><li><p><strong>Volume</strong><br>Traded volume for this individual contract.</p></li><li><p><strong>Open Interest</strong><br>Open interest for this individual contract.</p></li><li><p><strong>Symbol</strong><br>Individual contract symbol (e.g. <code>ES-2024Z</code> for Dec 2024 E-mini S&amp;P).</p></li></ul><h3><code>03_continuous_adjusted_and_unadjusted.parquet</code></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m3lX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m3lX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp 424w, https://substackcdn.com/image/fetch/$s_!m3lX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp 848w, https://substackcdn.com/image/fetch/$s_!m3lX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp 1272w, https://substackcdn.com/image/fetch/$s_!m3lX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m3lX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp" width="1353" height="415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:415,&quot;width&quot;:1353,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:15244,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m3lX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp 424w, https://substackcdn.com/image/fetch/$s_!m3lX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp 848w, https://substackcdn.com/image/fetch/$s_!m3lX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp 1272w, https://substackcdn.com/image/fetch/$s_!m3lX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41648c93-f6bf-4064-b0fa-32e71060a36c_1353x415.webp 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><ul><li><p><strong>Date</strong><br>Trading date.</p></li><li><p><strong>Open, High, Low, Close</strong><br>Back-adjusted prices, shifted to eliminate gaps at contract rolls.</p></li><li><p><strong>Volume</strong><br>Total volume across all active contracts.</p></li><li><p><strong>Delivery Month</strong><br>Delivery month of the current front-month contract, encoded as <code>YYYYMM</code>.</p></li><li><p><strong>Open Interest</strong><br>Total open interest across all active contracts for this market.</p></li><li><p><strong>Symbol</strong><br>Continuous symbol (e.g. <code>&amp;ES_CCB</code>). The <code>_CCB</code> suffix denotes a back-adjusted series.</p></li><li><p><strong>Close Unadjusted</strong><br>Closing price of the front-month contract (unadjusted).</p></li></ul><h3><code>04_continuous_with_volume_decomposition.parquet</code></h3><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H3_x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H3_x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp 424w, https://substackcdn.com/image/fetch/$s_!H3_x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp 848w, https://substackcdn.com/image/fetch/$s_!H3_x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp 1272w, https://substackcdn.com/image/fetch/$s_!H3_x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H3_x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp" width="1239" height="289" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:289,&quot;width&quot;:1239,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:12346,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H3_x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp 424w, https://substackcdn.com/image/fetch/$s_!H3_x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp 848w, https://substackcdn.com/image/fetch/$s_!H3_x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp 1272w, https://substackcdn.com/image/fetch/$s_!H3_x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a3582e-1805-48a5-ba0e-3f27423c52d8_1239x289.webp 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ul><li><p><strong>(All columns from 03)</strong><br>Same structure as the back-adjusted series</p></li><li><p><strong>FirstVolume</strong><br>Volume of the first-to-expire (front-month) contract.</p></li><li><p><strong>FirstContract</strong><br>Symbol of the first-to-expire contract (e.g. <code>ES-2025M</code>).</p></li><li><p><strong>SecondVolume</strong><br>Volume of the second-to-expire contract.</p></li><li><p><strong>SecondContract</strong><br>Symbol of the second-to-expire contract (e.g. <code>ES-2025U</code>).</p></li></ul><h2><strong>Download &amp; Run the Code</strong></h2><p>The full pipeline is provided as a single Jupyter notebook.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FEl2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FEl2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp 424w, https://substackcdn.com/image/fetch/$s_!FEl2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp 848w, https://substackcdn.com/image/fetch/$s_!FEl2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp 1272w, https://substackcdn.com/image/fetch/$s_!FEl2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FEl2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:71488,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FEl2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp 424w, https://substackcdn.com/image/fetch/$s_!FEl2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp 848w, https://substackcdn.com/image/fetch/$s_!FEl2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp 1272w, https://substackcdn.com/image/fetch/$s_!FEl2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F706d5d27-2947-4449-b5dc-62561779be3e_1774x887.webp 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><h3><strong>Quick Setup</strong></h3><h4><strong>1. Start Norgate Data</strong></h4><p style="text-align: justify;">Open the Norgate Data Updater and keep it running in the background. This application provides the connection required for the Python API, so the code will not run unless it is active.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IEdO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IEdO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp 424w, https://substackcdn.com/image/fetch/$s_!IEdO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp 848w, https://substackcdn.com/image/fetch/$s_!IEdO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp 1272w, https://substackcdn.com/image/fetch/$s_!IEdO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IEdO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp" width="645" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:645,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17478,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IEdO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp 424w, https://substackcdn.com/image/fetch/$s_!IEdO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp 848w, https://substackcdn.com/image/fetch/$s_!IEdO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp 1272w, https://substackcdn.com/image/fetch/$s_!IEdO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d7b8a03-8883-4f16-8ee3-4a8e25c9e206_645x550.webp 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><figcaption class="image-caption">Note: Currently, Norgate Data only supports Python on Windows, as stated in their documentation.</figcaption></figure></div><h4><strong>2. Enable Required Databases</strong></h4><p style="text-align: justify;">Inside the Norgate Data Updater, navigate to the Database section and ensure that both the Futures and Continuous Futures databases are fully active.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JSwE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JSwE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp 424w, https://substackcdn.com/image/fetch/$s_!JSwE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp 848w, https://substackcdn.com/image/fetch/$s_!JSwE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp 1272w, https://substackcdn.com/image/fetch/$s_!JSwE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JSwE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp" width="1071" height="701" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:701,&quot;width&quot;:1071,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162618,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JSwE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp 424w, https://substackcdn.com/image/fetch/$s_!JSwE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp 848w, https://substackcdn.com/image/fetch/$s_!JSwE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp 1272w, https://substackcdn.com/image/fetch/$s_!JSwE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73a19558-605b-439e-846b-339b7fe573cf_1071x701.webp 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 style="text-align: justify;">The Futures database contains all individual contracts, including expired ones, while Continuous Futures provides the stitched front-month and back-adjusted series. If either is missing, select it, download it, and wait until it is fully available before proceeding.</p><h4><strong>3. Run the Notebook</strong></h4><p style="text-align: justify;">After adjusting the configuration in the first cell (such as date range or output settings), run the entire notebook. In Jupyter, this can be done using the <strong>&#8220;Run All&#8221;</strong> option.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SMU1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SMU1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp 424w, https://substackcdn.com/image/fetch/$s_!SMU1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp 848w, https://substackcdn.com/image/fetch/$s_!SMU1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp 1272w, https://substackcdn.com/image/fetch/$s_!SMU1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SMU1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp" width="1456" height="644" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89646421-c670-4c78-8096-e0e213988323_1740x770.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:644,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:29834,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SMU1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp 424w, https://substackcdn.com/image/fetch/$s_!SMU1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp 848w, https://substackcdn.com/image/fetch/$s_!SMU1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp 1272w, https://substackcdn.com/image/fetch/$s_!SMU1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89646421-c670-4c78-8096-e0e213988323_1740x770.webp 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 style="text-align: justify;">The notebook will download the data, process it, and generate the four Parquet files automatically in the output folder.</p><h3><strong>How the Workflow Operates</strong></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cSJk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cSJk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!cSJk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!cSJk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!cSJk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cSJk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp&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;:89608,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cSJk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!cSJk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!cSJk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!cSJk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91110664-3e6b-4e8b-97de-3aca18d7c51b_1536x1024.webp 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><figcaption class="image-caption"></figcaption></figure></div><h4><strong>1. Contract Specifications</strong></h4><p style="text-align: justify;">The workflow begins by retrieving contract metadata such as tick size, point value, margin, and currency for each market. This provides the foundation needed for sizing and risk calculations.</p><h4><strong>2. Individual Contracts</strong></h4><p style="text-align: justify;">All individual futures contracts are then downloaded. Each contract is queried once to obtain the full OHLCV series with open interest.<strong> </strong>These are merged into a single dataset.</p><h4><strong>3. Continuous Futures</strong></h4><p style="text-align: justify;">Continuous futures series are constructed by combining back-adjusted prices with the corresponding unadjusted front-month data. This produces a dataset where adjusted prices can be used for signal generation, while real prices are preserved for accurate sizing calculations.</p><p style="text-align: justify;">The merge strips the <code>_CCB</code> suffix to create a <code>BaseSymbol</code>, then joins on <code>Date</code> + <code>BaseSymbol</code> so each adjusted row picks up the unadjusted Close and Volume from its non-<code>_CCB</code> counterpart.</p><h4><strong>4. Volume Decomposition</strong></h4><p style="text-align: justify;">The final step enriches the continuous series with volume information drawn from the two contracts closest to expiry. </p><p style="text-align: justify;">We flag this as a separate stage because of a subtlety in how Norgate exposes volume on its continuous contracts. In our experience, the volume column attached to a Norgate continuous series does not correspond to the front-month contract whose price is currently driving the series. It reports, instead, the sum of volume traded across the entire term structure for that market on that date, that is, the aggregate of all active contracts rather than the one effectively quoted by the continuous price.</p><p style="text-align: justify;">The rationale behind this design choice is not clear but it is worth knowing about: a user pulling volume off a continuous series and assuming it reflects the front-month is, in fact, looking at curve-wide activity. For most analytical purposes (open interest concentration, roll dynamics, liquidity at the front of the curve) this is not what one wants.</p><p style="text-align: justify;">To recover the more granular picture, our pipeline reconstructs front-month and second-month volumes separately for each date. It parses individual contract symbols into base code and expiry, builds a per-commodity map of contracts sorted by expiration, and then matches each date in the continuous series to the two nearest active contracts, recording their volumes alongside the continuous price.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!toIB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!toIB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp 424w, https://substackcdn.com/image/fetch/$s_!toIB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp 848w, https://substackcdn.com/image/fetch/$s_!toIB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp 1272w, https://substackcdn.com/image/fetch/$s_!toIB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!toIB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95604,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/196017819?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!toIB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp 424w, https://substackcdn.com/image/fetch/$s_!toIB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp 848w, https://substackcdn.com/image/fetch/$s_!toIB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp 1272w, https://substackcdn.com/image/fetch/$s_!toIB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb62f07e-c0ed-4340-ba3b-fb8d4f705a2d_1024x1536.webp 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><h2><strong>Conclusion</strong></h2><p style="text-align: justify;">A futures database is, in many ways, plumbing. It does not generate alpha on its own, and yet every backtest, every signal, every sizing decision sits on top of it. In our experience, the most stubborn bugs in systematic research rarely come from the strategy logic. They come from quiet inconsistencies in the data layer: a misaligned roll date, an unadjusted price used where an adjusted one was expected, a volume column that means something different from what one assumed.</p><p style="text-align: justify;">The four-file structure presented here is the layout we have converged on after using Norgate across several research projects. Contract specifications anchor sizing and margin calculations. Individual contract histories preserve the full term structure whenever an analysis requires it. The continuous series, by carrying adjusted and unadjusted prices on the same row, lets signal generation and execution coexist without ambiguity. The volume decomposition layer, finally, bridges the continuous series back to its underlying contracts, which matters for any work touching liquidity, rolls, or carry.</p><p style="text-align: justify;">The pipeline is intentionally simple, and that simplicity is the point. Once the data layer is solid and reproducible, the interesting part, the research itself, can finally begin.</p><p style="text-align: justify;">We are aware that there is no single correct way to organize a futures database, and the structure that works best depends on the kind of research one runs on top of it. If your setup looks different, or if you have run into edge cases we have not, we would love to hear about it.</p><div><hr></div><p style="text-align: justify;">If you are looking for similar pipelines on other asset classes, our website has a dedicated <a href="https://concretumgroup.com/coding/">coding section</a> where we share the procedures we use to download stock data from various providers, both at daily and intraday frequency. Futures are the latest addition to that toolkit, and more will follow.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/coding/&quot;,&quot;text&quot;:&quot;Concretum Coding&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/coding/"><span>Concretum Coding</span></a></p><div><hr></div><p style="text-align: justify;"><em>If you found this article useful, feel free to share it with a colleague or a friend who works with futures data, or reach out at <a href="mailto:info@concretumgroup.com">info@concretumgroup.com</a> for questions.</em> </p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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><p style="text-align: justify;"><strong>Disclaimer</strong><br><em>This publication is provided by Concretum Group for informational, educational, and research purposes only. It does not constitute investment, financial, legal, or tax advice, nor a recommendation to buy or sell any security, instrument, strategy, or investment product. All investments involve risk, including possible loss of principal. Past performance, backtested performance, and historical analysis are not reliable indicators of future results. Readers should conduct their own research and consult qualified professionals before making investment decisions. </em></p><p style="text-align: justify;"><em>Full disclaimer: <a href="https://concretumgroup.com/disclaimer/">https://concretumgroup.com/disclaimer/</a></em></p>]]></content:encoded></item><item><title><![CDATA[How to Backtest a ORB Strategy in Python Using Alpaca (10+ Years of Free Data)]]></title><description><![CDATA[A fully reproducible intraday backtest using free SIP data. No paid subscriptions. No setup.]]></description><link>https://concretumgroup.substack.com/p/how-to-backtest-a-orb-strategy-in</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/how-to-backtest-a-orb-strategy-in</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Sat, 25 Apr 2026 08:05:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6698a80b-bbd0-4b05-b438-d2b8f1b81b0c_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HuQg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HuQg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!HuQg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!HuQg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!HuQg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HuQg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png&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;:936867,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/195368779?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HuQg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!HuQg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!HuQg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!HuQg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03aaeb3-8344-4cbd-ab0a-450e0f7defab_1536x1024.png 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><h2>Introduction</h2><p style="text-align: justify;">This article shows how to run an Opening Range Breakout (ORB) strategy backtest in Python using Alpaca, with more than 10 years of intraday data.<br><br>In a <a href="https://concretumgroup.com/backtesting-the-opening-range-breakout-orb-strategy-using-polygon-io/">previous article</a>, we implemented the ORB strategy from <em><a href="https://concretumgroup.com/can-day-trading-really-be-profitable/">Can Day Trading Really Be Profitable? (Zarattini &amp; Aziz, 2023)</a></em> using Massive (previously Polygon.io). The main limitation was data coverage. The free tier only provides two years of history, which restricts meaningful testing.<br><br>While extending this, we found something unexpected. The same strategy, with identical code and parameters, produced materially different results across data providers.<br><br>We investigated this separately:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/backtesting-data-quality-can-your-data-provider-be-trusted/&quot;,&quot;text&quot;:&quot;&#8594; Can Your Data Provider Be Trusted?&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/backtesting-data-quality-can-your-data-provider-be-trusted/"><span>&#8594; Can Your Data Provider Be Trusted?</span></a></p><p style="text-align: justify;">This article delivers on the original goal: a reproducible backtest using long-horizon intraday data, with access to SIP-quality data where required.</p><div><hr></div><h2>How to Run It Yourself</h2><p style="text-align: justify;">Running the backtest requires only a free API key and a browser.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tYLn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tYLn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp 424w, https://substackcdn.com/image/fetch/$s_!tYLn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp 848w, https://substackcdn.com/image/fetch/$s_!tYLn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp 1272w, https://substackcdn.com/image/fetch/$s_!tYLn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tYLn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp" width="1456" height="647" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:647,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57516,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/195368779?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!tYLn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp 424w, https://substackcdn.com/image/fetch/$s_!tYLn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp 848w, https://substackcdn.com/image/fetch/$s_!tYLn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp 1272w, https://substackcdn.com/image/fetch/$s_!tYLn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe92860c0-3560-4e83-a3ef-54f2596d7c52_1881x836.webp 1456w" sizes="100vw"></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>These are the only three steps required:</p><ol><li><p>Create a free <a href="http://alpaca.markets">Alpaca</a> account and generate your API keys (paper trading keys work) </p></li><li><p>Open the notebook in <a href="https://colab.research.google.com/drive/1OpAfxEMCTG_ZxmFL3nqr0u5hF_ZaSp3Q?usp=sharing">Google Colab</a> and paste your keys into the setup section </p></li><li><p>Click Run All</p></li></ol><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.com/publish/post/195368779?back=%2Fpublish%2Fposts%2Fdrafts&quot;,&quot;text&quot;:&quot;Open Notebook (10Y Free Data)&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.substack.com/publish/post/195368779?back=%2Fpublish%2Fposts%2Fdrafts"><span>Open Notebook (10Y Free Data)</span></a></p><p style="text-align: justify;">Data downloads in a few minutes and is cached. The full backtest runs in under a minute.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://concretumgroup.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Why Alpaca?</h2><p style="text-align: justify;">Alpaca provides long-horizon intraday data with a simple and developer-friendly infrastructure.</p><p style="text-align: justify;">The free plan offers up to ~10 years of historical intraday data at 1-minute frequency, making it particularly attractive for rapid research and prototyping. However, this data is based on the IEX feed (a single-venue source) and therefore does not represent the full consolidated market.</p><p style="text-align: justify;">For full market coverage, Alpaca also provides access to consolidated SIP data (CTA and UTP) through its paid plans, enabling NBBO-based aggregation across venues when higher data fidelity is required.</p><p style="text-align: justify;">The data pipeline is straightforward. Daily bars can be requested fully adjusted for splits and dividends, while intraday bars remain unadjusted. This avoids the need for a separate adjustment process and keeps the implementation consistent with how trades would actually occur.</p><p style="text-align: justify;">Access is available through a standard REST API, and the rate limits are sufficient to download large historical datasets in a relatively short time.</p><div><hr></div><h2>What Changed from the Previous Version</h2><p>Relative to the Massive-based implementation:</p><ul><li><p>Historical coverage extends to <strong>10+ years (since 2016)</strong></p></li><li><p>Dividend adjustments are <strong>handled natively</strong></p></li><li><p>The backtest spans a full market cycle instead of a short window</p></li><li><p>Stop logic includes both <strong>H/L and ATR-based methods</strong></p></li></ul><p>The strategy itself is unchanged. Only the data handling and implementation details differ.</p><div><hr></div><h2>ORB Strategy Logic</h2><p>The Opening Range Breakout strategy follows a simple structure:</p><ul><li><p>Use the first 5 minutes to determine direction</p></li><li><p>Enter at the open of the 6th bar</p></li><li><p>Apply either an H/L-based or ATR-based stop</p></li><li><p>Hold until stop or market close</p></li><li><p>Size positions to risk <strong>1% of equity</strong>, capped at <strong>4x leverage</strong></p></li></ul><div><hr></div><h2>Strategy Parameters</h2><p>All parameters are fully configurable in the notebook and can be adjusted to test different setups:</p><ul><li><p>Opening range: <strong>5 minutes</strong></p></li><li><p>H/L stop: <strong>range high/low</strong></p></li><li><p>ATR stop: <strong>5% of 14-day ATR</strong></p></li><li><p>Profit target (H/L mode): <strong>10R</strong></p></li><li><p>Profit target (ATR mode): <strong>none (hold to close)</strong></p></li><li><p>Risk per trade: <strong>1% of equity</strong></p></li><li><p>Max leverage: <strong>4x</strong></p></li><li><p>Starting capital: <strong>$25,000</strong></p></li><li><p>Commission/Slippage: <strong>$0.0035 per share per side</strong></p></li></ul><div><hr></div><h2>Walkthrough of the Notebook</h2><p>The notebook runs the full pipeline from data download to performance analysis. You only need to configure it once.</p><div><hr></div><h3>Section 1: Setup &amp; Configuration</h3><p>This is the only section you edit:</p><pre><code>API_KEY_ID     = os.environ.get("ALPACA_API_KEY_ID", "")
API_SECRET_KEY = os.environ.get("ALPACA_API_SECRET_KEY", "")
TICKER         = "TQQQ"
START_DATE     = "2016-01-01"
END_DATE       = "2026-04-20"</code></pre><p>Everything else runs automatically.</p><div><hr></div><h3>Section 2: Data Download</h3><p>The notebook pulls two datasets from Alpaca:</p><ul><li><p><strong>Intraday data</strong><br>1-minute OHLCV bars, unadjusted, filtered to regular trading hours</p></li><li><p><strong>Daily data</strong><br>Fully adjusted OHLC data, used for ATR calculations</p></li></ul><p>On the first run, both datasets are saved locally as CSV files.</p><p>Subsequent runs load from cache, so you do not re-download data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R8vW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R8vW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp 424w, https://substackcdn.com/image/fetch/$s_!R8vW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp 848w, https://substackcdn.com/image/fetch/$s_!R8vW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp 1272w, https://substackcdn.com/image/fetch/$s_!R8vW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R8vW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30488,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/195368779?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R8vW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp 424w, https://substackcdn.com/image/fetch/$s_!R8vW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp 848w, https://substackcdn.com/image/fetch/$s_!R8vW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp 1272w, https://substackcdn.com/image/fetch/$s_!R8vW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd691d451-19b1-4442-87b7-8e0d467917b4_1693x929.webp 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><h3>Section 3: Load Data and Compute ATR</h3><p>Daily data is used to compute <strong>ATR%</strong> (14-day ATR &#247; daily open, lagged by one day).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-LVw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-LVw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp 424w, https://substackcdn.com/image/fetch/$s_!-LVw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp 848w, https://substackcdn.com/image/fetch/$s_!-LVw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp 1272w, https://substackcdn.com/image/fetch/$s_!-LVw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-LVw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33534,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/195368779?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-LVw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp 424w, https://substackcdn.com/image/fetch/$s_!-LVw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp 848w, https://substackcdn.com/image/fetch/$s_!-LVw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp 1272w, https://substackcdn.com/image/fetch/$s_!-LVw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93e2945c-3989-4144-a31d-7755bfd0d946_1774x887.webp 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 style="text-align: justify;">This gives a normalized volatility measure that is not affected by splits or dividends.</p><p style="text-align: justify;">At trade time, the ratio is converted back into dollar terms using the current intraday open.</p><p style="text-align: justify;">The stop distance is then computed as:</p><pre><code>stop width = stop_atr &#215; ATR% &#215; (intraday open / entry)</code></pre><p style="text-align: justify;">This keeps the stop consistent with current price levels while preserving the stability of adjusted data.</p><p style="text-align: justify;">Compared to the previous implementation, this removes the need for manual dividend adjustments and keeps the pipeline cleaner.</p><div><hr></div><h3>Section 4: Filter Early-Close Days</h3><p style="text-align: justify;">Half-days (e.g. Black Friday, Christmas Eve) are filtered using <strong><a href="https://github.com/gerrymanoim/exchange_calendars">exchange_calendars</a></strong>.</p><p style="text-align: justify;">Some datasets include post-close bars. If not removed, these can introduce invalid trades.</p><p style="text-align: justify;"><strong>Data Quality Note</strong><br>Early-close leakage can distort results and is a common source of inconsistency across providers.</p><div><hr></div><h3>Section 5 and 6. Backtest Engine</h3><p>The strategy runs day by day:</p><ul><li><p>Determine direction from the opening range</p></li><li><p>Enter at the open of the 6th bar</p></li><li><p>Compute stop (H/L or ATR) and position size</p></li><li><p>Walk forward through intraday data to detect exits</p></li><li><p>Close at stop, gap, or end of day</p></li><li><p>Update equity</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UqIw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UqIw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp 424w, https://substackcdn.com/image/fetch/$s_!UqIw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp 848w, https://substackcdn.com/image/fetch/$s_!UqIw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp 1272w, https://substackcdn.com/image/fetch/$s_!UqIw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UqIw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42224,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/195368779?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UqIw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp 424w, https://substackcdn.com/image/fetch/$s_!UqIw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp 848w, https://substackcdn.com/image/fetch/$s_!UqIw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp 1272w, https://substackcdn.com/image/fetch/$s_!UqIw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373eb61d-8d0c-4368-85dd-6009a06a9000_1774x887.webp 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>Both stop modes are run separately for comparison.</p><div><hr></div><h3>Section 7: Performance Analysis</h3><p>The notebook outputs:</p><ul><li><p>Summary metrics (CAGR, volatility, Sharpe, drawdown, hit rate)</p></li><li><p>Monthly return heatmap</p></li><li><p>Log-scale equity curve with out-of-sample period highlighted</p></li></ul><div><hr></div><h3>Section 8 and 9: Run and Results</h3><p>Results are displayed for both H/L and ATR modes under identical conditions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m_fj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m_fj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png 424w, https://substackcdn.com/image/fetch/$s_!m_fj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png 848w, https://substackcdn.com/image/fetch/$s_!m_fj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png 1272w, https://substackcdn.com/image/fetch/$s_!m_fj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m_fj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png" width="1189" height="690" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:690,&quot;width&quot;:1189,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:87361,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/195368779?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m_fj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png 424w, https://substackcdn.com/image/fetch/$s_!m_fj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png 848w, https://substackcdn.com/image/fetch/$s_!m_fj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png 1272w, https://substackcdn.com/image/fetch/$s_!m_fj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7985163e-2f5f-42e3-86f0-fd8df6f29e0e_1189x690.png 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 style="text-align: justify;">The out-of-sample period begins after February 17, 2023, allowing direct evaluation beyond the original study window.</p><div><hr></div><h2>Conclusion</h2><p style="text-align: justify;">This implementation extends the original Massive-based backtest with a longer data history, a cleaner data pipeline, and a complete ATR-based stop.</p><p style="text-align: justify;">The code is fully reproducible. Modify the parameters, change the ticker, and test it yourself.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://colab.research.google.com/drive/1OpAfxEMCTG_ZxmFL3nqr0u5hF_ZaSp3Q?usp=sharing&quot;,&quot;text&quot;:&quot;&#8594; Full Code: Google Colab Notebook&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://colab.research.google.com/drive/1OpAfxEMCTG_ZxmFL3nqr0u5hF_ZaSp3Q?usp=sharing"><span>&#8594; Full Code: Google Colab Notebook</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p><em>If you found this article useful, feel free to leave a comment or reach out via direct message or email at <a href="mailto:info@concretumgroup.com">info@concretumgroup.com</a> for any questions.</em></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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><p><em><strong>Scope and limitations</strong></em></p><p style="text-align: justify;"><em>This study evaluates the ORB strategy under a specific set of assumptions, instruments, and market conditions. Results are not universal and depend on data quality, execution assumptions, and implementation details. Small changes in these inputs can lead to materially different outcomes. Independent validation is recommended.</em></p><p style="text-align: justify;"><em>Note: intraday results may be sensitive to the underlying data source. The free dataset used here is based on IEX and may differ from consolidated SIP data, particularly for strategies relying on intraday highs, lows, or volume.</em></p><p style="text-align: justify;"><em><strong>Disclosure</strong></em></p><p style="text-align: justify;"><em>This analysis is conducted independently for research and educational purposes. We are not affiliated with, sponsored by, or compensated by any data provider referenced in this study.</em></p><div><hr></div><p style="text-align: justify;"><strong>Disclaimer</strong><br><em>This publication is provided by Concretum Group for informational, educational, and research purposes only. It does not constitute investment, financial, legal, or tax advice, nor a recommendation to buy or sell any security, instrument, strategy, or investment product. All investments involve risk, including possible loss of principal. Past performance, backtested performance, and historical analysis are not reliable indicators of future results. Readers should conduct their own research and consult qualified professionals before making investment decisions. </em></p><p style="text-align: justify;"><em>Full disclaimer: <a href="https://concretumgroup.com/disclaimer/">https://concretumgroup.com/disclaimer/</a></em></p>]]></content:encoded></item><item><title><![CDATA[How to Download 10 Years of Free Crypto Intraday Data from Kraken]]></title><description><![CDATA[Good crypto research starts with data that is long enough, clean enough, and detailed enough to support serious testing.]]></description><link>https://concretumgroup.substack.com/p/how-to-access-a-decade-of-free-crypto</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/how-to-access-a-decade-of-free-crypto</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Mon, 26 Jan 2026 15:33:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6390db26-9e3f-4ae8-adc4-d4d6f872ba4e_1024x576.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">Good crypto research starts with data that is long enough, clean enough, and detailed enough to support serious testing. </p><p style="text-align: justify;"><strong>Kraken&#8217;s public archive is one of the few free sources that gets surprisingly close to that standard</strong>, with intraday data stretching back to 2013 across a wide range of trading pairs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7km5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7km5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png 424w, https://substackcdn.com/image/fetch/$s_!7km5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png 848w, https://substackcdn.com/image/fetch/$s_!7km5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png 1272w, https://substackcdn.com/image/fetch/$s_!7km5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7km5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png" width="250" height="250" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:250,&quot;width&quot;:250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:13003,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/193687263?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7km5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png 424w, https://substackcdn.com/image/fetch/$s_!7km5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png 848w, https://substackcdn.com/image/fetch/$s_!7km5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png 1272w, https://substackcdn.com/image/fetch/$s_!7km5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4517fb6-36e0-4884-9705-57219d4dfa21_250x250.png 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><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">At Concretum, we have made a significant effort to make this entire process transparent and reproducible by sharing it publicly.</p><p>In this piece, we walk through how to transform Kraken&#8217;s raw archive files into a single research-ready dataset, how to validate the output against an independent exchange, and where the resulting database proves genuinely useful in practice.</p><h2>What you&#8217;ll need</h2><p style="text-align: justify;">From a practical standpoint, you will need access to <strong>Kraken&#8217;s public archive files</strong>, Python to run the consolidation and validation scripts, and sufficient local storage to handle several large compressed downloads.</p><p>Because some of the source files are multiple gigabytes in size, the initial download step is handled manually rather than through a fully automated pipeline.</p><div><hr></div><p style="text-align: center;"><code>The full technical guide, including the scripts and implementation notes, is available on our website</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/how-to-get-free-full-crypto-intraday-data-2013-2025-from-kraken/&quot;,&quot;text&quot;:&quot;Access Full Code&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/how-to-get-free-full-crypto-intraday-data-2013-2025-from-kraken/"><span>Access Full Code</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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[Constructing a Daily 15:45 OHLCV Database for End-of-Day Robust Backtesting]]></title><description><![CDATA[Building a Precise Backtesting Database]]></description><link>https://concretumgroup.substack.com/p/daily-and-near-close-intraday-data</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/daily-and-near-close-intraday-data</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Sun, 28 Dec 2025 16:18:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3ccb949c-ea30-4dd0-95c7-fc209dbfa7a2_1024x576.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">Drawing upon our latest article <em><a href="https://concretumgroup.com/when-execution-delays-erode-short-term-alpha/">When Execution Delays Erode Short-Term Alpha</a></em>, we decided to share a free Python procedure for building a <strong>unified stock database </strong>that supports both total-return analysis and <strong>near-close execution testing</strong>. </p><p style="text-align: justify;">This makes it possible to evaluate how much alpha survives when signals are formed shortly before the close and executed via Market on Close orders, versus the more <strong>common workflow of computing signals at the close and executing at the next morning&#8217;s open.</strong></p><div><hr></div><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">The focus here is building a database that combines both standard daily market data with a <strong>near-close intraday snapshot at 15:45 Eastern Time</strong>. The objective is to have data to test strategies in a way that better reflects how realistic execution-flows work in practice, while also keeping return calculations internally consistent.</p><h2>What you&#8217;ll need</h2><p style="text-align: justify;">To build it properly, you need a Python environment and a data source that can supply unadjusted daily prices, split-adjusted closes, dividend records, and 15-minute intraday bars. For this implementation, we use <strong>Massive (formerly Polygon Data).</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wCJS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wCJS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wCJS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wCJS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wCJS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wCJS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg" width="367" height="137" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/554614bd-3444-4736-9107-4caef617949d_367x137.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:137,&quot;width&quot;:367,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Blog | Massive&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Blog | Massive" title="Blog | Massive" srcset="https://substackcdn.com/image/fetch/$s_!wCJS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wCJS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wCJS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wCJS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F554614bd-3444-4736-9107-4caef617949d_367x137.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div><hr></div><p style="text-align: center;"><code>The full technical guide and accompanying Google Colab notebook are available on our website.</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/daily-1545-ohlcv-database-for-reliable-backtesting/&quot;,&quot;text&quot;:&quot;Access Full Code&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://concretumgroup.com/daily-1545-ohlcv-database-for-reliable-backtesting/"><span>Access Full Code</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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[How to Build a Point-in-Time Index Membership Database]]></title><description><![CDATA[How to Build a Point-in-Time Index Membership Database]]></description><link>https://concretumgroup.substack.com/p/reconstructing-the-past</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/reconstructing-the-past</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Wed, 17 Dec 2025 16:28:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b40581cd-6335-42c1-ab42-4f7cf3b41b7a_1024x576.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">Using today&#8217;s index constituents to represent yesterday&#8217;s market is a <strong>guaranteed way to introduce survivorship bias into a backtesting procedure</strong>. </p><p style="text-align: justify;">The names that appear in a major index today are, almost by definition, <strong>the ones that survived.</strong> Firms that failed, shrank, merged, or were delisted along the way disappear from view entirely, and <strong>their absence makes historical tests look better than the real opportunity set ever was.</strong></p><div><hr></div><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">Our coding guide walks through how to <strong>reconstruct historical index membership </strong>in Python using <strong>Norgate Data</strong>, so that on any given date we can know with precision which stocks were actually part of an index and which were not. Our procedure also accounts for <strong>stocks that leave and later re-enter an index</strong>, an important detail for anyone planning to use the output for long-term backtests.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EoA6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EoA6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png 424w, https://substackcdn.com/image/fetch/$s_!EoA6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png 848w, https://substackcdn.com/image/fetch/$s_!EoA6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png 1272w, https://substackcdn.com/image/fetch/$s_!EoA6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EoA6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png" width="170" height="170" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:170,&quot;width&quot;:170,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Norgate Data (@NorgateData) &#8226; Facebook&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Norgate Data (@NorgateData) &#8226; Facebook" title="Norgate Data (@NorgateData) &#8226; Facebook" srcset="https://substackcdn.com/image/fetch/$s_!EoA6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png 424w, https://substackcdn.com/image/fetch/$s_!EoA6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png 848w, https://substackcdn.com/image/fetch/$s_!EoA6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png 1272w, https://substackcdn.com/image/fetch/$s_!EoA6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a5740bd-3157-4c94-b072-cc85b105979b_170x170.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h2>What you&#8217;ll need</h2><p style="text-align: justify;">To reproduce the process, you need Norgate Data set up with access to both active and delisted equities, together with Python and enough patience to process a full symbol universe across one or more indices. <strong>The whole workflow relies on dynamic point-in-time constituency data.</strong></p><div><hr></div><p style="text-align: center;"><code>The full technical guide and accompanying Google Colab notebook are available on our website.</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/historical-constituents-of-an-equity-index-in-python-norgate-data/&quot;,&quot;text&quot;:&quot;Access Full Code&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/historical-constituents-of-an-equity-index-in-python-norgate-data/"><span>Access Full Code</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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[Building a Survivorship-Bias-Free Cryptocurrency Dataset]]></title><description><![CDATA[Full Code Procedure]]></description><link>https://concretumgroup.substack.com/p/building-a-survivorship-bias-free</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/building-a-survivorship-bias-free</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Thu, 17 Apr 2025 15:41:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/413aabdb-1c9c-43e7-b988-b65023e48a35_1024x576.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">Crypto datasets often look cleaner than the market they are supposed to describe. </p><p style="text-align: justify;">The reason is straightforward: <strong>many failed projects disappear from standard data feed</strong>s, while the surviving assets remain easy to query: the result is a historical sample that quietly <strong>excludes many of the crypto market&#8217;s most unsuccessful stories&#8230;</strong></p><div><hr></div><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">Our article explains how to build a cryptocurrency database (using data from <strong>CoinMarketCap) </strong>that includes both successful projects and the large universe of tokens that have become mostly inactive, failed, or were delisted. </p><p style="text-align: justify;">On top of that, it also covers how to <strong>enrich OHLCV with metadata</strong> so that the final output can also be analyzed by category if needed.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QD86!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QD86!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png 424w, https://substackcdn.com/image/fetch/$s_!QD86!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png 848w, https://substackcdn.com/image/fetch/$s_!QD86!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png 1272w, https://substackcdn.com/image/fetch/$s_!QD86!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QD86!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png" width="317" height="78" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:78,&quot;width&quot;:317,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11664,&quot;alt&quot;:&quot;CoinMarketCap Logo PNG Vector (SVG) Free Download&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="CoinMarketCap Logo PNG Vector (SVG) Free Download" title="CoinMarketCap Logo PNG Vector (SVG) Free Download" srcset="https://substackcdn.com/image/fetch/$s_!QD86!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png 424w, https://substackcdn.com/image/fetch/$s_!QD86!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png 848w, https://substackcdn.com/image/fetch/$s_!QD86!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png 1272w, https://substackcdn.com/image/fetch/$s_!QD86!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4179b792-45e9-4956-abc8-92b8fea8e378_317x78.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h2>What you&#8217;ll need</h2><p style="text-align: justify;">To do this at full scale, you need access to the <strong>CoinMarketCap API</strong>, Python for data collection and batching, and <strong>enough runtime to process a very large universe of identifiers</strong>. The full build is not a quick scrape: it is a long-running collection job that has to <strong>respect API limits</strong> and save progress as it goes.</p><p style="text-align: justify;">While the process is undeniably time-consuming, it is an indispensable step for anyone aiming to conduct proper, unbiased backtesting in the crypto space.</p><div><hr></div><p style="text-align: center;"><code>The full methodology, sample notebooks, and Google Colab resources are available on our website.</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/building-a-survivorship-bias-free-crypto-dataset-with-coinmarketcap-api/&quot;,&quot;text&quot;:&quot;Access Full Code&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://concretumgroup.com/building-a-survivorship-bias-free-crypto-dataset-with-coinmarketcap-api/"><span>Access Full Code</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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[Backtesting the Opening Range Breakout ]]></title><description><![CDATA[Complete Procedure with Code]]></description><link>https://concretumgroup.substack.com/p/backtesting-the-opening-range-breakout</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/backtesting-the-opening-range-breakout</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Tue, 11 Mar 2025 16:58:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/eeb42214-f7c7-4816-8029-c0fca311cb61_1024x576.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">The opening minutes of the trading day are often <strong>dense with information: o</strong>vernight news, pre-market positioning, and early institutional flow all meet in the same narrow window. </p><p style="text-align: justify;"><strong>Opening Range Breakout (ORB)</strong> strategies are built around the idea that when price leaves that opening range decisively, <strong>the move tends to carry further through the session.</strong></p><div><hr></div><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">Today we show readers how to build a <strong>configurable ORB backtesting engine in Python</strong>, using Polygon.io data. Our emphasis is not on hard-coding one fixed parameter set, but on creating a framework that lets the user vary assumptions in a controlled way and observe how the results change.</p><h2>What you&#8217;ll need</h2><p style="text-align: justify;">In practice, that means you&#8217;ll need a <strong>Python environment</strong>, <strong>access to Polygon</strong> minute and daily data, and a clear idea regarding the <strong>strategy inputs to be tested</strong>. </p><p style="text-align: justify;">Reviewing some of our earlier work on opening-range breakout strategies can be extremely beneficial, such as <em><a href="https://concretumgroup.com/can-day-trading-really-be-profitable/">Can Day Trading Really be Profitable</a> </em>and <em><a href="https://concretumgroup.com/a-profitable-day-trading-strategy-for-the-u-s-equity-market/">A Profitable Day Trading Strategy For The U.S. Equity Market</a>.</em></p><div><hr></div><p style="text-align: center;"><code>The complete technical guide and Google Colab notebook are available on our website</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/backtesting-the-opening-range-breakout-orb-strategy-using-polygon-io/&quot;,&quot;text&quot;:&quot;Access Full Code&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/backtesting-the-opening-range-breakout-orb-strategy-using-polygon-io/"><span>Access Full Code</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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[Constructing a Survivorship-Bias-Free Stock Database with Norgate]]></title><description><![CDATA[Full Python Procedure]]></description><link>https://concretumgroup.substack.com/p/constructing-a-survivorship-bias</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/constructing-a-survivorship-bias</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Wed, 02 Oct 2024 16:18:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bf1b7a04-ff16-4343-b79b-1e4404fcd2aa_1024x576.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">Excluding delisted stocks from an equity backtest is the same as <strong>working with a cleaned-up version of history</strong>. </p><p style="text-align: justify;">Companies that failed are gone, the survivors remain, and the resulting <strong>sample looks healthier than the real market ever did</strong>: this is probably one of the oldest and most common forms of bias in quantitative research data.</p><div><hr></div><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">The objective of this guide is to build a broad stock dataset<strong> in Python (leveraging <a href="https://norgatedata.com/">Norgate Data</a>)</strong> that includes both active and delisted names, and later <strong>enriching that price history</strong> with company names, sector classifications, and point-in-time index membership.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0w0r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0w0r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png 424w, https://substackcdn.com/image/fetch/$s_!0w0r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png 848w, https://substackcdn.com/image/fetch/$s_!0w0r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png 1272w, https://substackcdn.com/image/fetch/$s_!0w0r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0w0r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png" width="170" height="170" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:170,&quot;width&quot;:170,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Norgate Data (@NorgateData) &#8226; Facebook&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Norgate Data (@NorgateData) &#8226; Facebook" title="Norgate Data (@NorgateData) &#8226; Facebook" srcset="https://substackcdn.com/image/fetch/$s_!0w0r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png 424w, https://substackcdn.com/image/fetch/$s_!0w0r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png 848w, https://substackcdn.com/image/fetch/$s_!0w0r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png 1272w, https://substackcdn.com/image/fetch/$s_!0w0r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bb4b346-256c-4369-b8fd-ec275a6c757e_170x170.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h2>What you&#8217;ll need</h2><p style="text-align: justify;">To follow the process, you need Python, a <strong>Norgate Data installation</strong> with the relevant historical databases enabled, and access to both active and delisted equity symbols. </p><p style="text-align: justify;">The workflow also assumes that you want more than raw prices, since part of the value comes from attaching sector and index context to each security.</p><div><hr></div><p style="text-align: center;"><code>The complete guide and Jupyter notebook are available on our website for free.</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/how-to-construct-a-survivorship-bias-free-database-in-norgate-using-python/&quot;,&quot;text&quot;:&quot;Access Full Code&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/how-to-construct-a-survivorship-bias-free-database-in-norgate-using-python/"><span>Access Full Code</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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[Capturing Intraday Edges: A Python-Based Backtest]]></title><description><![CDATA[Using Seven Years of Free Alpaca Data]]></description><link>https://concretumgroup.substack.com/p/capturing-intraday-edges-a-python</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/capturing-intraday-edges-a-python</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Wed, 05 Jun 2024 16:42:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8e2416fa-28bd-4784-aa4c-762be469d75d_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">Today we provide a Python procedure to backtest an intraday strategy on SPY. In particular, the strategy builds on the noise-band signal documented in our paper <em><a href="https://concretumgroup.com/beat-the-market-an-effective-intraday-momentum-strategy-for-sp500-etf-spy/">Beat the Market: An Effective Intraday Momentum Strategy for the S&amp;P 500 ETF (SPY)</a></em>, while <strong>also taking advantage of overnight gaps&#8230;</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_!cLya!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cLya!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png 424w, https://substackcdn.com/image/fetch/$s_!cLya!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png 848w, https://substackcdn.com/image/fetch/$s_!cLya!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png 1272w, https://substackcdn.com/image/fetch/$s_!cLya!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cLya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png" width="1081" height="310" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:310,&quot;width&quot;:1081,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Alpaca - Developer-first API for Stock, Options, Crypto Trading&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Alpaca - Developer-first API for Stock, Options, Crypto Trading" title="Alpaca - Developer-first API for Stock, Options, Crypto Trading" srcset="https://substackcdn.com/image/fetch/$s_!cLya!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png 424w, https://substackcdn.com/image/fetch/$s_!cLya!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png 848w, https://substackcdn.com/image/fetch/$s_!cLya!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png 1272w, https://substackcdn.com/image/fetch/$s_!cLya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed0b7cfb-aeae-4a28-a053-f23571512933_1081x310.png 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 style="text-align: justify;">For this backtest, we use <strong>Alpaca </strong>as our data provider. Unlike Polygon, which limits free access to two years of intraday data, Alpaca offers<strong> up to eight years of free historical data for a wide range of US stocks and ETFs.</strong></p><div><hr></div><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">The article walks through a Python backtest for a trading strategy on SPY that combines intraday momentum with mean reversion in overnight gaps. Along the way, it covers how the signals are defined, how volatility is used to scale exposure, and how the strategy holds up against a passive S&amp;P 500 investment.</p><h2>What you&#8217;ll need</h2><p style="text-align: justify;">To follow along, you only need Python and a <strong>free Alpaca API key</strong>, which provides access to historical intraday and daily SPY data (dividend records are also required to keep the total-return calculation accurate). </p><p style="text-align: justify;">The implementation draws on a handful of indicators such as <strong>VWAP </strong>(the volume-weighted average price) and <strong>rolling volatility measures</strong>, so some familiarity with these concepts will be helpful.</p><div><hr></div><p style="text-align: center;"><code>The complete technical guide and Google Colab notebook are available on our website.</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/backtesting-7-years-of-free-data-beat-the-market-an-effective-intraday-momentum-strategy-for-the-sp500-etf-spy/&quot;,&quot;text&quot;:&quot;Access Full Code&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/backtesting-7-years-of-free-data-beat-the-market-an-effective-intraday-momentum-strategy-for-the-sp500-etf-spy/"><span>Access Full Code</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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[Backtesting A Century of Profitable Industry Trends]]></title><description><![CDATA[Python and Matlab Code Procedures]]></description><link>https://concretumgroup.substack.com/p/backtesting-a-century-of-profitable</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/backtesting-a-century-of-profitable</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Sat, 25 May 2024 14:48:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f1946420-4f35-40b8-b9aa-40a7f2366193_1024x576.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">If you are familiar with our research, you know that <strong>trend following is a topic we return to consistently</strong>. Today, we are releasing both <strong>Python </strong>and <strong>MATLAB </strong>backtesting procedures behind our paper <em><a href="https://concretumgroup.com/a-century-of-profitable-industry-trends/">A Century of Profitable Industry Trends</a></em>, allowing readers to replicate our methodology directly.</p><div><hr></div><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">This article pair covers the same industry-based trend-following framework implemented in both Python and MATLAB, using the <strong>48 industry portfolios from Kenneth French&#8217;s data library</strong>. Across both implementations, readers are walked through the data preparation, signal construction, volatility-scaled position sizing, and performance evaluation over a long historical sample.</p><h2>What you&#8217;ll need</h2><p style="text-align: justify;">To follow along, you <strong>only need Python installed on your machine or a MATLAB license, </strong>no proprietary data is required. All return series are drawn from Kenneth French&#8217;s publicly available data library, including the daily industry returns and the corresponding market and risk-free rate series. </p><p style="text-align: justify;">The strategy draws on a set of standard technical indicators (i.e. Donchian channels and Keltner bands), therefore we think <strong>some familiarity with them will serve you well. </strong></p><div><hr></div><p style="text-align: center;"><code>Both implementations are available for free on our website.</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/backtest-a-profitable-trend-following-strategy-using-python/&quot;,&quot;text&quot;:&quot;Full Python Implementation&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/backtest-a-profitable-trend-following-strategy-using-python/"><span>Full Python Implementation</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/backtest-a-profitable-trend-following-strategy/&quot;,&quot;text&quot;:&quot;Full Matlab Implementation&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/backtest-a-profitable-trend-following-strategy/"><span>Full Matlab Implementation</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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[Backtest a SPY Intraday Momentum Strategy (Python, Matlab)]]></title><description><![CDATA[Full Backtesting Pieplines]]></description><link>https://concretumgroup.substack.com/p/backtest-a-spy-intraday-momentum</link><guid isPermaLink="false">https://concretumgroup.substack.com/p/backtest-a-spy-intraday-momentum</guid><dc:creator><![CDATA[Concretum Research]]></dc:creator><pubDate>Thu, 23 May 2024 13:10:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7c1b347f-fed3-49ba-91bd-1e2d9fbb2268_1024x576.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;">There is usually a large <strong>gap between reading a research paper and running a faithful backtest</strong> of what it describes. </p><p style="text-align: justify;">By making the backtesting procedure for our paper <em><a href="https://concretumgroup.com/beat-the-market-an-effective-intraday-momentum-strategy-for-sp500-etf-spy/">Beat the Market</a> </em>publicly available in both <strong>Python </strong>and <strong>MATLAB</strong>, we hope that readers can engage with the strategy not just conceptually, but hands-on. </p><p style="text-align: justify;">In our experience, becoming familiar with the implementation is often where the deepest understanding comes from.</p><div><hr></div><h2>What you&#8217;ll learn</h2><p style="text-align: justify;">By working through this article pair, readers will learn how to <strong>translate our SPY intraday momentum strategy</strong> from <em><a href="https://concretumgroup.com/beat-the-market-an-effective-intraday-momentum-strategy-for-sp500-etf-spy/">Beat the Market</a></em> into a fully reproducible backtest (in both Python and MATLAB), using data from Polygon.io. </p><p style="text-align: justify;">That means <strong>building the indicators from scratch</strong>, applying the trading rules in code, and evaluating performance in a way that can be verified and cross-checked across <strong>both implementations</strong>.</p><h2>What you&#8217;ll need</h2><p style="text-align: justify;">To follow along, you only need Python (or a MATLAB license) and a <strong>free Polygon.io API key</strong>, which provides access to minute-level and daily SPY data along with dividend records. </p><p style="text-align: justify;">The implementation works entirely within the free tier, though <strong>it does require some patience</strong>: <strong>API rate limits</strong> need to be properly respected during the data collection step.</p><div><hr></div><p style="text-align: center;"><code>Both implementations are available for free on our website.</code></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/python-backtesting-beat-the-market-an-effective-intraday-momentum-strategy-for-the-sp500-etf-spy/&quot;,&quot;text&quot;:&quot;Full Python Implementation&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/python-backtesting-beat-the-market-an-effective-intraday-momentum-strategy-for-the-sp500-etf-spy/"><span>Full Python Implementation</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.com/backtesting-riding-intraday-trends-in-us-markets-using-matlab/&quot;,&quot;text&quot;:&quot;Full Matlab Implementation&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://concretumgroup.com/backtesting-riding-intraday-trends-in-us-markets-using-matlab/"><span>Full Matlab Implementation</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dMnx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png" width="45" height="46" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:46,&quot;width&quot;:45,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1451,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://concretumgroup.substack.com/i/192622031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dMnx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 424w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 848w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1272w, https://substackcdn.com/image/fetch/$s_!dMnx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a0d5453-9302-4657-a22b-5a3e99b731e0_45x46.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://concretumgroup.substack.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">Don&#8217;t miss out on the next research piece. Subscribe for free.</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></channel></rss>