<script data-pm-proxy="intercept"></script><?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[Héctor Melchor Alaiz]]></title><description><![CDATA[Quantitative Analyst at London broker. Physicist with a Master's in AI. Specialized in algorithmic trading, portfolio optimization, and stochastic valuation. ]]></description><link>https://hmaquant.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!tXma!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c69964-96cb-4559-8873-62f119b23b0c_600x600.png</url><title>Héctor Melchor Alaiz</title><link>https://hmaquant.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 05 Sep 2026 04:45:51 GMT</lastBuildDate><atom:link href="/__u/hmaquant.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Héctor Melchor Alaiz]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[hmaquant@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[hmaquant@substack.com]]></itunes:email><itunes:name><![CDATA[Héctor Melchor Alaiz]]></itunes:name></itunes:owner><itunes:author><![CDATA[Héctor Melchor Alaiz]]></itunes:author><googleplay:owner><![CDATA[hmaquant@substack.com]]></googleplay:owner><googleplay:email><![CDATA[hmaquant@substack.com]]></googleplay:email><googleplay:author><![CDATA[Héctor Melchor Alaiz]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Triple-Barrier Method: Labeling Financial Data for ML]]></title><description><![CDATA[A trade that banked +3.4% on day five gets stamped as a loser by fixed-horizon labeling. Triple-barrier labels match how trading actually works: with targets, stops and deadlines.]]></description><link>https://hmaquant.substack.com/p/the-triple-barrier-method-labeling</link><guid isPermaLink="false">https://hmaquant.substack.com/p/the-triple-barrier-method-labeling</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Fri, 04 Sep 2026 06:01:22 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here is a ten-day price path starting at 100: it climbs to 103.4 by day five, then fades to 98.5 by day ten. A fixed-horizon labeler looks only at day ten, sees &#8722;1.5%, and stamps the observation "negative". A trader with a +3% target banked the win on day five and was flat by the fade. The label contradicts the trade, and a model trained on thousands of such labels is learning to predict a fiction no strategy would ever realize.</p><p>Labels are the supervision signal, and in financial machine learning they are routinely the weakest link: teams obsess over features while labeling with a rule that ignores both the volatility regime and the path the price actually traveled. The triple-barrier method, popularized in Marcos L&#243;pez de Prado's Advances in Financial Machine Learning, fixes both defects with a rule so simple it feels obvious in hindsight.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post covers the two specific ways fixed-horizon labels lie, the triple-barrier rule itself, a hand-labeled example with barriers at &#177;2&#963; that you can verify in thirty seconds, the implementation details that actually bite, and meta-labeling, the second layer that turns the method into a bet-sizing engine.</p><div><hr></div><h2>Two Ways Fixed-Horizon Labels Lie</h2><p>The standard recipe labels each observation by the sign of the return over the next h bars, sometimes with a fixed threshold. The first lie is ignoring volatility. A 1% move is a two-sigma event when daily volatility is 0.5% and rounding noise when it is 3%. Hold the threshold fixed and the same label means entirely different things in different regimes; class frequencies swing with the volatility cycle, and your classifier quietly becomes a volatility detector wearing a signal costume. The fix is to measure moves against a rolling estimate &#963;&#770;&#8348;, typically an exponentially weighted one, so that a label always means the same number of sigmas.</p><p>The second lie is path-blindness. Real positions run with stops and targets, either explicit or enforced by a risk manager with opinions. A path that falls 5% before crawling back to +2% at the horizon was, for any leveraged trader, a stopped-out loss, not a winner. Close-to-close horizon returns cannot see the difference between a path that glided to +2% and one that visited the emergency room on the way. Labels should record what a trade would have experienced, because that is what the model's predictions will be used for.</p><h2>Three Barriers, One Honest Label</h2><p>The rule. At an event time t&#8320; with price P&#8320;, set three barriers: an upper profit-taking barrier U = P&#8320;(1 + m&#183;&#963;&#770;), a lower stop-loss barrier L = P&#8320;(1 &#8722; m&#183;&#963;&#770;), and a vertical time barrier h bars ahead. The first barrier touched decides the label: +1 for the upper, &#8722;1 for the lower, and if the clock runs out first, either 0 or the sign of the terminal return, both conventions in active use. The horizontal barriers scale with current volatility, so the label is regime-aware by construction, and touching order makes it path-aware.</p><p>Now the worked example. Let P&#8320; = 100, the daily volatility estimate &#963;&#770; = 1.5%, and m = 2, so the barriers sit at U = 100 &#215; 1.03 = 103.00 and L = 100 &#215; 0.97 = 97.00, with the vertical barrier at 10 days. The closes: 100.8, 101.9, 101.2, 102.6, 103.4, 102.0, 100.5, 99.2, 98.8, 98.5. Walk the path: days one through four print 100.8, 101.9, 101.2 and 102.6, all inside the band. Day five prints 103.4, which crosses U = 103.00. The upper barrier is touched first, so the label is +1, the realized exit is roughly +3.4%, and the holding time is five days. The fixed-horizon labeler on the identical path computes 98.5/100 &#8722; 1 = &#8722;1.5% and outputs a negative label. Same data, opposite supervision, and only one of them matches what a disciplined trade with a two-sigma target would have earned.</p><p>The volatility scaling earns its keep the moment regimes shift. With the same m = 2, a quiet market with &#963;&#770; = 0.6% puts the barriers at 101.2 and 98.8, while a wild one with &#963;&#770; = 3% puts them at 106 and 94. In both cases the label means exactly the same thing: a two-sigma move in your favor arrived before a two-sigma move against you, within the allotted time.</p><p>Three implementation details bite in practice. First, detect touches with intraday highs and lows, not closes; the example above used closes for readability, but close-only scanning misses the intraday spike that would have stopped you out. Second, do not label every bar. Overlapping windows make observations heavily redundant, so sample event times with something like a CUSUM filter and, where overlap remains, weight observations by their uniqueness. Third, if you want magnitudes rather than classes, record the return at the actual touch, which for gappy paths is not the barrier level itself.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Barriers: U = P&#8320;(1 + m&#183;&#963;&#770;), L = P&#8320;(1 &#8722; m&#183;&#963;&#770;), vertical at t&#8320; + h Volatility estimate: &#963;&#770;&#8348;&#178; = &#955;&#183;&#963;&#770;&#8348;&#8331;&#8321;&#178; + (1 &#8722; &#955;)&#183;r&#8348;&#178; Label: +1 if U is touched first, &#8722;1 if L is touched first, else the vertical-barrier rule Meta-label: y = 1 if the primary model's trade reaches profit-taking first, and bet size &#8733; P&#770;(y = 1)</p></blockquote><h2>Meta-Labeling: A Second Model That Decides Whether to Bet</h2><p>Meta-labeling stacks a second layer on top of a primary signal, and it is where the triple-barrier method stops being a labeling trick and becomes an architecture. The primary model decides the side: a trend rule says long, a value screen says short, even a discretionary desk's tickets qualify. You then apply the triple barrier to each primary trade and label it 1 if the profit-taking barrier was hit first and 0 otherwise. A secondary machine learning model is trained on features available at entry, volatility regime, spread, time of day, strength and recency of the signal, to predict the probability that the primary trade works. That probability drives position size, including size zero.</p><p>The division of labor is the point. Predicting direction from scratch is brutally low-signal; predicting whether a specific, already-chosen trade will hit its target before its stop is a better-posed binary problem with a stable definition supplied by the barriers. The secondary model tunes the precision-recall trade-off through its probability threshold, filtering the primary strategy's worst trades while keeping its best. And because the primary stays simple and auditable, you keep interpretability where regulators and risk committees want it, while the machine learning does the one job it is actually suited for in a noisy market: deciding how hard to press.</p><h2>Key Takeaways</h2><ul><li><p>Fixed-horizon labels ignore volatility regimes and the path traveled, so they routinely assign labels no real trading strategy could have realized.</p></li><li><p>The triple-barrier method labels each event by the first touch among a profit-taking barrier, a stop-loss barrier and a time barrier, making labels path-aware by construction.</p></li><li><p>Scaling the horizontal barriers by a rolling &#963;&#770; keeps the meaning of a label constant across regimes, with &#177;2&#963;&#770; bands at 103 and 97 in the worked example.</p></li><li><p>On the worked path the triple barrier records +1 at roughly +3.4% in five days while the fixed-horizon rule calls the same data a &#8722;1.5% loser.</p></li><li><p>Use intraday highs and lows for touch detection, sample events rather than labeling every bar, and weight overlapping labels by uniqueness.</p></li><li><p>Meta-labeling trains a secondary model to predict whether the primary signal's trade will succeed, converting the triple barrier's output into a bet-sizing and trade-filtering layer.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #MachineLearning #TripleBarrier #MetaLabeling #FinancialML #DataLabeling #AlgorithmicTrading #FeatureEngineering #LopezDePrado #BacktestDesign #TradingSignals #DataScience #SupervisedLearning</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Pds9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Pds9!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!Pds9!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!Pds9!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Pds9!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Pds9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46648,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Pds9!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!Pds9!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!Pds9!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Pds9!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F028436e9-71c8-45d4-98ab-c77992ea4b5b_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Monte Carlo Pricing: Variance Reduction That Actually Matters]]></title><description><![CDATA[Doubling your Monte Carlo paths buys you 29% less error. Antithetic and control variates can buy you 5x or more for free, if you know where each one works.]]></description><link>https://hmaquant.substack.com/p/monte-carlo-pricing-variance-reduction</link><guid isPermaLink="false">https://hmaquant.substack.com/p/monte-carlo-pricing-variance-reduction</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Thu, 03 Sep 2026 06:01:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your Monte Carlo pricer draws 10,000 paths and reports an exotic's value as 8.50 with a standard error of 0.12. Risk wants the price good to a penny. The square-root law delivers the bad news: getting the standard error from 0.12 to 0.01 requires (12/0.01)&#178; = 1.44 million paths. That is 144 times the compute for 12 times the accuracy, and your pricing grid has ten thousand more instruments on it.</p><p>This matters because pricing never runs once. It runs inside calibration loops, overnight risk, XVA engines and scenario grids, so a factor of 144 is not a rounding error in the infrastructure bill. Variance reduction attacks the numerator of &#963;/&#8730;N instead of the denominator, and the best techniques cost almost nothing to add.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here you get the square-root tax stated plainly, antithetic variates and control variates with a fully worked pricing example whose savings you can check line by line, a nod to Sobol sequences, and the class of problems where Monte Carlo is not merely convenient but the only method that works.</p><div><hr></div><h2>The Square Root Tax</h2><p>A Monte Carlo price is the average of discounted payoffs across simulated paths, and the standard error of that average is &#963;/&#8730;N, where &#963; is the standard deviation of a single path's discounted payoff. Two things follow. First, the rate does not depend on the dimension of the problem, which is the miracle that keeps Monte Carlo alive. Second, the rate is painfully slow: halving the error quadruples the work, and a tenfold improvement costs a hundredfold.</p><p>Pin down the baseline we will keep reusing. Option payoffs are noisy in a specific way: most paths finish out of the money and pay zero, a few pay a lot, so the per-path standard deviation is large relative to the price. Take &#963; = 12.0 in currency units with N = 10,000 paths. The standard error is 12/100 = 0.12, so the 95% confidence interval is roughly &#177;0.24 around an 8.50 price. Brute force to a penny costs 1.44 million paths. The alternative is to shrink &#963; itself.</p><h2>Antithetic Variates: Symmetry for Free</h2><p>The idea is to stop wasting the symmetry of the normal distribution. For every driving draw Z, also run the mirrored path built from &#8722;Z, and average each pair. If the payoff f is monotone in Z, then f(Z) and f(&#8722;Z) are negatively correlated: when one path overshoots, its mirror undershoots, and the errors partially cancel inside each pair.</p><p>With N total paths arranged as N/2 antithetic pairs, the estimator variance is (&#963;&#178;/N)(1 + &#961;), where &#961; is the correlation between f(Z) and f(&#8722;Z). Toy numbers: at &#961; = &#8722;0.6 the variance factor is 0.4, so the standard error shrinks by &#8730;0.4 &#8776; 0.632, taking our 0.12 down to about 0.076 at identical cost. The technique is three lines of code and reuses every random number.</p><p>The caveat is the monotonicity condition. A straddle payoff |S_T &#8722; K| struck near the money is roughly symmetric in Z, so f(Z) and f(&#8722;Z) are positively correlated and antithetic sampling makes things worse. Calls, puts and most payoffs that only go one way in the driver benefit; symmetric and sharply non-monotone payoffs do not. Check &#961; empirically before trusting it.</p><h2>Control Variates: The Fully Worked Example</h2><p>Control variates are the workhorse. Find a quantity X computed on the same paths whose expectation you know exactly in closed form and which correlates with your payoff Y. Then correct your estimate by how far X drifted from its known mean:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\hat{Y}_{\\mathrm{cv}} = \\bar{Y} - \\beta\\,(\\bar{X} - \\mathbb{E}[X]), \\qquad \\beta^{*} = \\frac{\\mathrm{Cov}(Y,X)}{\\mathrm{Var}(X)}&quot;,&quot;id&quot;:&quot;taizW4UNFW&quot;}" data-component-name="LatexBlockToDOM"></div><p>With the optimal &#946;, the residual variance is &#963;_Y&#178;(1 &#8722; &#961;&#178;), where &#961; is the correlation between payoff and control. The classic pairing: price an arithmetic-average Asian call, and use the geometric-average Asian call as the control, because the geometric version has a closed-form Black-Scholes price while the arithmetic one does not.</p><p>Work the numbers with our baseline. A pilot run gives &#963;_Y = 12.0 and &#961; = 0.9 between the arithmetic payoff and the geometric control. Then 1 &#8722; &#961;&#178; = 1 &#8722; 0.81 = 0.19. The variance drops from 144 to 144 &#215; 0.19 = 27.36, so the residual standard deviation is &#8730;27.36 &#8776; 5.23. With the same 10,000 paths the standard error becomes 5.23/100 &#8776; 0.052, versus 0.12 plain, an error reduction of 2.3 times. Said in compute terms: matching 0.052 by brute force needs 12/&#8730;N = 0.052, so N &#8776; 53,000 paths. One extra payoff per path made 10,000 paths do the work of 53,000, and the general rule confirms it: the variance reduction factor is 1/(1 &#8722; &#961;&#178;) = 1/0.19 &#8776; 5.3.</p><p>In practice the arithmetic-geometric correlation runs far higher than 0.9. At &#961; = 0.99 the factor becomes 1/(1 &#8722; 0.9801) &#8776; 50, which is why this pairing is the textbook example. Estimating &#946; from the same paths introduces a small bias that fades quickly with N, and a pilot batch removes it entirely. Techniques also stack: antithetic sampling and a control variate attack different parts of the noise and are routinely combined.</p><h2>Sobol, and Where Monte Carlo Is the Only Game</h2><p>One more lever deserves its mention. Quasi-random sequences such as Sobol points abandon independence and fill the unit cube evenly, pushing convergence from O(1/&#8730;N) toward roughly O(1/N) when the problem's effective dimension is moderate. Pairing them with a Brownian bridge or PCA construction concentrates the variance in the first coordinates, where the sequences are strongest, and scrambled versions restore honest confidence intervals. Production pricers use them as the default for good reason.</p><p>Why invest in any of this instead of switching methods? Because for a large class of problems there is nothing to switch to. Lattice and PDE methods scale exponentially in dimension: a 30-asset basket with a modest 100 grid nodes per asset implies 10&#8310;&#8304; nodes, which no machine will ever hold, while Monte Carlo's error rate does not care about dimension at all. Path-dependent payoffs, lookbacks, cliquets, autocallables, and XVA simulations of whole netting sets over decades live naturally on simulated paths. Even early exercise fell: Longstaff and Schwartz's least-squares Monte Carlo regresses continuation values on path states, bringing American-style products inside the tent. When Monte Carlo is the only feasible method, variance reduction is not garnish, it is what makes the method affordable.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Standard error: SE = &#963;/&#8730;N Antithetic variance: Var = (&#963;&#178;/N)(1 + &#961;), with &#961; = corr(f(Z), f(&#8722;Z)) Control variate: &#374;_cv = &#562; &#8722; &#946;(X&#772; &#8722; E[X]), with &#946;* = Cov(Y, X)/Var(X) Control variate variance: &#963;&#178;(1 &#8722; &#961;&#178;), a reduction factor of 1/(1 &#8722; &#961;&#178;)</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Monte Carlo error shrinks as 1/&#8730;N, so brute force costs 100 times the compute for every 10-fold accuracy gain, and variance reduction attacks &#963; instead.</p></li><li><p>Antithetic variates exploit the symmetry of the normal driver, cutting variance whenever the payoff is monotone, and can backfire on symmetric payoffs like straddles.</p></li><li><p>Control variates subtract a correlated quantity with a known expectation, reducing variance by the factor 1/(1 &#8722; &#961;&#178;), which reached 5.3 in the worked example at &#961; = 0.9.</p></li><li><p>The arithmetic-geometric Asian pairing is the canonical control variate because the geometric price is closed-form and the correlation is typically extreme.</p></li><li><p>Sobol sequences with a Brownian bridge construction push convergence toward 1/N and are standard in production pricing systems.</p></li><li><p>High-dimensional baskets, path-dependent exotics and XVA have no viable PDE alternative, so on those problems variance reduction is the difference between feasible and not.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #MonteCarlo #OptionPricing #VarianceReduction #ControlVariates #AntitheticVariates #SobolSequences #Derivatives #ComputationalFinance #NumericalMethods #Simulation #RiskManagement #QuantDev</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pjMS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pjMS!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!pjMS!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!pjMS!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pjMS!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pjMS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:53611,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!pjMS!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!pjMS!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!pjMS!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pjMS!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f634f-440f-4921-bae4-fc0fdfb0b8a3_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Hierarchical Risk Parity: Machine Learning Meets Markowitz]]></title><description><![CDATA[Markowitz gives you brilliant weights for a world you cannot estimate. HRP swaps matrix inversion for a clustering tree and produces portfolios you can actually hold.]]></description><link>https://hmaquant.substack.com/p/hierarchical-risk-parity-machine</link><guid isPermaLink="false">https://hmaquant.substack.com/p/hierarchical-risk-parity-machine</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Wed, 02 Sep 2026 06:01:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Give a mean-variance optimizer 50 assets and three years of daily returns and it will hand back something like +180% in one asset, &#8722;130% in its near-twin, and total confidence in both numbers. Shift the estimation window by a single month and the weights reshuffle violently. Nothing about the market changed; the optimizer is faithfully amplifying estimation noise.</p><p>The trouble is mechanical. Markowitz needs the inverse of a covariance matrix estimated from finite data, and inversion amplifies exactly the parts of that estimate you know least well. Michaud called mean-variance optimizers "estimation-error maximizers" back in 1989, and every practitioner who has run one unconstrained knows what he meant. Hierarchical Risk Parity, published by Marcos L&#243;pez de Prado in 2016, is the machine-learning-flavored answer: it never inverts anything.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here you get the reason inversion is fragile, HRP's three steps in plain words, a four-asset example small enough to verify with a pocket calculator, and an honest account of when HRP wins and when it lags.</p><div><hr></div><h2>Why Inverting a Noisy Matrix Hurts</h2><p>A covariance matrix estimated from T observations of N assets carries error in every entry, and the error is proportionally worst in the smallest eigenvalues, the directions along which your sample happened to look artificially calm. Inversion flips the spectrum: smallest eigenvalues become the largest weights in &#931;&#8315;&#185;. The optimizer then does something that looks intelligent and is not: it finds two assets with 0.8 correlation and slightly different sample statistics and loads a huge long-short bet on their difference, which is mostly a bet on noise.</p><p>The geometry gets worse as N grows relative to T. With fewer observations than assets the sample covariance is literally singular, and 50 assets on monthly data need over four years of history just to be invertible at all, let alone stable. Meanwhile markets refuse to stay stationary long enough to give you the T &#8811; N regime the math wants. The standard patches are constraints, shrinkage in the style of Ledoit and Wolf, and resampling. HRP's move is more radical: reorganize the problem so the inverse is never needed.</p><h2>The HRP Recipe: Cluster, Sort, Split</h2><p>Step one, cluster. Convert correlations into distances with d = &#8730;((1 &#8722; &#961;)/2), so perfectly correlated assets sit at distance 0 and perfectly anti-correlated ones at distance 1. Run hierarchical clustering on those distances. The algorithm discovers structure you did not label: equities group with equities, bonds with bonds, without anyone typing an asset class.</p><p>Step two, quasi-diagonalize. Reorder the rows and columns of the covariance matrix so that assets in the same cluster sit next to each other. Large covariances hug the diagonal and the matrix becomes approximately block-diagonal. No numbers change, only the bookkeeping.</p><p>Step three, recursive bisection. Start with 100% of capital at the top of the ordered list. Split the list into two halves, compute each half's variance using inverse-variance weights within the half, and allocate between halves in inverse proportion to those variances. Recurse into each half until every asset stands alone. The only operations are variances and small quadratic forms, weights come out non-negative by construction, and no matrix is ever inverted.</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;d_{ij} = \\sqrt{\\tfrac{1}{2}\\,(1 - \\rho_{ij})}&quot;,&quot;id&quot;:&quot;8sRcYuJAid&quot;}" data-component-name="LatexBlockToDOM"></div><h2>Four Assets With a Pocket Calculator</h2><p>Setup: A and B are equity-like with &#963;_A = 20%, &#963;_B = 25% and &#961;_AB = 0.8. C and D are bond-like with &#963;_C = 5%, &#963;_D = 10% and &#961;_CD = 0.6. Correlations across the two groups are approximately zero. Clustering pairs {A, B} and {C, D}, and the sorted order is A, B, C, D.</p><p>Within-cluster inverse-variance weights first. Equities: 1/0.04 = 25 and 1/0.0625 = 16, so w_A = 25/41 &#8776; 0.610 and w_B = 16/41 &#8776; 0.390. Bonds: 1/0.0025 = 400 and 1/0.01 = 100, so w_C = 0.80 and w_D = 0.20.</p><p>Now each cluster's variance, computed as w&#7488;&#931;w with those internal weights. The equity covariance is 0.8 &#215; 0.20 &#215; 0.25 = 0.04, so V_eq = 0.610&#178; &#215; 0.04 + 0.390&#178; &#215; 0.0625 + 2 &#215; 0.610 &#215; 0.390 &#215; 0.04 &#8776; 0.0149 + 0.0095 + 0.0190 = 0.0434, a cluster volatility of about 20.8%. The bond covariance is 0.6 &#215; 0.05 &#215; 0.10 = 0.003, so V_bond = 0.64 &#215; 0.0025 + 0.04 &#215; 0.01 + 2 &#215; 0.8 &#215; 0.2 &#215; 0.003 = 0.0016 + 0.0004 + 0.00096 = 0.00296, a cluster volatility of about 5.4%.</p><p>The top-level split allocates inversely to cluster variance: the equity block gets &#945;_eq = V_bond / (V_eq + V_bond) = 0.00296 / 0.04638 &#8776; 0.064 and the bond block gets 0.936. Multiply through for final weights: A &#8776; 0.064 &#215; 0.610 &#8776; 3.9%, B &#8776; 0.064 &#215; 0.390 &#8776; 2.5%, C &#8776; 0.936 &#215; 0.80 &#8776; 74.9%, D &#8776; 0.936 &#215; 0.20 &#8776; 18.7%. They sum to 100%, every position is long, and risk is spread the way a human would sanity-check it: most capital in the quiet cluster, more within each cluster to the quieter member.</p><p>Notice what did not happen. The 0.8 correlation between A and B never tempted the algorithm into a monster long-short spread, because bisection cannot short. A Markowitz run on the same covariance with slightly misestimated expected returns will happily produce exactly that spread, and next quarter it will produce the opposite one.</p><h2>Where HRP Wins and Where It Lags</h2><p>HRP earns its keep when estimates are noisy: many assets against short histories, unstable correlation regimes, long-only mandates. In L&#243;pez de Prado's Monte Carlo experiments it delivered lower out-of-sample variance than both mean-variance and naive inverse-variance allocations, precisely because it refuses to spend estimation noise on aggressive bets. Its weights also move smoothly as data updates, which your rebalancing costs will appreciate.</p><p>The honest flip side: HRP ignores expected returns entirely. It is a risk allocator, and if you genuinely have predictive alpha, constrained mean-variance or Black-Litterman uses information HRP throws away. It inherits risk parity's habit of concentrating in low-volatility assets, and 2022 reminded everyone that a bond-heavy "quiet" cluster can fall alongside equities when the stock-bond correlation flips sign. The tree itself can be unstable, with borderline assets hopping clusters between rebalances. And the plain inverse-variance rule inside clusters ignores intra-cluster correlations except through the cluster variance. Treat HRP as a robust default when estimation is the enemy, not as a machine that manufactures alpha.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Correlation distance: d = &#8730;((1 &#8722; &#961;)/2) Within-cluster weights: w&#7522; &#8733; 1/&#963;&#7522;&#178; Bisection split: &#945;&#8321; = V&#8322; / (V&#8321; + V&#8322;), with cluster variance V = w&#7488;&#931;w Markowitz, for contrast: w* &#8733; &#931;&#8315;&#185;&#956;, the inversion HRP avoids</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Mean-variance weights are unstable because inverting a noisy covariance matrix amplifies its least reliable directions, turning estimation error into leveraged bets.</p></li><li><p>HRP replaces inversion with three steps: hierarchical clustering on correlation distance, reordering the matrix to be near block-diagonal, and recursive inverse-variance bisection.</p></li><li><p>In the four-asset example the method lands on 3.9%, 2.5%, 74.9% and 18.7%, all long, with capital concentrated in the low-volatility cluster.</p></li><li><p>HRP structurally cannot produce the offsetting long-short positions that make naive Markowitz portfolios blow up out of sample.</p></li><li><p>The method ignores expected returns, so it lags approaches that successfully use real alpha forecasts and it can overload low-volatility clusters that are not actually safe.</p></li><li><p>Use HRP as a robust baseline allocator when data is short, assets are many and the mandate is long-only, and benchmark anything fancier against it.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #HierarchicalRiskParity #PortfolioOptimization #MachineLearning #RiskParity #AssetAllocation #Markowitz #Clustering #CovarianceMatrix #PortfolioConstruction #RiskManagement #DataScience #Investing</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JVOI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JVOI!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!JVOI!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!JVOI!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JVOI!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JVOI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58987,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!JVOI!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!JVOI!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!JVOI!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JVOI!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd765f4ae-1a74-4c24-b0f6-ebc1a80be98f_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Dispersion Trading: Selling the Index, Buying the Parts]]></title><description><![CDATA[Index options price stocks moving in lockstep; single-name options price them moving alone. The gap between the two is a tradeable quantity called correlation, and it is usually rich in the same direction.]]></description><link>https://hmaquant.substack.com/p/dispersion-trading-selling-the-index</link><guid isPermaLink="false">https://hmaquant.substack.com/p/dispersion-trading-selling-the-index</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Tue, 01 Sep 2026 06:01:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Take a two-stock index, equally weighted, one name running 30% volatility and the other 20%. The average of the parts is 25%, yet the index itself can realize just 21.8%. Nobody made an arithmetic error. The missing 3.2 vol points were eaten by imperfect correlation, and that gap between the parts and the whole is not a curiosity: it is a market with its own supply, demand and persistent mispricing.</p><p>It matters because the flows are lopsided. Institutions relentlessly buy index protection, while yield-hunters sell single-stock options through overwriting programs. Those flows push index implied volatility rich and single-name implied volatility cheap relative to each other, which is the same thing as saying implied correlation trades above what stocks subsequently realize. Dispersion desks exist to harvest exactly that wedge.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post gives you the variance identity that turns correlation into a tradeable number, a two-stock example computed exactly, the way implied correlation is backed out of listed option prices, how the trade is actually assembled, and the specific ways it hurts you.</p><div><hr></div><h2>The Whole Is Quieter Than Its Parts</h2><p>Intuition first. Stocks move for two reasons: because the market moves, and because of their own news. Inside an index, the idiosyncratic pieces partially cancel, an earnings beat in one name offsetting a miss in another. So index volatility must sit below the weighted average of member volatilities whenever correlation is below one. The identity that makes this precise:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\sigma_I^2 = \\sum_i w_i^2 \\sigma_i^2 + 2\\sum_{i<j} w_i w_j \\rho_{ij}\\, \\sigma_i \\sigma_j&quot;,&quot;id&quot;:&quot;sJANMvA1Fj&quot;}" data-component-name="LatexBlockToDOM"></div><p>Every ingredient is observable or estimable. Weights come from index composition, each &#963;&#7522; from single-name option markets, &#963;_I from index options. The only quantity left floating is correlation. That means the index and single-name option markets jointly imply a correlation level, and if you disagree with that level, there is a trade to express it.</p><h2>A Two-Stock Index, Computed Exactly</h2><p>Set w&#8321; = w&#8322; = 0.5, &#963;&#8321; = 30%, &#963;&#8322; = 20%, realized &#961; = 0.5. Compute index variance term by term:</p><ul><li><p>w&#8321;&#178;&#963;&#8321;&#178; = 0.25 &#215; 0.09 = 0.0225</p></li><li><p>w&#8322;&#178;&#963;&#8322;&#178; = 0.25 &#215; 0.04 = 0.0100</p></li><li><p>2w&#8321;w&#8322;&#961;&#963;&#8321;&#963;&#8322; = 2 &#215; 0.5 &#215; 0.5 &#215; 0.5 &#215; 0.30 &#215; 0.20 = 0.0150</p></li></ul><p>Sum: &#963;_I&#178; = 0.0475, so &#963;_I = &#8730;0.0475 &#8776; 21.79%. Now push &#961; to 1: the cross term becomes 0.0300, &#963;_I&#178; = 0.0625, and &#963;_I = 25%, exactly the weighted average of 30 and 20. Perfect correlation is the ceiling; anything below it makes the whole quieter than its parts.</p><p>Now flip from realized to implied. Suppose single-name options price &#963;&#8321; = 30% and &#963;&#8322; = 20%, but index options trade at 23% implied. Back out the correlation the market is charging: 0.23&#178; = 0.0529 must equal 0.0325 + 0.03&#961;, so &#961;_imp = (0.0529 &#8722; 0.0325) / 0.03 = 0.68. The option market is pricing correlation of 0.68. If the pair goes on realizing 0.5, fair index volatility is 21.8%, and index options at 23% are roughly 1.2 vol points too expensive while the single-name legs are fairly priced. Selling the index and buying the parts monetizes exactly that difference.</p><p>For a real index with hundreds of pairwise correlations the identity is unwieldy, so desks quote a single implied correlation proxy, the value of a common &#961;&#772; that reproduces the index variance:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\bar{\\rho} = \\frac{\\sigma_I^2 - \\sum_i w_i^2 \\sigma_i^2}{\\left(\\sum_i w_i \\sigma_i\\right)^2 - \\sum_i w_i^2 \\sigma_i^2}&quot;,&quot;id&quot;:&quot;RQI8xkwBoN&quot;}" data-component-name="LatexBlockToDOM"></div><p>Check it on the toy numbers: numerator 0.0529 &#8722; 0.0325 = 0.0204, denominator 0.0625 &#8722; 0.0325 = 0.0300, ratio 0.68. Same answer, as it must be with only one pair in play.</p><h2>Selling Together, Buying Apart</h2><p>The classic structure: sell index volatility, buy single-name volatility across the members, sized so the package has little net vega and a concentrated short position in correlation. Variance swaps are the clean instrument because they pay realized variance with no path-dependent hedging noise; where they are unavailable or wide, desks use delta-hedged straddles or strangles and accept the extra management. The P&amp;L intuition is simple: the book profits when stocks move plenty individually while the index stays comparatively calm, that is, when realized correlation comes in below the implied correlation you sold.</p><p>Why does the premium persist? Structural flow, as above: index protection buyers meet single-name overwriters, and someone must warehouse the imbalance. And risk: in a genuine crisis correlation lurches toward one while volatility explodes, so the short index leg loses convexly at the worst moment. A short variance swap position loses in vol squared, which turns a vol spike from 20 to 60 into a nine-fold variance move. Sellers of correlation demand compensation for that profile, and on average across time implied correlation has sat above subsequently realized, the correlation risk premium in the academic literature.</p><p>The risk list deserves respect. Crash convergence is the big one: 2008 pushed realized correlations across equity sectors toward one, exactly the state the trade is short. Construction basis is constant work: vega weights drift as spot moves, names gap through strikes, earnings calendars make the long leg lumpy. One genuine mercy: idiosyncratic surprises help the long-singles side, and a takeover bid that doubles a single name's volatility is pure profit, making dispersion one of the few systematically long-M&amp;A-risk trades. Against that, the trade carries dozens of legs, wide single-name spreads, and steady bleed whenever implied correlation happens to be fair. Run it like a short-vol book, because in the tail that is what it is.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Index variance: &#963;_I&#178; = &#931; w&#7522;&#178;&#963;&#7522;&#178; + 2 &#931; w&#7522;w&#11388;&#961;&#7522;&#11388;&#963;&#7522;&#963;&#11388;, second sum over pairs i &lt; j Correlation ceiling: at &#961; = 1, &#963;_I = &#931; w&#7522;&#963;&#7522; exactly Implied correlation proxy: &#961;&#772; = (&#963;_I&#178; &#8722; &#931; w&#7522;&#178;&#963;&#7522;&#178;) / ((&#931; w&#7522;&#963;&#7522;)&#178; &#8722; &#931; w&#7522;&#178;&#963;&#7522;&#178;) Dispersion P&amp;L sign: profitable when realized &#961; &lt; implied &#961;</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Index variance splits into individual variances plus correlation-driven cross terms, so index volatility sits below the weighted average of member volatilities whenever correlation is below one.</p></li><li><p>In the worked example, 30% and 20% stocks at 0.5 correlation produce an index volatility of 21.79%, versus a 25% ceiling at perfect correlation.</p></li><li><p>Option markets jointly imply a correlation level, and index options at 23% implied against fairly priced singles correspond to an implied correlation of 0.68 versus 0.5 realized.</p></li><li><p>Implied correlation has historically traded above realized most of the time, compensating dispersion sellers for the fact that correlation snaps toward one in crises.</p></li><li><p>The trade is built by selling index variance and buying vega-weighted single-name variance, and it should be sized like a short-volatility position because that is its tail behavior.</p></li><li><p>Idiosyncratic events such as takeovers pay the long single-name leg, which makes dispersion unusual among vol trades in being long event risk.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #DispersionTrading #ImpliedCorrelation #VolatilityTrading #Options #VarianceSwaps #EquityDerivatives #CorrelationRisk #IndexOptions #Derivatives #HedgeFunds #TradingStrategies #MarketMaking</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!H21b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!H21b!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!H21b!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!H21b!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!H21b!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!H21b!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55777,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!H21b!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!H21b!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!H21b!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!H21b!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff48dfc11-bd21-4abe-822b-3461e4c385ca_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Roadmap to Quant · Day 22 — Bessel's Correction: Why the Sample Variance Divides by n−1]]></title><description><![CDATA[For three weeks we have been computing with numbers we quietly assumed we knew: volatilities, correlations, Sharpe ratios.]]></description><link>https://hmaquant.substack.com/p/roadmap-to-quant-day-22-bessels-correction</link><guid isPermaLink="false">https://hmaquant.substack.com/p/roadmap-to-quant-day-22-bessels-correction</guid><pubDate>Mon, 31 Aug 2026 15:20:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Yesterday ended on the admission that all of them are estimates, pulled from a finite sample, and that a positive edge sized off a bad estimate ruins you just as thoroughly as no edge at all. So today we stop describing data and start estimating from it.</p><p>The entry point is the smallest, most taught and least understood rule in statistics. Everybody learns that the sample variance divides by n&#8722;1. Almost nobody can say why the deficit is exactly one, rather than a half, or two, or something that drifts with the shape of the distribution. The answer is worth the trip, because it turns out that the n&#8722;1 you were told to memorise and the &#963;/&#8730;n you use for standard errors are not two facts. They are one fact, seen from opposite sides.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>By the end you will be able to derive the correction from scratch, say precisely why the sample mean flatters your data, know the one line of code that silently breaks agreement between two pipelines, and recognise the handful of situations where any of this changes a decision.</p><div><hr></div><h2>Yesterday&#8217;s Puzzle, Solved &#183; Five Pirates and 100 Coins</h2><p><em>The setup:</em> five ranked pirates, 100 coins. The highest ranking pirate proposes a split, everyone votes including the proposer, and the plan passes if <strong>at least 50%</strong> approve. Otherwise the proposer goes overboard and the next in line proposes. All are perfectly rational, perfectly informed and purely greedy.</p><p><strong>The answer is (98, 0, 1, 0, 1)</strong> for pirates P5, P4, P3, P2, P1. The leader keeps almost everything.</p><p>You get there by refusing to start at five. Work up from the bottom, because every pirate votes by comparing your offer against what he would collect after you are thrown off the ship.</p><p><strong>One pirate.</strong> P1 takes all 100.</p><p><strong>Two pirates.</strong> P2 needs at least 50% of two votes, and his own vote is exactly one of two, which is 50%. So he proposes (100, 0) and passes it alone. <strong>P1 gets nothing, and this is the fact that poisons everything above it.</strong></p><p><strong>Three pirates.</strong> P3 needs two of three votes, his own plus one. If he fails, we land in the two pirate world where P1 gets zero. So a single coin buys P1, who prefers 1 to 0. Proposal: (99, 0, 1). Passes with P3 and P1.</p><p><strong>Four pirates.</strong> P4 needs two of four, which his own vote plus one satisfies at exactly 50%. If he fails, we land in the three pirate world where <strong>P2</strong> is the one who gets zero. So P2 is now the cheap vote, and one coin buys him. Proposal: (99, 0, 1, 0). Passes with P4 and P2.</p><p><strong>Five pirates.</strong> P5 needs at least 50% of five votes. Two votes is 40%, which is not enough, so he needs three: his own plus two. If he fails, we land in the four pirate world where <strong>P3 and P1</strong> both get zero. Those two are the cheap votes, one coin each. Proposal: <strong>(98, 0, 1, 0, 1)</strong>, which passes 3 to 2.</p><p>Notice the alternating pattern of who is broke, and notice that nobody is being generous. Each bribe is the minimum that beats the alternative by one coin.</p><p><strong>Now the detail that separates understanding from memorising.</strong> Everything above hangs on &#8220;at least 50%&#8221;, which lets a proposer approve his own plan and count it. Change the rule to a <strong>strict majority</strong> and the entire game inverts from the second level up.</p><p>With strict majority, P2 needs both votes, so he must buy P1, who would get all 100 if P2 went overboard. P2 cannot outbid that, so <strong>P2 is doomed</strong>. Which means that with three pirates, P2 will accept literally anything to avoid reaching that state, and P3 proposes (100, 0, 0). With four, P4 must buy two of the three below him, and the ones sitting at zero are P2 and P1, so (98, 0, 1, 1). With five, P5 needs three votes, and after his removal the survivors would hold (98, 0, 1, 1); the cheapest pair to buy is P3 at one coin and one of P2 or P1 at two coins. The answer becomes <strong>(97, 0, 1, 2, 0)</strong>.</p><p>Same pirates, same greed, same backward induction. One word in the voting rule, and the split changes. If someone asks you this in an interview, ask which rule applies before you answer.</p><div><hr></div><h2>Part 1 &#183; Theory &#8212; Bessel&#8217;s Correction</h2><h3>Two formulas, and the two things that separate them</h3><p>Here they are side by side. The population variance:</p><p>&#963;&#178; = (1/N) &#931;(x&#7522; &#8722; &#956;)&#178;</p><p>and the sample variance:</p><p>s&#178; = (1/(n&#8722;1)) &#931;(x&#7522; &#8722; x&#772;)&#178;</p><p>Most people notice one difference, the denominator. There are two, and they travel together.</p><p>The first is the <strong>centre</strong>. The population formula measures every point against &#956;, the true mean, a number that exists independently of your data. The sample formula measures against x&#772;, a number you computed from those very same points.</p><p>The second is the <strong>denominator</strong>, N versus n&#8722;1.</p><p>And the link is this: you divide by N precisely <em>because</em> &#956; did not come from the data. The true mean is an outside fact, so all N deviations count as full, independent pieces of information. The moment your centre is estimated from the sample itself, that stops being true, and the denominator has to pay for it.</p><h3>Why the sample mean understates the spread</h3><p>The sample mean has a property that decides this whole topic: <strong>x&#772; is the number that minimises &#931;(x&#7522; &#8722; c)&#178; over all possible choices of c</strong>.</p><p>You can see it in one line. Differentiate the sum with respect to c:</p><p>d/dc &#931;(x&#7522; &#8722; c)&#178; = &#8722;2 &#931;(x&#7522; &#8722; c) = 0  &#10233;  c = x&#772;</p><p>and the second derivative is 2n &gt; 0, so it really is a minimum.</p><p>Now read what that means. Among every candidate centre in the world, x&#772; produces the smallest possible sum of squared distances. The true mean &#956; is one of those candidates. So</p><p>&#931;(x&#7522; &#8722; x&#772;)&#178; &#8804; &#931;(x&#7522; &#8722; &#956;)&#178;</p><p><strong>always</strong>, with equality only in the freak case where x&#772; lands exactly on &#956;. Never greater. Not sometimes smaller, always smaller or equal.</p><p>The intuition is that x&#772; is fitted to your particular sample. It chases wherever the data happened to fall. If your draw came out low, x&#772; comes out low with it, and the distances shrink. Measuring spread from a centre that was pulled toward your own points is measuring with a ruler that flatters you.</p><h3>A nuance worth pausing on</h3><p>None of this says a given sample must underestimate. Individual samples overshoot all the time.</p><p>Take the population {0, 1, 2, 3, 4}, with &#956; = 2 and &#963;&#178; = (4+1+0+1+4)/5 = 2. Draw the sample (0, 4). Then x&#772; = 2, the sum of squared deviations is 4 + 4 = 8, and s&#178; = 8/1 = <strong>8</strong>, four times the truth. Wildly too high.</p><p>So the bias does not live in any single sample. It lives in the <strong>average over all possible samples</strong>. Unbiased does not mean accurate. It means that if you repeated the sampling forever, your estimates would centre on the right answer instead of drifting to one side of it.</p><p>The dartboard version: an unbiased estimator is a thrower whose shots scatter symmetrically around the bullseye, not a thrower who hits it. A biased one is a thrower whose shots cluster tightly, but always two inches left. Bessel&#8217;s correction fixes the aim, not the scatter.</p><h3>The decomposition identity</h3><p>Now we make the intuition algebraic. The trick is to insert x&#772; into the deviation from &#956; and expand. Write</p><p>x&#7522; &#8722; &#956; = (x&#7522; &#8722; x&#772;) + (x&#772; &#8722; &#956;)</p><p>square both sides, and sum over i:</p><p>&#931;(x&#7522; &#8722; &#956;)&#178; = &#931;(x&#7522; &#8722; x&#772;)&#178; + 2(x&#772; &#8722; &#956;) &#931;(x&#7522; &#8722; x&#772;) + n(x&#772; &#8722; &#956;)&#178;</p><p>The cross term dies, because &#931;(x&#7522; &#8722; x&#772;) = 0. That identity is just the balance point property of the mean: the deviations above x&#772; exactly cancel the deviations below it, which is what makes x&#772; the mean in the first place. What survives is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\sum_{i=1}^{n} (x_i - \\mu)^2 \\;=\\; \\sum_{i=1}^{n} (x_i - \\bar{x})^2 \\;+\\; n(\\bar{x} - \\mu)^2&quot;,&quot;id&quot;:&quot;D22IDENT01&quot;}" data-component-name="LatexBlockToDOM"></div><p>Read it as a budget. The total spread around the truth splits cleanly into the spread you can see, measured around x&#772;, plus a term for how far your sample mean drifted from the truth. Since n(x&#772; &#8722; &#956;)&#178; is a square and therefore never negative, the visible piece is always the smaller one. This is the earlier minimisation argument, written as an equation instead of a sentence, and it tells you exactly how much you are missing.</p><h3>The proof</h3><p>Take expectations of both sides, assuming the usual setup of n independent draws from a population with mean &#956; and variance &#963;&#178;.</p><p><strong>The left side.</strong> Every observation has E[(x&#7522; &#8722; &#956;)&#178;] = &#963;&#178; by definition, and there are n of them:</p><p>E[&#931;(x&#7522; &#8722; &#956;)&#178;] = n&#963;&#178;</p><p><strong>The last term.</strong> Since E[x&#772;] = &#956;, the quantity E[(x&#772; &#8722; &#956;)&#178;] is just the variance of the sample mean. And that one you can compute directly, using Var(aX) = a&#178;Var(X) plus independence:</p><p>Var(x&#772;) = Var((1/n) &#931;x&#7522;) = (1/n&#178;) &#183; n&#963;&#178; = &#963;&#178;/n</p><p>So E[n(x&#772; &#8722; &#956;)&#178;] = n &#183; &#963;&#178;/n = &#963;&#178;. Exactly one variance.</p><p><strong>Put them together.</strong> The identity says n&#963;&#178; = E[&#931;(x&#7522; &#8722; x&#772;)&#178;] + &#963;&#178;, so</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\mathbb{E}\\left[\\sum_{i=1}^{n}(x_i-\\bar{x})^2\\right] \\;=\\; n\\sigma^2 - \\sigma^2 \\;=\\; (n-1)\\,\\sigma^2&quot;,&quot;id&quot;:&quot;D22CHAIN01&quot;}" data-component-name="LatexBlockToDOM"></div><p>There it is. The sum of squared deviations around the sample mean is expected to come out at (n&#8722;1)&#963;&#178;, not n&#963;&#178;. Divide by n&#8722;1 rather than n, and you get E[s&#178;] = &#963;&#178; exactly. The estimator is unbiased.</p><h3>What the deficit actually is</h3><p>This is the part worth sitting with.</p><p>The shortfall is exactly <strong>one variance</strong>. Not roughly one. Not one-ish for large n. One, at every sample size, for every distribution with a finite variance, whatever its shape.</p><p>And look at what that one variance is made of. It came out of the term n &#183; Var(x&#772;), which is n &#183; &#963;&#178;/n. In other words, <strong>the correction and the standard error are the same phenomenon</strong>. The sample mean is not the true mean; it wobbles around it with variance &#963;&#178;/n, and &#963;/&#8730;n is how much. That wobble is not a separate topic you learn later in the confidence intervals chapter. It is the precise quantity that hides from you when you measure spread against x&#772; instead of &#956;.</p><p>Here is the bookkeeping that makes it click. Each of your n observations gives up &#963;&#178;/n worth of measurable spread, because each one helped pull x&#772; toward itself. Multiply: n &#215; &#963;&#178;/n = &#963;&#178;. One whole variance, taken in n small bribes, one from each data point.</p><p>So when you divide by n&#8722;1 you are not applying a fudge factor. You are handing back the exact amount your data paid to estimate its own centre.</p><h3>Degrees of freedom, without the mysticism</h3><p>The same fact wears a second name. Your n deviations (x&#8321; &#8722; x&#772;), (x&#8322; &#8722; x&#772;), ..., (x&#8345; &#8722; x&#772;) are not n independent numbers, because they must satisfy</p><p>&#931;(x&#7522; &#8722; x&#772;) = 0</p><p>Tell me the first n&#8722;1 deviations and I can compute the last one without looking at your data. It is forced. So although you have n numbers written down, only <strong>n&#8722;1 of them are free</strong>. The denominator counts free pieces of information, and there are n&#8722;1 of them, which is why n&#8722;1 is the right thing to divide by.</p><h3>The n = 1 case</h3><p>Nothing exposes the logic faster than a sample of one.</p><p>Divide by n, and you get 0/1 = 0. Your estimator confidently reports zero spread, which is a lie. A single observation contains no information whatsoever about variability.</p><p>Divide by n&#8722;1, and you get 0/0, undefined. That is the honest answer, and the formula produces it by itself, without anyone patching in a special case. A rule that refuses to answer when it has nothing to go on is a good rule.</p><h3>When it actually matters</h3><p>Dividing by n instead of n&#8722;1 shrinks your variance estimate by the factor (n&#8722;1)/n. Put numbers on it:</p><p>At n = 2 you report <strong>half</strong> the true variance, which is a catastrophe. At n = 5 you are 20% low. At n = 30 you are 3.3% low. At n = 100 you report 0.99&#963;&#178;, an error of one percent that will never change a decision you make.</p><p>So the practical answer is that it matters in small samples and fades quickly. Which is exactly why you should understand it rather than memorise it. Nobody gets caught by the arithmetic; they get caught by the twelve monthly returns in a backtest, or the eight quarterly observations in a report, where the correction is doing real work and nobody checked which convention the code used.</p><h3>Two practical notes</h3><p><strong>First, n&#8722;1 makes s&#178; unbiased, not s.</strong> The correction is proved for the variance, and unbiasedness does not survive the square root, because the square root is concave. By Jensen&#8217;s inequality, E[s] &lt; &#963;. Your sample standard deviation is biased low even after Bessel. In practice almost nobody corrects for it, and for most work that is fine, but it is a good thing to know if an interviewer pushes one step past the standard answer.</p><p><strong>Second, the code will not warn you.</strong> <code>numpy.std()</code> divides by n by default; you need <code>ddof=1</code>. Pandas <code>.std()</code> does the opposite, defaulting to ddof=1. Two pipelines can compute the volatility of the identical series and disagree, with no bug in either, purely because one used numpy and the other used pandas. This is a real and recurring source of numbers that will not reconcile.</p><h3>Worked example</h3><p>The cleanest possible demonstration. Take the population {0, 2}, so &#956; = 1 and &#963;&#178; = ((0&#8722;1)&#178; + (2&#8722;1)&#178;)/2 = 1. Now enumerate every sample of size n = 2 drawn with replacement. There are four, all equally likely.</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\begin{array}{|c|c|c|c|c|} \\hline \\textbf{Sample} &amp; \\bar{x} &amp; \\sum(x_i-\\bar{x})^2 &amp; \\div\\, n &amp; \\div\\,(n-1) \\\\ \\hline (0,\\,0) &amp; 0 &amp; 0 &amp; 0 &amp; 0 \\\\ \\hline (0,\\,2) &amp; 1 &amp; 2 &amp; 1 &amp; 2 \\\\ \\hline (2,\\,0) &amp; 1 &amp; 2 &amp; 1 &amp; 2 \\\\ \\hline (2,\\,2) &amp; 2 &amp; 0 &amp; 0 &amp; 0 \\\\ \\hline \\textbf{Average} &amp; &amp; &amp; \\mathbf{0.5} &amp; \\mathbf{1} \\\\ \\hline \\end{array}&quot;,&quot;id&quot;:&quot;D22TBL0001&quot;}" data-component-name="LatexBlockToDOM"></div><p>Dividing by n gives an average of 0.5, exactly half the true variance of 1, which is the (n&#8722;1)/n = 1/2 factor showing up in the flesh. Dividing by n&#8722;1 gives exactly 1. Not approximately, exactly.</p><p>Look at where the missing spread went. The samples (0, 0) and (2, 2) have genuine dispersion relative to the population, since 0 and 2 both sit a full unit away from &#956; = 1. But when you compute x&#772; from those two points alone, the sample mean lands right on top of them, and the spread becomes completely invisible. Those two samples report zero. The information did not vanish because it was not there; it vanished because the centre was estimated from the same numbers being measured. That is exactly what n&#8722;1 is compensating for, and the compensation is exact.</p><blockquote><h3>&#128273; Key Formulas</h3><p><strong>Population variance:</strong>  &#963;&#178; = (1/N) &#931;(x&#7522; &#8722; &#956;)&#178;</p><p><strong>Sample variance:</strong>  s&#178; = (1/(n&#8722;1)) &#931;(x&#7522; &#8722; x&#772;)&#178;</p><p><strong>Unbiasedness:</strong>  E[s&#178;] = &#963;&#178;</p><p><strong>Variance of the sample mean:</strong>  Var(x&#772;) = &#963;&#178;/n,  so the standard error is &#963;/&#8730;n</p><p><strong>Decomposition:</strong>  &#931;(x&#7522; &#8722; &#956;)&#178; = &#931;(x&#7522; &#8722; x&#772;)&#178; + n(x&#772; &#8722; &#956;)&#178;</p><p><strong>The deficit:</strong>  E[&#931;(x&#7522; &#8722; x&#772;)&#178;] = (n&#8722;1)&#963;&#178;</p><p><strong>Balance point:</strong>  &#931;(x&#7522; &#8722; x&#772;) = 0,  which leaves n&#8722;1 free deviations</p><p><strong>Understatement factor:</strong>  dividing by n gives (n&#8722;1)/n &#183; &#963;&#178;</p></blockquote><p><strong>The line to remember:</strong> <em>The sample mean is fitted to your data, so measuring spread against it always comes up short, and the shortfall is exactly one variance.</em></p><div><hr></div><h2>Part 2 &#183; Practice</h2><h3>A &#183; Mechanics</h3><p><strong>A1.</strong> For the data {4, 8, 8, 10, 15}, compute the variance treating the five numbers as the entire population, then compute the sample variance. Explain in one sentence why the second is larger.</p><p><strong>A2.</strong> You have a single observation, x&#8321; = 7. What does dividing by n give, and what does dividing by n&#8722;1 give? Which is the more honest report?</p><p><strong>A3.</strong> A desk has the twelve monthly returns of a strategy for last year. Which denominator applies if the question is (i) &#8220;how variable were last year&#8217;s returns, as a description of what happened&#8221;, and (ii) &#8220;what is this strategy&#8217;s ongoing volatility, for sizing next year&#8217;s positions&#8221;?</p><h3>B &#183; The proof</h3><p><strong>B4.</strong> For the data {3, 7, 8, 10, 12}, compute x&#772; and verify that &#931;(x&#7522; &#8722; x&#772;) = 0. Why does this guarantee the cross term in the decomposition vanishes?</p><p><strong>B5.</strong> A population has &#956; = 5. You draw the sample {2, 4, 6}. Compute all three quantities in the decomposition identity, &#931;(x&#7522; &#8722; &#956;)&#178;, &#931;(x&#7522; &#8722; x&#772;)&#178; and n(x&#772; &#8722; &#956;)&#178;, and check that the identity holds.</p><p><strong>B6.</strong> Compute the understatement factor (n&#8722;1)/n for n = 2, 5, 30 and 1000. State each as the percentage by which dividing by n understates the variance.</p><h3>C &#183; Applied</h3><p><strong>C7.</strong> Two analysts compute the annualised volatility of the same series of 101 daily returns. One writes the calculation in numpy and reports 20.00%. The other uses pandas and reports 20.10%. Neither has a bug. What explains the gap, which tool produced which number, and which one should go in the risk report?</p><p><strong>C8.</strong> A backtest has 12 monthly returns. The reporting script computes the standard deviation with numpy&#8217;s default setting and prints an annualised Sharpe ratio of 1.60. By what factor is the Sharpe overstated, and what should the corrected figure be?</p><div><hr></div><h3>Solutions</h3><p><strong>A1.</strong> The sum is 45, so the mean is 9. Deviations: &#8722;5, &#8722;1, &#8722;1, 1, 6, whose squares are 25, 1, 1, 1, 36, summing to 64. As a population: 64/5 = <strong>12.8</strong>. As a sample: 64/4 = <strong>16</strong>. The second is larger because the same numerator is divided by a smaller denominator, and that is the correction for the fact that the centre, 9, was computed from these same five numbers rather than known in advance.</p><p><strong>A2.</strong> The sum of squared deviations is zero, since the single point is its own mean. Dividing by n gives 0/1 = <strong>0</strong>, a confident claim of zero variability. Dividing by n&#8722;1 gives 0/0, <strong>undefined</strong>. The undefined answer is the honest one: one observation carries no information at all about spread, and the formula correctly declines to invent any.</p><p><strong>A3.</strong> (i) <strong>Divide by n</strong>. The question is descriptive, the twelve months <em>are</em> the whole object of interest, and there is no inference beyond them. (ii) <strong>Divide by n&#8722;1</strong>. Here the twelve months are a sample from an ongoing process whose true volatility you are trying to estimate, and with n = 12 the correction is not cosmetic: it raises the variance estimate by 12/11, about 9%.</p><p><strong>B4.</strong> The sum is 40, so x&#772; = 8. The deviations are &#8722;5, &#8722;1, 0, 2, 4, which sum to <strong>0</strong>. This guarantees the cross term vanishes because that term is 2(x&#772; &#8722; &#956;) &#931;(x&#7522; &#8722; x&#772;), a constant multiplied by a sum that is identically zero, whatever &#956; happens to be. The mean is the balance point of its own data, which is why the decomposition splits so cleanly.</p><p><strong>B5.</strong> x&#772; = 12/3 = 4. Then &#931;(x&#7522; &#8722; &#956;)&#178; = 9 + 1 + 1 = <strong>11</strong>. &#931;(x&#7522; &#8722; x&#772;)&#178; = 4 + 0 + 4 = <strong>8</strong>. And n(x&#772; &#8722; &#956;)&#178; = 3 &#215; (4 &#8722; 5)&#178; = <strong>3</strong>. Check: 8 + 3 = 11 &#10003;. Note that the sum measured against the sample mean, 8, is smaller than the sum measured against the true mean, 11, exactly as the minimisation property requires.</p><p><strong>B6.</strong> n = 2: 1/2 = 0.5, understating by <strong>50%</strong>. n = 5: 4/5 = 0.8, understating by <strong>20%</strong>. n = 30: 29/30 = 0.9667, understating by <strong>3.3%</strong>. n = 1000: 999/1000 = 0.999, understating by <strong>0.1%</strong>. The correction is decisive in tiny samples and irrelevant in large ones, which is precisely why it is dangerous: it bites hardest exactly where people are least careful.</p><p><strong>C7.</strong> It is the <code>ddof</code> default. Numpy divides by n, pandas divides by n&#8722;1, so the pandas number is larger by the factor &#8730;(n/(n&#8722;1)) = &#8730;(101/100) = 1.00499, which is the 0.5% gap you see: 20.00 &#215; 1.005 = 20.10. So <strong>numpy produced 20.00% and pandas produced 20.10%</strong>. The risk report should carry <strong>20.10%</strong>, the ddof=1 version, because the 101 days are a sample used to estimate a volatility that will be applied going forward, not a closed population being described. The deeper lesson is that a silent default in a library caused two correct scripts to disagree, and only knowing why n&#8722;1 exists lets you find it in under a minute.</p><p><strong>C8.</strong> Sharpe is a mean divided by a standard deviation, so understating the denominator overstates the ratio. Numpy&#8217;s default divides the variance by n instead of n&#8722;1, so its standard deviation is too small by the factor &#8730;((n&#8722;1)/n), and the Sharpe is inflated by the reciprocal, &#8730;(n/(n&#8722;1)) = &#8730;(12/11) = <strong>1.0445</strong>, about 4.4%. The corrected figure is 1.60 / 1.0445 = <strong>1.53</strong>. Worth putting next to yesterday&#8217;s point about estimation error: the standard error on an annualised Sharpe from one year of data is roughly 1.0, so this 0.07 correction is far smaller than your uncertainty, and yet it is the part people argue about.</p><div><hr></div><h2>Part 3 &#183; Puzzle &#183; Game of Divisors</h2><p><strong>The problem.</strong></p><blockquote><p>Two perfectly rational players, A and B, play a game on a board holding the numbers 1 to N. They alternate turns, and A moves first.</p><p>On your turn you strike off one number that is still on the board, and in that same move you must also strike off <strong>all of its divisors</strong>, whether or not they were already struck. The player who strikes off the last number on the board wins.</p><p>Can A construct a winning strategy?</p><p>Note that the question asks whether such a strategy <strong>exists</strong>, not what it is.</p></blockquote><p><strong>Pause here, and a hint.</strong></p><p>That closing note is not a disclaimer, it is permission. You are allowed to argue indirectly, and for this problem you should. Begin with two small observations: the game cannot go on forever, and it cannot end in a draw. Together those already tell you that exactly one of the two players must have a winning strategy, which converts the question into a choice between two options. Now suppose, for contradiction, that the winner is B. Look hard at the most modest opening move available to A, the one that clears the least from the board, and ask what B would be forced to do immediately afterwards.</p><p><em>Solution tomorrow.</em></p><div><hr></div><h2>Key Takeaways</h2><ul><li><p><strong>Two things separate the formulas, not one:</strong> the centre you measure against, &#956; versus x&#772;, and the denominator. They are linked, because the estimated centre is exactly what costs you the denominator.</p></li></ul><ul><li><p><strong>x&#772; minimises &#931;(x&#7522; &#8722; c)&#178;</strong>, so measuring spread against it is always smaller than measuring against &#956;, never larger. The sample mean is fitted to your data, and a fitted ruler flatters.</p></li></ul><ul><li><p><strong>Unbiased is a statement about the average over all samples, not about yours.</strong> A single sample can overshoot badly, as (0, 4) drawn from {0,1,2,3,4} does, giving 8 against a true variance of 2.</p></li></ul><ul><li><p><strong>The deficit is exactly one variance,</strong> and that variance is n &#183; Var(x&#772;) = n &#183; &#963;&#178;/n. Bessel&#8217;s correction and the standard error &#963;/&#8730;n are the same fact viewed from two directions: each observation gives up &#963;&#178;/n of visible spread because it helped pull the centre toward itself.</p></li></ul><ul><li><p><strong>Degrees of freedom is the same idea again.</strong> The deviations obey &#931;(x&#7522; &#8722; x&#772;) = 0, so only n&#8722;1 of them are free, and the denominator counts free pieces.</p></li></ul><ul><li><p><strong>It matters in small samples and almost nowhere else,</strong> but the small samples are where real decisions live: twelve monthly returns, eight quarters, one short backtest.</p></li></ul><ul><li><p><strong>Why a quant cares:</strong> knowing the rule gets you the right number. Knowing why the rule exists is what lets you spot, in a minute rather than a morning, why two pipelines that both look correct will not reconcile.</p></li></ul><p><strong>Tomorrow &#183; Day 23 &#8212; the standard error and Student&#8217;s t.</strong> We settle the Game of Divisors, and the argument is shorter than the game deserves. Then we follow &#963;/&#8730;n one step further: what changes when you have to substitute your estimated s for the unknown &#963;, why that swap fattens the tails of the whole distribution instead of merely blurring them, and why the price you pay is measured in exactly the same n&#8722;1 degrees of freedom we bought today.</p><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; https://hmaquant.com</p><p>&#128202; https://substack.com/@hmaquant</p><p>&#128188; www.linkedin.com/in/quanthector</p><p>#QuantFinance #Statistics #BesselCorrection #SampleVariance #StandardError #DegreesOfFreedom #Estimation #Probability #QuantInterview #RiskManagement #DataScience #Volatility #Backtesting #Python</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!LqRV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!LqRV!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!LqRV!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!LqRV!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LqRV!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!LqRV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:124763,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!LqRV!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!LqRV!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!LqRV!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!LqRV!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c0931c5-7ef3-44b9-a027-ae58073c88ca_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Carry: The Most Universal Trade in Finance]]></title><description><![CDATA[In FX, rates, credit, commodities and volatility, the same trade keeps reappearing: get paid if the world stands still. Here is how it works, why it pays, and how it ends.]]></description><link>https://hmaquant.substack.com/p/carry-the-most-universal-trade-in</link><guid isPermaLink="false">https://hmaquant.substack.com/p/carry-the-most-universal-trade-in</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Mon, 31 Aug 2026 06:01:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In 2006 you could borrow Japanese yen at well under 1% and park the proceeds in Australian dollar deposits paying roughly 6%. Do nothing, collect roughly five points a year, and for a while the currency even moved in your favor. Then late 2008 arrived, AUD/JPY fell roughly 40% in a few months, and years of patiently harvested interest went out the window in one unwind.</p><p>That trade has a name, carry, and it is the most recycled structure in all of finance. The same skeleton appears in currencies, government bonds, corporate credit, commodity futures and option books. Learn to recognize it and half the strategies on any multi-asset desk collapse into one sentence: get paid for holding a position while nothing happens, and hope nothing happens.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post gives you the one-line definition, shows the trade wearing five different costumes, works a full FX example down to the forward points, and explains why carry earns in the first place, which is also the reason its P&amp;L chart looks like an escalator standing next to an open elevator shaft.</p><div><hr></div><h2>One Definition, Five Costumes</h2><p>Carry is the return on a position if market conditions stay exactly where they are today: spot unchanged, curves frozen, spreads constant, volatility flat, nobody defaults. It is not a forecast of anything. It is the passage-of-time component of your P&amp;L, the part you collect simply for holding the position while the world stands still.</p><p>Once you have that definition, the costumes come off quickly.</p><p><strong>FX.</strong> Hold a high-yielding currency funded in a low-yielding one. If spot does not move, you pocket the interest rate differential.</p><p><strong>Rates.</strong> Buy a 10-year bond financed at the repo rate. Carry is yield minus funding, plus rolldown: if the curve slopes upward and does not move, the bond ages into lower yields and its price drifts up.</p><p><strong>Credit.</strong> Hold a corporate bond against a government bond. Carry is the spread, collected for as long as the issuer neither defaults nor deteriorates.</p><p><strong>Commodities.</strong> When a futures curve sits in backwardation, a long futures position rolls up toward spot as contracts mature. Carry is roughly the slope of the curve, the market's price for convenience yield net of storage and financing costs.</p><p><strong>Volatility.</strong> Sell a delta-hedged option or a variance swap. Carry is theta, funded by the well-documented tendency of implied volatility to sit above subsequently realized volatility on average.</p><p>Five markets, one structure: a visible income stream exchanged for an invisible risk.</p><h2>An FX Carry Trade, Down to the Pips</h2><p>Numbers make the definition concrete. Take AUD/USD spot at 0.6500 dollars per Aussie, a one-year USD deposit rate of 3% and a one-year AUD rate of 5%. Covered interest parity pins the one-year forward, because any other price hands someone a riskless profit:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;F = S \\times \\frac{1 + r_{\\mathrm{dom}}}{1 + r_{\\mathrm{fgn}}} = 0.6500 \\times \\frac{1.03}{1.05} \\approx 0.6376&quot;,&quot;id&quot;:&quot;kK56S0Jz3T&quot;}" data-component-name="LatexBlockToDOM"></div><p>The forward trades below spot. The forward points, F &#8722; S = 0.6376 &#8722; 0.6500 = &#8722;0.0124, get quoted as roughly &#8722;124 pips. The high-yield currency always sits at a forward discount; the discount is the mechanical shadow of the rate gap, not a market forecast of depreciation.</p><p>The carry trade: buy AUD one year forward at 0.6376. Suppose spot a year from now is exactly where it is today, 0.6500. You take delivery at 0.6376 of something worth 0.6500 and earn 0.0124 per Aussie, which is 0.0124 / 0.6376 &#8776; 1.94%. Check it against the rates: 1.05/1.03 &#8722; 1 = 1.94%. Identical, as it must be. Nothing moved and you got paid, which is the definition of carry made literal.</p><p>The same number is your cushion. Spot can fall from 0.6500 to 0.6376, a depreciation of roughly 1.9%, before the position loses money. Uncovered interest parity says expected depreciation should equal exactly that, leaving zero expected profit. Empirically, averaged over decades and many currency pairs, high-yielders have depreciated less than their forwards implied. This is the forward premium puzzle, and it is why systematic FX carry portfolios have earned positive average returns. The catch lives in the shape of the distribution, not in the mean.</p><h2>Why the Steamroller Pays</h2><p>If carry were free money, it would have been arbitraged away decades ago. It persists because the income compensates a return profile most investors hate: small gains arriving frequently, large losses arriving rarely, and the large losses timed for maximum inconvenience. Carry returns are negatively skewed by construction, because the trade is implicitly short the state of the world in which risk premia reprice violently.</p><p>History is blunt about this. In October 1998, as leveraged yen-funded positions unwound around the LTCM collapse, USD/JPY dropped roughly 15% in a matter of days. In 2008, high-yield currencies, credit spreads and short-volatility books all collapsed together. Different costumes, same underlying short: liquidity and calm. Diversifying across carry families helps on the average day and fails in the tail, because the tail is precisely when correlations lurch toward one as every leveraged player deleverages at once.</p><p>There is also a structural component worth respecting. Not every counterparty is maximizing profit: central banks manage exchange rates, commodity producers pay to hedge production, institutions buy index protection at almost any price. Carry strategies partly harvest these flows, which is the comfortable half of the premium. The uncomfortable half is crash risk, and no amount of clever construction removes it.</p><p>The practical consequences follow directly. Volatility-based position sizing flatters carry, because realized volatility is at its quietest right before the elevator shaft; size for the drawdown you have not yet seen, not the one in your sample. Cut on stress rather than averaging down into an unwind, since unwinds feed on forced sellers. And read the level of carry itself as a crowding gauge: when the premium compresses, you are being paid less for exactly the same tail.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Covered interest parity: F = S &#215; (1 + r_dom) / (1 + r_fgn) FX carry, long the foreign currency: carry &#8776; r_fgn &#8722; r_dom if spot is unchanged Generic definition: carry = income &#8722; funding cost + rolldown Volatility carry: roughly &#963;_implied &#8722; &#963;_realized, collected through theta</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Carry is the return you earn if absolutely nothing changes, and that single definition unifies trades in FX, rates, credit, commodities and volatility.</p></li><li><p>Forward prices mechanically embed interest differentials through covered interest parity, so the high-yield currency always trades at a forward discount.</p></li><li><p>In the worked example, a two-point rate gap produced carry of roughly 1.94% and an identical depreciation cushion before the trade goes underwater.</p></li><li><p>Carry earns on average because it sells insurance against violent repricings, which makes its return stream negatively skewed and crash-prone.</p></li><li><p>Separate carry families diversify each other in calm markets and fail together during deleveraging episodes, so size the book for the tail rather than the average day.</p></li><li><p>Compressed carry means the market is paying you less for the same crash exposure, which makes the premium itself a useful crowding indicator.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #CarryTrade #FXTrading #FixedIncome #Commodities #CreditSpreads #VolatilityTrading #RiskPremium #ForwardPoints #InterestRates #GlobalMacro #TradingStrategies #PortfolioManagement</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JBX6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JBX6!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!JBX6!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!JBX6!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JBX6!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JBX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43418,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!JBX6!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!JBX6!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!JBX6!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JBX6!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb90a5db1-ac0f-43df-9fb9-04db54f5d300_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Transaction Costs: The Silent Alpha Killer]]></title><description><![CDATA[Worked ledger: a gross Sharpe 1.5 strategy at 200% turnover in small caps nets out at 0.15 after spread, impact, fees and borrow. Alpha is a forecast; costs are a certainty.]]></description><link>https://hmaquant.substack.com/p/transaction-costs-the-silent-alpha</link><guid isPermaLink="false">https://hmaquant.substack.com/p/transaction-costs-the-silent-alpha</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Sun, 30 Aug 2026 06:01:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here is a strategy any allocator would take a meeting for: market-neutral, 5% volatility, gross Sharpe 1.5, so 7.5% of excess return per year on paper. It trades small caps and turns the book over twice a year each way. Now push it through realistic costs: the net return is 0.75% and the net Sharpe is 0.15. Ninety percent of the Sharpe evaporated, and not one assumption about the signal changed.</p><p>Costs deserve more statistical respect than they get, for one structural reason: alpha is a forecast with wide error bars, while costs are close to a certainty. You do not know your true edge within a factor of two; you know your spread, fee and borrow schedule to the basis point and your impact within a defensible range. A backtest that subtracts a token flat haircut is optimizing the difference between a noisy number and a mismeasured one, which is the standard way paper strategies die in production. A strategy that only works at zero cost is not a strategy, it is a screensaver.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post gives you the four cost lines every strategy pays, the full arithmetic behind that Sharpe 1.5 to 0.15 grind-down, and the standard defenses: turnover budgets, no-trade bands, and the quiet magic of internal crossing.</p><div><hr></div><h2>The Four Taxes on Every Trade</h2><p><strong>Spread.</strong> Cross it and you pay the half-spread instantly; rest passively and you risk not getting filled precisely when the trade would have worked, since adverse selection never sleeps. Liquid large caps cost a few basis points per side; small caps routinely run 20-60 bps of half-spread.</p><p><strong>Impact.</strong> Your own order moves the price against you. The robust empirical regularity is the square-root law: cost &#8776; k&#183;&#963;_daily&#183;&#8730;(Q/ADV), where Q is your order, ADV is average daily volume, and k is of order one. Concavity means splitting an order helps, but trading slower leaves you exposed to the signal decaying while you wait. Impact is also the only cost that grows with your AUM, which is why capacity and cost are one subject wearing two names.</p><p><strong>Fees, commissions, taxes.</strong> Exchange fees, clearing, ticket charges, stamp duties in some markets. Individually tiny, strictly linear in turnover, never negative.</p><p><strong>Financing and borrow.</strong> Short legs pay stock-loan fees: general-collateral names cost tens of basis points annually, while hard-to-borrow names can run to double-digit percentages. This line scales with the size and duration of the short book rather than with trading, so slow books do not escape it; they just pay rent instead of tolls.</p><p>The unifying accounting is one line long. Per year: trading costs = (notional traded / NAV) &#215; per-unit cost, carry costs = book size &#215; financing rate. Fast strategies get eaten by the first term, slow ones by the second.</p><h2>Grinding Sharpe 1.5 into 0.15, Line by Line</h2><p>Fix the book. NAV 100, dollar-neutral, 100 long and 100 short, 5% annual vol on NAV, gross alpha 1.5 &#215; 5% = 7.5% of NAV per year. Turnover is 200% each way: the strategy buys 200 and sells 200 over the year, so total notional traded is 400% of NAV.</p><p>Per-unit trading cost for institutional size in small caps: half-spread 40 bps. Impact from the square-root law: a typical 40%-vol small cap has daily vol of roughly 40%/&#8730;252 &#8776; 2.5%, and orders averaging 16% of ADV give 1 &#215; 2.5% &#215; &#8730;0.16 = 2.5% &#215; 0.4 = 100 bps. Commissions and fees, 10 bps. Total: 150 bps per unit of notional traded.</p><p>Now the ledger, and the net Sharpe it implies:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\mathrm{Sharpe}_{\\mathrm{net}} = \\frac{\\alpha_{\\mathrm{gross}} - c \\cdot T - b}{\\sigma}&quot;,&quot;id&quot;:&quot;UvRXJxzrf3&quot;}" data-component-name="LatexBlockToDOM"></div><p>Trading cost: c&#183;T = 1.50% &#215; 4.00 = 6.00% of NAV per year. Borrow drag: the short book is 100% of NAV at an average 75 bps, so b = 0.75%. Total costs: 6.75%. Net alpha: 7.50% &#8722; 6.75% = 0.75%. Costs are near-deterministic, so volatility stays at roughly 5%, and the net Sharpe is 0.75/5 = 0.15. The signal is intact; the business is gone.</p><p>Two sensitivities, because they carry the real lesson. First, the breakeven per-unit cost is (7.50% &#8722; 0.75%)/4.00 &#8776; 169 bps: this strategy survives only while all-in costs stay under about 1.7% per unit traded, one liquidity regime away from negative. Second, move the identical signal to large caps at 50 bps per unit and 30 bps of borrow: costs = 4 &#215; 0.50% + 0.30% = 2.30%, net alpha = 5.20%, net Sharpe = 1.04. Of course, gross alpha is usually thinner in large caps, and that is exactly the trade-off: alpha concentrates where trading is expensive.</p><h2>Turnover Is a Budget, Spend It Like One</h2><p><strong>Charge every trade its cost up front.</strong> A trade should happen only if its expected alpha over the holding period clears the round-trip cost. In our small-cap example a round trip costs about 3%, so a signal predicting 80 bps of drift has no business trading there. The cost penalty belongs inside the optimizer, not in a report after the fact.</p><p><strong>No-trade bands.</strong> With proportional costs, the classic portfolio-choice results of Constantinides and of Davis and Norman say you should not track your target weights; you should tolerate a band around them and trade only to the band's edge when pushed outside. Chasing the exact target buys negligible alpha with real spread. The wider the costs, the wider the band.</p><p><strong>Slow the signal, or blend it.</strong> Turnover scales with how fast your forecast churns. Smoothing targets, or blending a fast signal with a slow one, cuts traded notional sharply while giving up little alpha if the forecast decays slowly. Halve the turnover in our example and you save 3.00% of NAV: net return goes from 0.75% to 3.75% and Sharpe from 0.15 to 0.75, assuming, optimistically, that the slower version keeps its alpha. The point is the size of the lever, not the exact number.</p><p><strong>Net and cross internally.</strong> Run correlated strategies in one book and let strategy A's buy cancel strategy B's sell before either touches the market. A crossed trade pays no spread and no impact, which makes internalization a genuine alpha source, and the big multi-strategy shops treat it as one. Cross a quarter of this example's flow and you save 0.25 &#215; 6.00% = 1.50% of NAV, tripling net return from 0.75% to 2.25%. Perold's old implementation-shortfall framing measures all of this as the gap between the paper portfolio and the real one; serious firms manage that gap as obsessively as the signal itself.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Net alpha: &#945;_net = &#945;_gross &#8722; c &#215; (notional traded / NAV) &#8722; borrow drag Square-root impact: cost &#8776; k &#183; &#963;_daily &#183; &#8730;(Q/ADV) Breakeven cost: c* = (&#945;_gross &#8722; borrow) / (notional traded / NAV) Trade filter: E[alpha over holding period] &#8805; round-trip cost</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Costs are the only near-certain line in the P&amp;L, so model them with more care than the alpha estimate, not less.</p></li><li><p>The worked ledger: 7.5% gross alpha, 400% of NAV traded at 150 bps per unit plus 75 bps of borrow, nets 0.75%, taking the Sharpe from 1.5 to 0.15 with the signal untouched.</p></li><li><p>Impact follows a square-root law in participation, so cost per unit rises as you grow; capacity is a cost statement, not a marketing one.</p></li><li><p>Give every trade a hurdle: expected holding-period alpha must clear the round-trip cost, enforced inside the optimizer through penalties and no-trade bands.</p></li><li><p>Turnover is a budget: slowing and blending signals often buys back more net Sharpe than any new source of alpha would add.</p></li><li><p>Internal crossing is free execution: netting a quarter of the flow tripled the net return in the example, which is why multi-strategy books prize internalization.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #TransactionCosts #MarketImpact #TradingCosts #Turnover #Backtesting #ExecutionQuality #ImplementationShortfall #PortfolioConstruction #SystematicTrading #AlphaDecay #ShortSelling #SharpeRatio</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1zRV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1zRV!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!1zRV!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!1zRV!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1zRV!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1zRV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42257,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!1zRV!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!1zRV!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!1zRV!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1zRV!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51489100-8895-4bbc-9702-e5c533d2db12_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Black-Scholes by Replication: The Argument, Not the Formula]]></title><description><![CDATA[A one-step example where the call is worth 5 whether the stock's up-probability is 90% or 10%. Replication, not the closed-form formula, is the idea that built modern derivatives.]]></description><link>https://hmaquant.substack.com/p/black-scholes-by-replication-the</link><guid isPermaLink="false">https://hmaquant.substack.com/p/black-scholes-by-replication-the</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Sat, 29 Aug 2026 06:01:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A stock trades at 100. In one period it will be at 110 or 90, nothing else. A call struck at 100 pays 10 in the up state and 0 in the down state. If the stock has a 90% chance of rising, what is the call worth? Nearly everyone's first answer is 0.9 &#215; 10 = 9. The correct answer is 5, and it stays 5 whether the up-probability is 90%, 50%, or 10%. That collision between intuition and arithmetic is the entire subject of this post.</p><p>Black-Scholes is remembered as a formula, which is a shame, because the formula is the least interesting part. The argument underneath, that a continuously rebalanced portfolio of stock and cash can manufacture the option's payoff exactly, and that two identical payoffs must carry one price, is what generalizes: to exotics, to rates, to credit, to anything with a hedge. It also delivers the most counterintuitive fact in derivatives: the stock's expected return &#956; appears nowhere in the price.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>The plan: run the one-step replication with exact arithmetic, run the arbitrage that punishes any other price, translate the same argument to continuous time where it becomes the Black-Scholes PDE, and then say in plain words why the drift dies.</p><div><hr></div><h2>One Step, Two States, and a Forced Price</h2><p>Set interest rates to zero so every number is exact; nothing conceptual changes. The stock is at S&#8320; = 100, moving to 110 or 90. The 100-strike call pays 10 or 0. Try to build that payoff from &#916; shares plus a cash position b. Up state: 110&#916; + b = 10. Down state: 90&#916; + b = 0. Subtract the equations: 20&#916; = 10, so &#916; = 0.5, and then b = &#8722;90 &#215; 0.5 = &#8722;45. Hold half a share and borrow 45.</p><p>Check both states. Up: 0.5 &#215; 110 &#8722; 45 = 55 &#8722; 45 = 10. Down: 0.5 &#215; 90 &#8722; 45 = 45 &#8722; 45 = 0. The portfolio is the call, state by state. Its cost today is 0.5 &#215; 100 &#8722; 45 = 50 &#8722; 45 = 5, so the call is worth 5. Notice what never entered: any probability. Only today's price, the two future prices, and the payoffs.</p><h3>Selling the Call at 9 Is Donating Money</h3><p>Suppose an optimist, convinced the up-probability is 90%, bids 9 for the call, its expected payoff under his view. Sell it to him. Take his 9, buy half a share for 50, borrowing the missing 41. At expiry, up state: shares worth 55, repay 41, pay the call holder 10, and keep 55 &#8722; 41 &#8722; 10 = 4. Down state: shares worth 45, repay 41, the call expires worthless, keep 45 &#8722; 41 = 4. A riskless profit of 4 in both states, scalable to any size. His probability estimate might even be right; it cannot protect him, because the replication cost is 5 no matter what happens. Arbitrage capital hammers any other price back to 5, which is why 5 is the price.</p><p>You can compress the bookkeeping into a fake probability: find the q with q &#215; 10 + (1 &#8722; q) &#215; 0 = 5, giving q = 0.5, or in general q = (e^(r&#916;t) &#8722; d)/(u &#8722; d). This risk-neutral probability is not a belief about the stock. It is an accounting device the hedge produces, and pricing as if the stock earned the risk-free rate is simply the shadow replication casts.</p><h2>Continuous Time: Hedge Away the Noise, Inherit a PDE</h2><p>Black-Scholes is the same argument with infinitely many infinitesimal steps; Cox, Ross and Rubinstein later showed the binomial tree converges to it. Let the stock follow dS = &#956;S dt + &#963;S dW and write V(S, t) for the option value. It&#244;'s lemma says the change in V has a random piece, &#963;S&#183;(&#8706;V/&#8706;S)&#183;dW, and a drift piece containing &#956;S&#183;(&#8706;V/&#8706;S) plus the convexity term &#189;&#963;&#178;S&#178;&#183;(&#8706;&#178;V/&#8706;S&#178;).</p><p>Now hold the option and short &#916; = &#8706;V/&#8706;S shares. The short position contributes &#8722;&#916;&#183;dS = &#8722;&#916;&#183;(&#956;S dt + &#963;S dW). Watch what cancels: the dW terms wipe out, and the &#956; terms wipe out in the same line of algebra, because both enter only through the &#916;-sized exposure to the stock. Kill the exposure and you kill both. What remains is deterministic, and a portfolio with no randomness must earn the risk-free rate, or arbitrageurs collect the difference exactly as in the binomial example. The argument needs the hedge to be self-financing, meaning every rebalance is funded from inside the portfolio, with no cash injections. Equating the deterministic drift to r times the portfolio value gives:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\frac{\\partial V}{\\partial t} + \\tfrac{1}{2}\\sigma^2 S^2 \\frac{\\partial^2 V}{\\partial S^2} + rS\\frac{\\partial V}{\\partial S} = rV&quot;,&quot;id&quot;:&quot;CKi4Yz9Gqc&quot;}" data-component-name="LatexBlockToDOM"></div><p>One PDE, no &#956;, terminal condition equal to the payoff. Solve it for a European call and the famous formula falls out, but the formula is downstream; the PDE is the argument. Traders use it daily in rearranged costume: for a delta-hedged book at zero rates, &#952; + &#189;&#963;&#178;S&#178;&#915; = 0. Time decay is the rent you pay for gamma, and a hedged desk's profit is decided by whether realized volatility beats the &#963; it paid, not by where the stock went.</p><h2>Why the Drift Dies, in Words</h2><p>Three ways to metabolize the disappearance of &#956;. Mechanical: the hedge cancels the stock exposure, and &#956; rides only on stock exposure, so it cancels too. Economic: the option is redundant, a repackaging of stock plus borrowing, so it is priced relative to S&#8320;, and S&#8320; already contains the market's entire opinion about drift. Asking the option price to reflect &#956; again would count it twice. If you are bullish, the expression of that view is buying stock, or buying the call as levered stock at its replication price, not paying extra for the call.</p><p>Measure-theoretic, for completeness: pricing happens under the risk-neutral measure, where every asset drifts at r and prices are discounted expectations. The change of measure shifts drift and leaves volatility untouched, which is exactly why &#956; vanishes and &#963; survives.</p><p>And &#963; surviving is the punchline with commercial consequences. Disagreements about direction get settled in the stock. Disagreements about volatility cannot be hedged away with the stock, so they live inside option prices: options are the instrument for trading &#963;. A delta-hedged option position is a bet that realized vol will differ from implied, full stop. That is why vol desks exist, why implied volatility is quoted like a price, and why the one input the model insists is constant is the one the market repriced into a smile.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Replicating delta: &#916; = (V&#7524; &#8722; V_d)/(S&#7524; &#8722; S_d) Risk-neutral probability: q = (e^(r&#916;t) &#8722; d)/(u &#8722; d) Black-Scholes PDE: &#8706;V/&#8706;t + &#189;&#963;&#178;S&#178;&#183;&#8706;&#178;V/&#8706;S&#178; + rS&#183;&#8706;V/&#8706;S = rV Hedged book at r = 0: &#952; + &#189;&#963;&#178;S&#178;&#915; = 0</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Two positions with identical payoffs in every state must trade at one price; option pricing is that statement plus a hedge.</p></li><li><p>In the one-step example, half a share minus 45 of borrowing reproduces the call exactly, so the call costs 5 regardless of anyone's probabilities.</p></li><li><p>Any other price is a money pump: selling at the optimist's expected value of 9 hands the arbitrageur a riskless 4 per contract in both states.</p></li><li><p>Delta hedging cancels the stock exposure, the drift rides only on that exposure, and a riskless portfolio earning r then forces the Black-Scholes PDE with no &#956; in it.</p></li><li><p>Risk-neutral probabilities are bookkeeping for replication cost, not forecasts of anything.</p></li><li><p>Drift is hedgeable and disappears; volatility is not, which makes a delta-hedged option a pure bet on realized versus implied &#963;.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #BlackScholes #OptionsPricing #DeltaHedging #Replication #NoArbitrage #RiskNeutralPricing #BinomialModel #DerivativesPricing #StochasticCalculus #FinancialEngineering #OptionsTrading #Hedging</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!RJ4a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!RJ4a!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!RJ4a!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!RJ4a!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!RJ4a!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!RJ4a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58617,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!RJ4a!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!RJ4a!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!RJ4a!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!RJ4a!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F470e1f52-a14a-45c8-95f3-1638e96cf38b_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Adverse Selection: Why the Bid-Ask Spread Exists]]></title><description><![CDATA[A market maker with zero fees and zero inventory risk still cannot quote one price for everyone. We compute the exact spread that survives 20% informed flow: Bayes' rule with a P&L attached.]]></description><link>https://hmaquant.substack.com/p/adverse-selection-why-the-bid-ask</link><guid isPermaLink="false">https://hmaquant.substack.com/p/adverse-selection-why-the-bid-ask</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Fri, 28 Aug 2026 06:01:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Post a two-sided quote in a liquid stock and you have made a public promise: you will buy from anyone at your bid and sell to anyone at your ask, no questions asked. Now suppose one in five of the orders that hit you comes from someone who already knows where the price is going. Not suspects. Knows. What is the minimum spread that keeps you solvent? By the end you will have computed it exactly: for a stock worth 90 or 110, it is 4.00, not a cent less.</p><p>The lazy answer to why spreads exist is compensation for providing liquidity, which is circular. The real answer was sketched in 1971 by a practitioner writing under the pseudonym Walter Bagehot and formalized by Glosten and Milgrom in 1985: adverse selection. Order flow carries information, so the act of getting filled is itself mildly bad news. A market maker who quotes one price for everyone gets systematically picked off by informed traders and must recover those losses from everyone else. The spread is an insurance premium, and Bayes' rule sets the rate.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Below: the mechanics of trading against informed flow, a four-step worked example that produces the breakeven spread from the fraction of informed traders, and what the logic implies about quoting around news, spread blowouts, and why your own fills are worse than they look.</p><div><hr></div><h2>Every Fill Is a Small Piece of Bad News</h2><p>Strip the problem to its chassis. An asset will shortly be worth either V_H or V_L. Some traders, a fraction &#960; of the flow, know which. The rest trade for reasons unrelated to value: index rebalancing, cash needs, hedging, boredom. The market maker cannot tell the two types apart. All she observes is the side of each arriving order.</p><p>But the side is informative. Informed traders buy only when value is high and sell only when it is low, so a buy order tilts the odds toward V_H. If the market maker sold at the unconditional expected value, she would be selling exactly when the smart money is buying, at exactly the moments her price is too low. That is loss by construction, Akerlof's used-car logic: transact at a naive price with a better-informed counterparty and the selection eats you.</p><p>The defense is to price the update in advance:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\mathrm{Ask} = E[V \\mid \\mathrm{buy}], \\qquad \\mathrm{Bid} = E[V \\mid \\mathrm{sell}]&quot;,&quot;id&quot;:&quot;pB9r2GCPe1&quot;}" data-component-name="LatexBlockToDOM"></div><p>The ask is what the asset is worth given that somebody wants to buy it from you; the bid, given that somebody wants to sell to you. The two conditional expectations differ, and the gap is the bid-ask spread. Notice what is absent from this story: inventory risk, fees, exchange rents, greed. A risk-neutral market maker in a perfectly competitive market with zero operating costs still quotes a strictly positive spread. Adverse selection alone is sufficient.</p><h2>The Breakeven Spread in Four Steps</h2><p>Numbers. The stock is worth V_H = 110 or V_L = 90 with equal probability, so the unconditional value is 100. A fraction &#960; = 0.20 of arriving traders are informed; the other 80% buy or sell with probability one half each. One trader arrives. The market maker must set the ask; the bid is symmetric.</p><p><strong>Step 1: how likely is a buy?</strong> Informed traders buy only if V = 110, which happens half the time. So P(buy) = 0.20 &#215; 0.5 + 0.80 &#215; 0.5 = 0.10 + 0.40 = 0.50. Buys and sells are equally likely by symmetry.</p><p><strong>Step 2: what does a buy reveal?</strong> Bayes' rule. If V = 110, buys come from all the informed plus half the uninformed: P(buy | V_H) = 0.20 + 0.80 &#215; 0.5 = 0.60. If V = 90, buys come only from uninformed: P(buy | V_L) = 0.40. The posterior is P(V_H | buy) = (0.60 &#215; 0.5)/0.50 = 0.60. A single buy order moves fair value from 50/50 to 60/40.</p><p><strong>Step 3: quote the posterior.</strong> Ask = E[V | buy] = 0.60 &#215; 110 + 0.40 &#215; 90 = 66 + 36 = 102. By mirror-image arithmetic, Bid = E[V | sell] = 0.60 &#215; 90 + 0.40 &#215; 110 = 54 + 44 = 98. The spread is 102 &#8722; 98 = 4, which in this symmetric setup equals &#960; &#215; (V_H &#8722; V_L) = 0.20 &#215; 20. Twenty percent informed flow on a 20-point value gap: four points of spread.</p><p><strong>Step 4: verify breakeven.</strong> Conditional on a buy, the buyer is informed with probability 0.10/0.50 = 0.20. Against an informed buyer, V = 110 and she sold at 102: she loses 8. Against an uninformed buyer, expected value is 100 and she sold at 102: she makes 2. Expected profit per buy: 0.20 &#215; (&#8722;8) + 0.80 &#215; 2 = &#8722;1.6 + 1.6 = 0. The spread is calibrated so the small toll collected from the uninformed exactly funds the losses to the informed. Competition pins it there: anything wider gets undercut, anything tighter bleeds out.</p><p>Read spread = &#960;(V_H &#8722; V_L) as a risk report: width rises with the informed share and with the stakes of being wrong, and usually both move together.</p><h2>Why Spreads Blow Out Around News</h2><p>Earnings in an hour: the plausible value gap V_H &#8722; V_L triples, and the informed share &#960; rises as liquidity traders sensibly step aside. The formula says the spread should widen sharply and displayed size should shrink, and that is precisely what happens on every screen, every quarter. This is not market makers losing their nerve; it is Bayes' rule with money on it.</p><p>Second corollary: prices move on flow alone. A run of buy orders ratchets the posterior upward one fill at a time, so private information seeps into the price without any public announcement. That is price discovery in the microstructure sense, and it is why "the price moved but there was no news" is usually a statement about your news feed rather than about information.</p><p>Third: markets can unravel. As &#960; climbs, the spread approaches the entire value gap, uninformed traders stop showing up, and their exit raises the informed share further. Volume evaporates exactly when asymmetry peaks; rumored-takeover names and distressed credits show this in the wild.</p><p>Last, the uncomfortable one: if you trade on signals, you are the informed trader in somebody else's model, and the defenses, wider quotes, fading size, fast quote updates, are aimed at you. Your alpha per trade must clear a spread that exists because of people like you. If instead you trade for liquidity, you are funding the insurance pool. There is no third category.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Quotes: Ask = E[V | buy],  Bid = E[V | sell] Bayes update: P(V_H | buy) = P(buy | V_H) &#183; P(V_H) / P(buy) Symmetric Glosten-Milgrom spread: S = &#960; &#183; (V_H &#8722; V_L) Breakeven: losses to informed = spread revenue from uninformed</p></blockquote><h2>Key Takeaways</h2><ul><li><p>The spread exists because order flow is information: a fill is evidence your quote was on the wrong side, so quotes must pre-price that evidence.</p></li><li><p>In the worked example, 20% informed flow on a 90-to-110 value gap forces quotes of 98 at 102: a 4-point spread around a 100 fair value, with zero expected profit for the market maker.</p></li><li><p>Uninformed traders pay a small toll per trade that exactly funds the market maker's losses to informed traders; the spread is an insurance premium, not a rent.</p></li><li><p>Spreads widen around news because both drivers, the informed share &#960; and the value gap, rise at the same time.</p></li><li><p>If you have alpha, you are the adverse selection, and execution costs are the market charging you for it in advance.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #MarketMicrostructure #MarketMaking #BidAskSpread #AdverseSelection #GlostenMilgrom #InformedTrading #OrderFlow #Liquidity #LiquidityProvision #PriceDiscovery #TradingCosts #ExecutionQuality</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Inmq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Inmq!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!Inmq!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!Inmq!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Inmq!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Inmq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56117,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Inmq!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!Inmq!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!Inmq!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Inmq!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55e477a2-e808-43f5-96ce-84f699a397e6_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Position Sizing Under Fat Tails: When Kelly Is Too Aggressive]]></title><description><![CDATA[A strategy with a hidden 1% crash state: Gaussian Kelly says lever 12x, the ruin line sits at 3.3x, the true optimum is 2.6x. Sizing errors are asymmetric, so err small.]]></description><link>https://hmaquant.substack.com/p/position-sizing-under-fat-tails-when</link><guid isPermaLink="false">https://hmaquant.substack.com/p/position-sizing-under-fat-tails-when</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Thu, 27 Aug 2026 06:01:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Take a strategy with 8% annual excess return and 20% volatility, a respectable Sharpe 0.4. Ask the Kelly criterion, the formula that maximizes long-run growth of capital, how much of your wealth to allocate. The answer is &#956;/&#963;&#178; = 0.08/0.04 = 2.0. Two hundred percent. Kelly looks at a decent strategy and tells you to lever it two to one, and it is not joking: under its assumptions, that is the mathematically optimal bet.</p><p>The catch is the phrase under its assumptions. Kelly optimizes growth for a distribution you hand it, known exactly, tails included. Hand it a bell curve fitted to a backtest and it sizes you for the bell curve, not for the world that generated the backtest. Fat tails and estimation error both push the true optimum well below the textbook number, and the penalty for missing is brutally asymmetric: bet half the optimum and you keep 75% of the growth; bet double and your long-run growth is zero, with spectacular drawdowns as consolation.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post does three things: states what Kelly actually assumes, works a numeric example where the Gaussian formula recommends 12&#215; leverage on a strategy whose true optimum is 2.6&#215; and whose ruin threshold is 3.3&#215;, and turns the mess into usable guardrails, namely fractional Kelly and drawdown-based caps.</p><div><hr></div><h2>What Kelly Optimizes, and the Fine Print</h2><p>For a binary bet paying b per unit staked with win probability p, Kelly says stake f<em> = (bp &#8722; q)/b of your bankroll, where q = 1 &#8722; p. A 55% coin at even money: f</em> = (0.55 &#8722; 0.45)/1 = 10%. For a continuous asset with excess return &#956; and volatility &#963;, the analogue is f* = &#956;/&#963;&#178;. Both maximize the expected logarithm of wealth, which over many periods maximizes compound growth and eventually beats any other fixed sizing rule.</p><p>The growth rate as a function of bet size is, to second order, G(f) = f&#956; &#8722; &#189;f&#178;&#963;&#178;, a parabola. Three facts fall out. G peaks at f<em> = &#956;/&#963;&#178;. At f = 2f</em>, G is back to zero: double Kelly earns nothing in the long run, with maximal noise along the way. Beyond 2f*, growth is negative even though every single bet has positive expectation. Sit with that last one: sizing alone can convert a winning strategy into a losing one.</p><p>Now the fine print. That &#956; and &#963; must be the true parameters of the true distribution, and the quadratic form quietly assumes tails thin enough that variance summarizes risk. Both assumptions fail in markets. Edges are estimated from noisy history, with standard errors often comparable to the estimate itself, and real return distributions carry skew and jumps that variance barely registers. Since overbetting is catastrophic and underbetting merely costs some growth, every uncertainty pushes in one direction: size below naive Kelly.</p><h2>A Crash State the Bell Curve Cannot See</h2><p>Here is a monthly strategy: it earns +1.5% with probability 0.99 and loses 30% with probability 0.01, roughly one blowup per eight years. Think short-vol premium harvesting, carry, anything with a picking-up-nickels texture.</p><p>Its summary statistics are lovely. Mean: 0.99 &#215; 1.5% &#8722; 0.01 &#215; 30% = 1.485% &#8722; 0.300% = 1.185% per month. Second moment: 0.99 &#215; 0.015&#178; + 0.01 &#215; 0.30&#178; = 0.00022275 + 0.00090000 = 0.00112275; subtract the squared mean, 0.01185&#178; &#8776; 0.00014042, and the variance is 0.00098233, so &#963; &#8776; 3.13% monthly. Annualized: roughly 14.2% return on 10.9% vol, Sharpe about 1.3. A backtest that happens to miss the crash month looks even better.</p><p>Feed the mean and variance to the Gaussian Kelly formula: f* = 0.01185/0.000982 &#8776; 12. Twelve times leverage. Now look at what that does in the state the variance barely noticed: the crash month loses 12 &#215; 30% = 360% of equity. That is not a drawdown, it is a debt. In fact any f above 1/0.30 &#8776; 3.33 hits &#8722;100% in a single crash month, and the Gaussian formula recommends nearly four times past that ruin boundary, because a 1%-probability event contributes almost nothing to variance while deciding everything about survival.</p><p>The true Kelly fraction maximizes expected log growth against the actual distribution:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;g(f) = 0.99\\,\\ln(1 + 0.015f) + 0.01\\,\\ln(1 - 0.30f)&quot;,&quot;id&quot;:&quot;w3h77F9Xo5&quot;}" data-component-name="LatexBlockToDOM"></div><p>Set the derivative to zero: 0.99 &#215; 0.015/(1 + 0.015f) = 0.01 &#215; 0.30/(1 &#8722; 0.30f). Cross-multiplying, 0.01485 &#215; (1 &#8722; 0.30f) = 0.003 &#215; (1 + 0.015f), which expands to 0.01485 &#8722; 0.004455f = 0.003 + 0.000045f. Collecting terms: 0.01185 = 0.0045f, so f* &#8776; 2.63. The honest optimum is 2.63&#215;, not 12&#215;. Even that is spicy: the crash at 2.63&#215; still costs 2.63 &#215; 30% &#8776; 79% of equity, survivable in logarithm-land, career-ending in front of investors.</p><p>Estimation error stacks on top. Nobody knows the crash probability is 1% rather than 2%. Rerun the same first-order condition with a 2% crash probability and the optimum drops to about 1.9&#215;. Your position size is hostage to the least estimable number in the problem, the frequency of an event you have observed once or never. That alone justifies sizing as if your edge were smaller and your tails fatter than measured.</p><h2>Guardrails: Fractional Kelly and Drawdown Caps</h2><p>The standard industrial response is fractional Kelly: bet c&#183;f* with c around one half. The parabola makes the trade explicit: growth at fraction c is (2c &#8722; c&#178;) of the maximum, so half-Kelly keeps 75% of the growth rate while halving the position. Ed Thorp, who ran real money on these ideas for decades, generally advocated half Kelly or less for exactly these reasons.</p><p>Drawdowns give the cleanest way to choose c. For a fractional-Kelly bettor in the continuous model, the probability of ever falling to a fraction a of starting wealth is a^(2/c &#8722; 1). Full Kelly, c = 1: the chance of ever halving your bankroll is 0.5&#185; = 50%. Half Kelly: 0.5&#179; = 12.5%. Want at most a 10% lifetime chance of halving? Solve 0.5^(2/c &#8722; 1) &#8804; 0.10 and you get c &#8804; 0.46: half-Kelly derived from a risk constraint rather than folklore. That is the honest procedure: pick a drawdown you can institutionally survive, back out c, accept the growth that remains.</p><p>Note what fractional Kelly is really doing. It is not timidity; it is a hedge against model error. Running at half your estimated optimum protects you when the true optimum is half your estimate, which it very plausibly is. Under fat tails and noisy parameters the left half of the Kelly curve is forgiving and the right half is lethal. Choose which side to be wrong on.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Binary Kelly: f<em> = (bp &#8722; q)/b Gaussian Kelly: f</em> = &#956;/&#963;&#178;, with growth G(f) = f&#956; &#8722; &#189;f&#178;&#963;&#178; Growth at fraction c of Kelly: G = (2c &#8722; c&#178;) &#215; G_max, so half-Kelly keeps 75% Drawdown law: P(ever hit a &#215; W&#8320;) = a^(2/c &#8722; 1)</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Kelly maximizes long-run growth only for the exact distribution you feed it; feed it a fitted bell curve and it sizes you for a world without crashes.</p></li><li><p>In the worked example, Gaussian Kelly said 12&#215; on a strategy whose ruin threshold was 3.3&#215; and whose true optimum was 2.63&#215;; variance-based sizing can sit far beyond the point of no return.</p></li><li><p>The penalty is asymmetric: half-Kelly keeps 75% of growth, double-Kelly earns zero, and beyond that a positive-edge strategy compounds to nothing.</p></li><li><p>Estimation error compounds the problem: doubling the assumed crash probability from 1% to 2% cut the optimal size from 2.63&#215; to roughly 1.9&#215;.</p></li><li><p>Derive your Kelly fraction from a drawdown constraint; capping the lifetime chance of halving at 10% lands near 0.46 Kelly, which is why half-Kelly is the practitioner default.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #KellyCriterion #PositionSizing #RiskManagement #FatTails #TailRisk #BetSizing #DrawdownControl #MoneyManagement #PortfolioConstruction #EstimationError #Leverage #SystematicTrading</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!I9VU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!I9VU!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!I9VU!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!I9VU!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!I9VU!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!I9VU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55363,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!I9VU!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!I9VU!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!I9VU!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!I9VU!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dcb5391-a4a2-4279-bd5e-30ce54bc6b00_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Volatility Smile: What Black-Scholes Gets Wrong]]></title><description><![CDATA[Same index, same expiry, five different implied vols. The smile is the market correcting the model's thin tails, and it has been doing that since October 1987.]]></description><link>https://hmaquant.substack.com/p/the-volatility-smile-what-black-scholes</link><guid isPermaLink="false">https://hmaquant.substack.com/p/the-volatility-smile-what-black-scholes</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Wed, 26 Aug 2026 06:00:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Pull up a three-month S&amp;P 500 option chain and back out the implied volatility at every strike. Black-Scholes says you should find one number, because the model has exactly one &#963;. What you actually find looks like this: 16% at the money, 24% for puts struck 10% below spot, maybe 14.5% for calls above. Same index, same expiry, same formula, and the one parameter that is supposed to be constant changes at every strike.</p><p>That curve is the volatility smile, or in equity indices the skew, since it slopes downward. It is not a data glitch. It is the market's standing correction to the model everyone still quotes with. Take the flat-vol assumption literally and downside puts look systematically overpriced; sell them and you are not arbitraging an anomaly, you are writing crash insurance at a premium the model made up. Every vol desk, every surface fitter, every risk system lives on this object, so you should know what it is actually saying.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post covers three things: why the smile was born on one specific Monday in 1987, a fully worked two-strike example showing the market pays roughly 3.6 times the flat-vol price for tail protection, and the Breeden-Litzenberger result that turns the smile into a probability density you can read off the screen.</p><div><hr></div><h2>One &#963; Meets Black Monday</h2><p>Black-Scholes assumes the underlying follows geometric Brownian motion: continuous paths, constant volatility, lognormally distributed terminal prices. Under those assumptions implied volatility cannot depend on strike. The strike is a coordinate on the payoff, not a source of risk, so every option on the same underlying and expiry must decode to the same &#963;.</p><p>Before 1987, index option markets roughly played along, with implied vols close to flat across strikes. Then on October 19, 1987, the S&amp;P 500 fell just over 20% in a single session. With annualized vol near 20%, one daily standard deviation is about 20%/&#8730;252 &#8776; 1.26%, which makes Black Monday roughly a 16-sigma move. Under a Gaussian, that probability is a decimal point followed by dozens of zeros. It happened anyway, and the market updated in the only place it could: prices.</p><p>Ever since, out-of-the-money index puts have carried persistently higher implied vols than at-the-money options, and the skew has survived for nearly four decades. The geometry differs by market and is informative: equity indices skew downward because the feared jump is a crash; FX smiles are more symmetric because either currency can gap. The smile is a map of which tail participants pay up for.</p><p>Keep one framing in mind: implied volatility is a quote convention, not a belief. Traders call it the wrong number you put into the wrong formula to get the right price. The smile is how a lognormal formula gets bent, strike by strike, into quoting a non-lognormal world.</p><h2>Two Strikes, One Lesson: Pricing the Left Tail</h2><p>Make the correction concrete. Index at S = 100, T = 0.25 years, rates at zero so the arithmetic stays clean. The market shows 16% implied vol at the K = 100 strike and 24% at the K = 90 put. Question: how much money is that 8-point vol gap? Price the 90-strike put both ways with the Black-Scholes put formula P = K&#183;&#934;(&#8722;d&#8322;) &#8722; S&#183;&#934;(&#8722;d&#8321;), where &#934; is the standard normal CDF.</p><p><strong>Flat-vol world, &#963; = 16%.</strong> Here &#963;&#8730;T = 0.16 &#215; 0.5 = 0.08 and ln(100/90) &#8776; 0.1054. Then d&#8321; = (0.1054 + 0.5 &#215; 0.16&#178; &#215; 0.25)/0.08 = (0.1054 + 0.0032)/0.08 &#8776; 1.357, and d&#8322; = 1.357 &#8722; 0.08 = 1.277. From the normal table, &#934;(&#8722;1.357) &#8776; 0.0874 and &#934;(&#8722;1.277) &#8776; 0.1008. So P = 90 &#215; 0.1008 &#8722; 100 &#215; 0.0874 = 9.07 &#8722; 8.74 = 0.33.</p><p><strong>Market world, &#963; = 24%.</strong> Now &#963;&#8730;T = 0.12. Then d&#8321; = (0.1054 + 0.5 &#215; 0.24&#178; &#215; 0.25)/0.12 = (0.1054 + 0.0072)/0.12 &#8776; 0.938, and d&#8322; = 0.938 &#8722; 0.12 = 0.818. From the table, &#934;(&#8722;0.938) &#8776; 0.1741 and &#934;(&#8722;0.818) &#8776; 0.2067. So P = 90 &#215; 0.2067 &#8722; 100 &#215; 0.1741 = 18.60 &#8722; 17.41 = 1.19.</p><p>Same option. The model that takes its own constant-&#963; assumption seriously says 0.33; the market pays 1.19, roughly 3.6 times as much. That ratio is the price of disbelief in thin tails, and it grows as you move further out: at more extreme strikes the flat-vol price collapses toward zero faster than the market price does, so the multiplier gets larger, not smaller.</p><p>Two forces sit inside that 3.6&#215;. First, the market assigns genuinely more probability to a 10% drop over three months than the lognormal does. Second, a crash is exactly when volatility explodes, correlations head toward one and marginal utility is high, so sellers of that put demand a risk premium on top of the raw probability. Implied vol bundles both, which is why you cannot read real-world odds straight off the smile.</p><h2>The Smile Is a Probability Density in Disguise</h2><p>Here is the cleanest way to see what the smile encodes. A tight butterfly of calls, long one struck at K &#8722; h, short two at K, long one at K + h, pays out only if the index expires near K. Its price is therefore proportional to the risk-neutral probability of finishing there. Take the limit h &#8594; 0 and you get the Breeden-Litzenberger result from 1978:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;q(K) = e^{rT}\\,\\frac{\\partial^2 C}{\\partial K^2}&quot;,&quot;id&quot;:&quot;woxVWtPl9P&quot;}" data-component-name="LatexBlockToDOM"></div><p>The second derivative of the call price curve in strike is the market's risk-neutral density for the terminal price. Nothing is required beyond no-arbitrage and smooth prices. Run this on a flat-vol surface and you recover the lognormal. Run it on the actual post-1987 surface and you get a density with a fat, stretched left tail and a thinner right tail: more mass on crashes, less on melt-ups, exactly what the put skew was saying in vol units.</p><p>This matters beyond vanilla quoting. Exotics and structured payoffs must be priced against the market's density, not the model's, or the desk quietly marks itself wrong. Shifts in the smile are also information: a steepening index skew means someone is paying more for crash protection, before any headline explains why. Just keep the caveat from the previous section: q(K) is risk-neutral, a blend of probability and risk premium, and separating the two is a research problem, not a screen you can pull up.</p><blockquote><h3>&#128273; Key Formulas</h3><p>d&#8321; = [ln(S/K) + (r + &#963;&#178;/2)&#183;T] / (&#963;&#8730;T),  d&#8322; = d&#8321; &#8722; &#963;&#8730;T Put price: P = K&#183;e^(&#8722;rT)&#183;&#934;(&#8722;d&#8322;) &#8722; S&#183;&#934;(&#8722;d&#8321;) Breeden-Litzenberger density: q(K) = e^(rT) &#183; &#8706;&#178;C/&#8706;K&#178; Skew reading: higher IV at low strikes &#8660; fatter left tail than lognormal</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Black-Scholes with one constant &#963; implies one implied vol across all strikes; markets have refused to price that way since October 1987, a roughly 16-sigma day under the model's own assumptions.</p></li><li><p>The equity index skew is crash insurance made visible: in the worked example, an 8-point vol gap made a 10% out-of-the-money put worth 1.19 instead of 0.33, roughly 3.6 times the flat-vol price.</p></li><li><p>Implied volatility is a quoting convention; the smile is the market forcing a lognormal formula to output non-lognormal prices.</p></li><li><p>Breeden-Litzenberger turns the strike curve into a risk-neutral density: butterflies are probability bets, and the second derivative of call prices in strike is the distribution.</p></li><li><p>The risk-neutral density mixes true probabilities with risk premia, so the smile overstates real-world crash odds by some hard-to-pin-down amount.</p></li><li><p>If your model assumes flat vol, the smile is not the market being wrong about your model; it is the market being right about the world.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #VolatilitySmile #ImpliedVolatility #VolatilitySkew #BlackScholes #OptionsTrading #OptionsPricing #TailRisk #CrashRisk #RiskNeutralDensity #DerivativesPricing #FinancialEngineering #Volatility</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!g2Gu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!g2Gu!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!g2Gu!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!g2Gu!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!g2Gu!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!g2Gu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52609,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!g2Gu!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!g2Gu!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!g2Gu!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!g2Gu!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b75557-9362-45f5-a0aa-598f9eaf8afa_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Survivorship Bias and Other Data Landmines]]></title><description><![CDATA[Drop one dead stock from a five-stock backtest and 3.85% a year becomes 11.87%. Most fake alpha is a data problem, not a genius problem.]]></description><link>https://hmaquant.substack.com/p/survivorship-bias-and-other-data</link><guid isPermaLink="false">https://hmaquant.substack.com/p/survivorship-bias-and-other-data</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Tue, 25 Aug 2026 06:01:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/70d8acff-0512-4c15-a226-48699496eec4_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Backtest five equal-weighted stocks over three years. Four compound nicely; the fifth delists worthless in year two. Include the corpse and the portfolio earns 3.85% a year. Build the "same" backtest from today's ticker list, where the corpse never existed, and it earns 11.87%. Eight percentage points of annual ghost alpha from a single data decision.</p><p>This is not an edge case. Over any multi-decade sample a large fraction of listed US stocks delisted, and the ones removed for cause went out badly: classic academic work on the CRSP files found average delisting returns around &#8722;30% for performance-related delistings on the NYSE and AMEX, and far worse on Nasdaq. Free and retail-grade datasets usually carry only live tickers. The same ghost inflates mutual fund databases, index studies, and factor research, which is how fake edges get funded and then evaporate in production.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post works the survivorship arithmetic in full, tours the other landmines (index reconstitution, restated fundamentals, dividend and split adjustments, backfill), and closes with the checklist to run before trusting any backtest, including your own.</p><div><hr></div><h2>The Graveyard Doesn't Report Returns</h2><p>Put $100 across five stocks, $20 each, and hold for three years. Total growth factors: A 1.60, B 1.45, C 1.30, D 1.25, and E, which delists at 0.00.</p><p>Full universe: terminal wealth = 20 &#215; (1.60 + 1.45 + 1.30 + 1.25 + 0.00) = 20 &#215; 5.60 = $112. The annualized growth rate is</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\mathrm{CAGR} = \\left(\\frac{V_T}{V_0}\\right)^{1/T} - 1&quot;,&quot;id&quot;:&quot;773zD7Ar2D&quot;}" data-component-name="LatexBlockToDOM"></div><p>which gives 1.12^(1/3) &#8722; 1 &#8776; 3.85% per year.</p><p>Survivor-only: a dataset built from today's listings contains only A through D. Equal-weighting them gives an average factor of (1.60 + 1.45 + 1.30 + 1.25)/4 = 1.40, so $100 grows to $140 and the CAGR is 1.40^(1/3) &#8722; 1 &#8776; 11.87% per year.</p><p>Same strategy, same period, same four winners. Omitting one stock in five tripled the measured growth rate, roughly 8 points a year of alpha that never existed. Note what the bias rewards: any strategy that loads on risky, failure-prone names looks best in survivor-only data, because the dataset quietly deletes exactly the outcomes that would punish it. Small-cap value screens, distressed-stock reversal signals, and high-yield strategies are the usual victims. Mutual funds have the same disease: classic studies put survivorship bias in fund databases at roughly half a point to a full point of annual performance, since dead funds are disproportionately the bad ones.</p><h2>Four More Landmines</h2><h3>Index reconstitution</h3><p>Backtesting "S&amp;P 500 stocks" using today's membership list means holding companies years before the index committee added them, which is just pre-selecting winners. Membership turns over by dozens of names a year, and additions have usually already outperformed. Use dated, point-in-time constituent lists, or your universe definition is itself a look-ahead signal.</p><h3>Restated fundamentals</h3><p>Databases love to overwrite history with restated figures, so your backtest trades in 2015 on numbers that were published in 2017. Use as-reported, point-in-time fundamentals and lag them by a realistic publication delay, 45 to 90 days, because the annual report does not arrive on December 31.</p><h3>Dividend and split adjustments</h3><p>Price-only series understate equity returns by the dividend yield, roughly two to four points a year depending on the era, which is enough to flip a strategy's sign. Unadjusted splits are worse: a 2-for-1 split looks like a 50% overnight crash, and a mean-reversion signal will happily "buy" it every time. Use total-return, split-adjusted series, then verify a handful of known splits and dividends by hand anyway.</p><h3>Backfill</h3><p>Hedge fund databases let funds join with their pre-inclusion track record attached, and funds only start reporting after the early years went well. Estimates of this instant-history bias run to a few points a year. Filter to returns earned after each fund entered the database, and be suspicious of any track record that begins with a hot streak.</p><h2>A Pre-Backtest Data Checklist</h2><p>Ten minutes with this list is cheaper than ten months trading a mirage:</p><ol><li><p>The universe is defined point-in-time and includes delisted securities.</p></li><li><p>Delisting returns exist and are applied; where missing, assume something ugly rather than nothing.</p></li><li><p>Fundamentals are as-reported and lagged by a realistic publication delay.</p></li><li><p>Prices are total-return and split-adjusted, spot-checked by hand on a few corporate actions.</p></li><li><p>Index membership is dated, never current.</p></li><li><p>Backfilled history is flagged and excluded.</p></li><li><p>Extreme returns are inspected individually; a +10,000% print is usually a data error, not a lottery ticket.</p></li><li><p>Aggregate sanity check: the cap-weighted return of your universe should approximate the published index. If your "market" beats the market, your data does too, and nothing downstream can be trusted.</p></li></ol><blockquote><h3>&#128273; Key Formulas</h3><p>CAGR: (V_T/V&#8320;)^(1/T) &#8722; 1 Total return: r&#8348; = (P&#8348; + D&#8348;)/P&#8348;&#8331;&#8321; &#8722; 1 Compounding: V_T = V&#8320; &#215; &#928;(1 + r&#8348;) Survivorship gap: CAGR_survivors &#8722; CAGR_full, here 11.87% &#8722; 3.85% &#8776; 8 points</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Deleting one dead stock in five turned a 3.85% strategy into an 11.87% one, and the inflation is worst for exactly the risky strategies you most need to test honestly.</p></li><li><p>Delisting returns are large and negative on average, so a universe without dead tickers is not a smaller sample, it is a biased one.</p></li><li><p>Point-in-time discipline applies to everything: constituents, fundamentals, and even the definition of the universe itself.</p></li><li><p>Dividends, splits, and restatements corrupt signals silently, and total-return, as-reported data is the only real defense.</p></li><li><p>Backfill bias means a database's early history is a marketing document until you filter to post-inclusion returns.</p></li><li><p>Always rebuild the index from your own data as a sanity check: if your market beats the market, fix the data, not the strategy.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #SurvivorshipBias #Backtesting #DataQuality #LookAheadBias #DelistedStocks #IndexReconstitution #PointInTime #TotalReturn #AlgorithmicTrading #QuantResearch #FactorInvesting #DataScience</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!uRvC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!uRvC!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!uRvC!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!uRvC!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!uRvC!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!uRvC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70d8acff-0512-4c15-a226-48699496eec4_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46757,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!uRvC!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!uRvC!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!uRvC!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!uRvC!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70d8acff-0512-4c15-a226-48699496eec4_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Bootstrapping the Yield Curve: From Market Quotes to Discount Factors]]></title><description><![CDATA[One deposit rate and two swap quotes pin down three discount factors. That recursion, industrialized, prices every cash flow a bank owns.]]></description><link>https://hmaquant.substack.com/p/bootstrapping-the-yield-curve-from</link><guid isPermaLink="false">https://hmaquant.substack.com/p/bootstrapping-the-yield-curve-from</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Mon, 24 Aug 2026 06:01:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Three quotes on a screen: a 1-year deposit at 4.00%, a 2-year annual-pay swap at 4.50%, a 3-year at 5.00%. From just these, a desk must produce the exact price today of one dollar arriving in one, two, and three years: 0.961538, 0.915532, 0.862997. Those three numbers are quoted nowhere. They are bootstrapped.</p><p>Discount factors are the atoms of fixed income. Every swap, bond, and structured note prices as cash flows multiplied by discount factors, and a curve that is off by a basis point in the wrong place moves the P&amp;L of a large book by millions. Curve construction is invisible when done well, which is exactly why banks staff it full time.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post bootstraps that three-point curve step by step with exact arithmetic, extracts zero and forward rates from the discount factors, and explains why the industrial version of this exercise is a career rather than a spreadsheet afternoon.</p><div><hr></div><h2>Discount Factors Are the Atoms</h2><p>A discount factor DF(t) is the price today of one unit of currency delivered at time t. Nothing more. If DF(2) = 0.915532, a dollar in two years costs 91.5532 cents now. Zero rates, par rates, and forward rates are just different quoting conventions for the same object, the way miles and kilometers describe one distance. Price of a bond: multiply each cash flow by its DF and add. Value of a swap: same operation, two legs. This is why a curve team's real output is a discount function, not a list of yields.</p><p>The catch is that markets do not quote discount factors. They quote instruments: deposits, futures, swaps, each a bundle of cash flows. Bootstrapping is the inversion: start at the short end, peel off one new discount factor per instrument, and reuse everything already pinned down. For clean arithmetic we use annual periods and ignore day-count conventions; reality adds them back with enthusiasm.</p><h2>The Bootstrap, One Instrument at a Time</h2><p>Step 1, the deposit. Invest 1 today, receive 1.04 in one year, so DF(1) = 1/1.04 = 0.961538.</p><p>Step 2, the 2-year par swap at S&#8322; = 4.50%. A par swap rate is the fixed coupon that makes a bond price at par: S&#8322; &#215; (DF(1) + DF(2)) + DF(2) = 1. The only unknown is DF(2), and the general recursion is</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;DF_n = \\frac{1 - S_n \\sum_{i=1}^{n-1} DF_i}{1 + S_n}&quot;,&quot;id&quot;:&quot;j4ahOLUdqN&quot;}" data-component-name="LatexBlockToDOM"></div><p>Numerically: 0.045 &#215; 0.961538 = 0.043269, so DF(2) = (1 &#8722; 0.043269)/1.045 = 0.956731/1.045 = 0.915532.</p><p>Step 3, the 3-year swap at 5.00%. The annuity so far is DF(1) + DF(2) = 1.877070. Then 0.05 &#215; 1.877070 = 0.0938535, and DF(3) = (1 &#8722; 0.0938535)/1.05 = 0.9061465/1.05 = 0.862997.</p><p>Now the check that separates professionals from tourists: reprice the inputs. The 2-year: 0.045 &#215; 1.877070 + 0.915532 = 0.084468 + 0.915532 = 1.000000. The 3-year, with annuity 2.740067: 0.05 &#215; 2.740067 + 0.862997 = 0.137003 + 0.862997 = 1.000000. The curve reprices both swaps to par at the sixth decimal. A bootstrap that does not close like this is wrong, not approximately right.</p><p>Zero rates fall out directly: z&#8321; = 1/0.961538 &#8722; 1 = 4.000%, z&#8322; = (1/0.915532)^(1/2) &#8722; 1 &#8776; 4.511%, z&#8323; = (1/0.862997)^(1/3) &#8722; 1 &#8776; 5.034%. Notice the zeros sit above the par rates of 4.00, 4.50, 5.00 on this upward-sloping curve: a par bond pays some of its cash early at lower rates, so its single blended rate gets dragged down.</p><h2>Forward Rates: What the Curve Says About Next Year</h2><p>Forwards are ratios of discount factors. The rate for year two, agreed today, is f(1,2) = DF(1)/DF(2) &#8722; 1 = 0.961538/0.915532 &#8722; 1 &#8776; 5.025%. For year three, f(2,3) = 0.915532/0.862997 &#8722; 1 &#8776; 6.088%. Consistency check: 1.04 &#215; 1.050251 &#215; 1.060875 &#8776; 1.158752, which matches 1/DF(3) = 1.158753 up to rounding. The chain closes.</p><p>Read the progression. Par rates of 4.00, 4.50, 5.00 hide a forward path of 4.00, 5.03, 6.09. Par rates are averages over the whole life of the swap; forwards are the marginal, breakeven rates for each future year, and they always amplify the slope. That amplification is also why forwards are where curve mistakes surface first: a zero curve that looks perfectly smooth can imply a sawtooth forward curve, and desks hedge off the forwards.</p><h2>Why Banks Pay People to Do This Full Time</h2><p>Scale the toy up and every simplification bites. A production curve fits dozens of instruments: deposits and OIS at the short end, futures with convexity adjustments in the belly, swaps out to 50 years, all with real day counts, holiday calendars, and settlement lags. Since 2008 the framework is multi-curve: cash flows are discounted on an OIS or SOFR curve while floating projections come from separate forward curves, and the LIBOR-to-SOFR transition forced the entire stack to be rebuilt industry-wide. Interpolation is a genuine modelling choice with P&amp;L consequences: linear on log discount factors versus monotone cubic schemes on forwards can move implied forward rates by several basis points even when every input instrument reprices exactly. And risk runs through the same machinery: bump each input quote, rebootstrap, reprice the book, and you get the delta ladder every rates desk lives by. Repricing your inputs is table stakes. Smooth, stable, arbitrage-free forwards are the craft.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Deposit: DF(1) = 1/(1 + r&#8321;) Par swap bootstrap: DF(n) = (1 &#8722; S&#8345; &#215; [DF(1) + &#8230; + DF(n&#8722;1)])/(1 + S&#8345;) Zero rate: z&#8345; = DF(n)^(&#8722;1/n) &#8722; 1 Forward rate: f(t, t+1) = DF(t)/DF(t+1) &#8722; 1</p></blockquote><h2>Key Takeaways</h2><ul><li><p>A discount factor is the price today of one future dollar, and it is the atom from which every fixed-income price is built.</p></li><li><p>Bootstrapping inverts tradable quotes into discount factors one maturity at a time, reusing everything already pinned down.</p></li><li><p>Our three quotes give DF = 0.961538, 0.915532, 0.862997, and the finished curve reprices both swaps to par at the sixth decimal.</p></li><li><p>Forwards are ratios of discount factors and amplify the slope: a 4.00/4.50/5.00 par curve hides a 6.09% forward for year three.</p></li><li><p>Zero rates sit above par rates on an upward-sloping curve because par rates blend in the cheaper early coupons.</p></li><li><p>Production curves add multi-curve discounting, convexity adjustments, and interpolation choices, which is why construction is a full-time job and not a formula.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #YieldCurve #FixedIncome #InterestRates #Bootstrapping #DiscountFactors #Swaps #ForwardRates #BondMath #RatesTrading #SOFR #CurveConstruction #Derivatives</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0uif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0uif!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!0uif!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!0uif!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0uif!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0uif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:67398,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0uif!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!0uif!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!0uif!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0uif!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a9bdb1a-51bd-4cd9-bab4-2de3104c2d25_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Risk Parity: Balancing Risk, Not Dollars]]></title><description><![CDATA[A 60/40 portfolio takes 90% of its risk from one asset class. Risk parity fixes that arithmetic, and 2022 stress-tested the premise.]]></description><link>https://hmaquant.substack.com/p/risk-parity-balancing-risk-not-dollars</link><guid isPermaLink="false">https://hmaquant.substack.com/p/risk-parity-balancing-risk-not-dollars</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Sun, 23 Aug 2026 06:01:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Take the classic 60/40: 60% stocks at 16% volatility, 40% bonds at 6%, correlation 0.2. Portfolio volatility comes out at 10.35%, and when you decompose it, equities contribute 90.3% of the risk. The most famous "balanced" portfolio in finance is a stock portfolio with a bond garnish.</p><p>The problem is that diversification gets measured in dollars while portfolios get hurt in risk units. Risk does not follow capital weights; it follows volatilities and correlations, and it concentrates quietly. Risk parity, the idea behind Bridgewater's All Weather fund launched in 1996 (the name itself was coined by Edward Qian in 2005), starts from the other end: equalize risk contributions first, then use leverage to reach the return you need.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post shows the 60/40 decomposition with every number visible, builds a three-asset inverse-volatility portfolio, levers it to a 10% volatility target, and then walks through 2022, the year the strategy's core assumption got stress-tested.</p><div><hr></div><h2>Your 60/40 Is a Stock Portfolio With a Garnish</h2><p>Two-asset portfolio variance:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\sigma_p^2 = w_s^2\\sigma_s^2 + w_b^2\\sigma_b^2 + 2\\,w_s w_b\\,\\rho\\,\\sigma_s\\sigma_b&quot;,&quot;id&quot;:&quot;T5XWo5aDv9&quot;}" data-component-name="LatexBlockToDOM"></div><p>Plug in w_s = 0.6, w_b = 0.4, &#963;_s = 0.16, &#963;_b = 0.06, &#961; = 0.2:</p><ul><li><p>Equity term: 0.36 &#215; 0.0256 = 0.009216</p></li><li><p>Bond term: 0.16 &#215; 0.0036 = 0.000576</p></li><li><p>Cross term: 2 &#215; 0.6 &#215; 0.4 &#215; 0.2 &#215; 0.16 &#215; 0.06 = 0.000922</p></li></ul><p>Total variance 0.010714, so &#963;_p &#8776; 10.35%. Now attribute it. The risk contribution of asset i is RC&#7522; = w&#7522; &#215; Cov(r&#7522;, r_p)/&#963;_p, and by Euler's theorem these contributions sum exactly to &#963;_p, so risk budgeting is a well-posed exercise. Splitting the cross term equally between the two assets: stocks get 0.009216 + 0.000461 = 0.009677, which is 90.3% of the variance; bonds get 0.000576 + 0.000461 = 0.001037, or 9.7%.</p><p>The intuition is brutal. Stocks carry 9.6 points of weighted volatility (0.6 &#215; 16) against bonds' 2.4 (0.4 &#215; 6), and variance squares that 4-to-1 ratio into 16-to-1. This is why every big 60/40 drawdown is an equity drawdown wearing a diversified costume.</p><h2>Risk Parity on a Napkin</h2><p>The simplest fix is to weight by inverse volatility, w&#7522; &#8733; 1/&#963;&#7522;. Add commodities at 12% vol to stocks at 16% and bonds at 6%. The inverse vols are 1/0.16 = 6.25, 1/0.06 = 16.67, 1/0.12 = 8.33, summing to 31.25. Weights: stocks 6.25/31.25 = 20%, bonds 16.67/31.25 = 53.3%, commodities 8.33/31.25 = 26.7%.</p><p>Check the risk budgets: each asset's weighted vol w&#7522;&#963;&#7522; is 0.20 &#215; 16 = 3.2 points, 0.533 &#215; 6 = 3.2, 0.267 &#215; 12 = 3.2. Equal by construction. This is "naive" risk parity because it ignores correlations, though there is a tidy fact hiding here: when all pairwise correlations are equal, inverse-vol weights are exactly the equal-risk-contribution portfolio. With &#961; = 0.2 between every pair, portfolio variance is 3 &#215; 0.032&#178; + 2 &#215; 0.2 &#215; 3 &#215; 0.032&#178; = 0.003072 + 0.001229 = 0.004301, so &#963;_p &#8776; 6.6%. Half the volatility of 60/40, with no asset dominating.</p><h2>Leverage Is the Point, Not the Bug</h2><p>A 6.6% vol portfolio is calm but underpowered for most return targets. Risk parity's answer is explicit leverage: scale every position by L = &#963;_target/&#963;_p. For a 10% target, L = 10/6.56 &#8776; 1.52, and the book becomes 30.4% stocks, 81.1% bonds, 40.5% commodities, 152% gross exposure, financed by borrowing 52 cents per invested dollar at roughly the cash rate.</p><p>Why bother? Most investors cannot or will not lever, so they reach for return by concentrating in high-volatility assets instead. That crowds the high-vol end of markets and, per the leverage-aversion literature, leaves levered portfolios of lower-risk assets with better risk-adjusted returns. Risk parity harvests this by holding the diversified low-vol mix and scaling it to taste. The costs are just as explicit: financing sits at cash plus a spread, so a 5% cash rate raises the hurdle on the whole levered book; and leverage plus a vol target means the fund de-levers when volatility spikes, which usually means selling into weakness.</p><h2>2022: When Both Legs Buckled</h2><p>For roughly two decades the stock-bond correlation was negative and risk parity looked like a free lunch with extra steps. Then 2022 delivered an inflation shock and the fastest Fed hiking cycle since the early 1980s. The S&amp;P 500 returned roughly &#8722;18%; the Bloomberg US Aggregate lost roughly 13%, its worst calendar year on record. The correlation flipped positive, a levered balanced book had nowhere to hide, and many risk parity funds posted losses in the high teens, in some cases worse than plain 60/40, with vol-target deleveraging locking part of it in.</p><p>The fair reading is not "risk parity is broken". The premise was never that bonds always hedge stocks; it is balance across economic environments. Nominal stocks and nominal bonds share one enemy, an inflation shock, so a two-asset version is unbalanced against exactly that scenario. The sleeves that answer to inflation did their job: broad commodity indices finished 2022 up double digits, cushioning the three-asset toy above. The 2022 lesson is about construction, not concept: equalizing risk across assets is not the same as equalizing it across the states of the world that hurt you.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Portfolio variance: &#963;_p&#178; = &#931;&#7522; w&#7522;&#178;&#963;&#7522;&#178; + 2 &#931;_(i&lt;j) w&#7522;w&#11388;&#961;&#7522;&#11388;&#963;&#7522;&#963;&#11388; Risk contribution: RC&#7522; = w&#7522;(&#931;w)&#7522;/&#963;_p with &#931;&#7522; RC&#7522; = &#963;_p (&#931; the covariance matrix) Inverse-vol weights: w&#7522; = (1/&#963;&#7522;)/&#931;&#11388;(1/&#963;&#11388;) Leverage to target: L = &#963;_target/&#963;_p</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Dollar balance is not risk balance: a standard 60/40 draws 90.3% of its variance from equities once you run the decomposition.</p></li><li><p>Risk contributions RC&#7522; = w&#7522;(&#931;w)&#7522;/&#963;_p sum exactly to portfolio volatility, so a risk budget is something you can actually enforce.</p></li><li><p>Inverse-vol weighting equalizes each asset's risk budget in one line of arithmetic, and it is the exact ERC portfolio when correlations are uniform.</p></li><li><p>Leverage is the honest part of the design: it converts a well-balanced low-vol mix into the return stream investors actually need, at the price of financing costs and forced deleveraging risk.</p></li><li><p>In 2022 an inflation shock turned the stock-bond correlation positive, both legs fell together, and levered balanced books had one of their worst years.</p></li><li><p>Balance across asset classes only protects you if it is also balance across the economic environments that can hurt you.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #RiskParity #PortfolioConstruction #AssetAllocation #Diversification #Leverage #VolTargeting #RiskManagement #Bonds #Equities #PortfolioTheory #AllWeather #Investing</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!n5h9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!n5h9!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!n5h9!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!n5h9!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!n5h9!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!n5h9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41923,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!n5h9!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!n5h9!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!n5h9!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!n5h9!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8717e0a-913d-4b65-a59a-8cd87c6e64d2_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The VIX, Demystified: What the Fear Index Actually Measures]]></title><description><![CDATA[Five option prices and one formula get you to a VIX of 22.0. It is a variance swap in disguise, which is exactly why VIX ETPs decay.]]></description><link>https://hmaquant.substack.com/p/the-vix-demystified-what-the-fear</link><guid isPermaLink="false">https://hmaquant.substack.com/p/the-vix-demystified-what-the-fear</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Sat, 22 Aug 2026 06:00:59 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>On February 5, 2018, the VIX roughly doubled in one session, its largest one-day percentage jump on record. XIV, an exchange-traded note betting against it, lost more than 90% of its indicative value after the close and was terminated within weeks. Its holders thought they were short a fear gauge. They were short a very specific portfolio of S&amp;P 500 options.</p><p>The VIX gets quoted like a mood ring, but nobody surveys anyone. The index is the square root of a 30-day risk-neutral variance, extracted from out-of-the-money SPX option prices by a formula that needs no pricing model. Once you see the machinery, you know exactly what moves it, why it spikes when it spikes, and why products built on its futures are engineered to bleed.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post covers the replication idea behind model-free variance, the actual formula, a five-strike toy VIX you can verify with a calculator, and the futures term structure that quietly taxes every long-volatility ETP.</p><div><hr></div><h2>A Price, Not a Poll</h2><p>Suppose you want today's fair price of the S&amp;P 500's variance over the next 30 days, without trusting Black-Scholes or any other model. There is a classical answer: hold a strip of options across all strikes. A single option's sensitivity to variance is concentrated near its own strike, so if you want exposure to variance wherever the index wanders, you hold every out-of-the-money option and weight each one by 1/K&#178;. That weighting makes the strip replicate a log contract, and a log contract plus dynamic futures hedging replicates realized variance. This is the Neuberger and Demeterfi-Derman-Kamal-Zou result from the 1990s, and it is the engine of every variance swap desk.</p><p>CBOE rebuilt the VIX on this idea in 2003; the original 1993 version was just an average of at-the-money implied volatilities. The modern index computes</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\sigma^2 = \\frac{2}{T}\\sum_i \\frac{\\Delta K_i}{K_i^2}\\,e^{RT} Q(K_i) - \\frac{1}{T}\\left(\\frac{F}{K_0}-1\\right)^2&quot;,&quot;id&quot;:&quot;Sp0rcHx4l5&quot;}" data-component-name="LatexBlockToDOM"></div><p>where Q(K&#7522;) is the midquote of the OTM option at strike K&#7522;, F is the forward, K&#8320; is the first strike at or below F, and the last term is a small correction. Two expirations bracketing 30 days are interpolated, and VIX = 100 &#215; &#963;. In plain terms, VIX&#178; is the market price of a 30-day variance swap on the S&amp;P 500. When dealers mark up crash insurance, the VIX rises, whatever the mood on television.</p><h2>A Five-Strike Toy VIX</h2><p>Strip the machine down to five strikes. Set r = 0, T = 30/365, forward F = 100, K&#8320; = 100, strikes at 90, 95, 100, 105, 110, so &#916;K = 5 everywhere. Toy midquotes: put(90) = 0.25, put(95) = 0.80, the average of the 100-strike put and call = 2.30, call(105) = 0.45, call(110) = 0.10. Notice the put 5 points OTM costs almost twice the call 5 points OTM. That is equity skew, and the formula prices it in without comment.</p><p>Each strike contributes (&#916;K/K&#178;) &#215; Q. In units of 10&#8315;&#8308;:</p><ul><li><p>K = 90: (5/8100) &#215; 0.25 = 1.543</p></li><li><p>K = 95: (5/9025) &#215; 0.80 = 4.432</p></li><li><p>K = 100: (5/10000) &#215; 2.30 = 11.500</p></li><li><p>K = 105: (5/11025) &#215; 0.45 = 2.041</p></li><li><p>K = 110: (5/12100) &#215; 0.10 = 0.413</p></li></ul><p>The sum is 19.93 &#215; 10&#8315;&#8308; = 0.001993. With F = K&#8320; the correction term is exactly zero. Then &#963;&#178; = (2/T) &#215; 0.001993 = 24.333 &#215; 0.001993 &#8776; 0.0485, so &#963; &#8776; 0.2202. Toy VIX: 22.0.</p><p>Two things are worth noticing. The at-the-money strike contributes about 58% of the total, but the wings matter, and the 1/K&#178; weights make the put side count for more: the 90 strike carries 6.17 &#215; 10&#8315;&#8308; of weight per unit of premium versus 4.13 &#215; 10&#8315;&#8308; for the 110. The index is structurally more sensitive to downside insurance, which is why it behaves like a fear gauge without measuring fear. Second, our five-strike truncation understates the true number slightly; the real calculation uses every listed strike outward until it hits two consecutive zero bids, hundreds of options on a normal day.</p><h2>Contango Tax: Why VIX ETPs Bleed</h2><p>You cannot buy the VIX. It is a number recomputed from option quotes, and holding "spot VIX" would mean holding the entire strip and rebalancing it continuously. What actually trades are VIX futures, and the ETPs hold those. The futures curve spends most of its life in contango, upward sloping, roughly four days in five historically, because sellers of forward volatility demand a premium over a mean-reverting spot index.</p><p>A long VIX ETP holds a constant-maturity mix of first- and second-month futures, selling the cheapening front and buying the richer back, day after day. As each future ages it slides down the curve toward spot, and the roll cost compounds ferociously: the best-known long VIX ETNs have lost more than 99% of their value since inception, surviving only through repeated reverse splits. These products are hedges with fast-burning fuses, not investments.</p><p>The mirror image is the variance risk premium: the VIX has averaged a few volatility points above the realized volatility that followed it. Short-vol products harvested that premium for years, in XIV's case compounding several-fold, and then February 2018 collected the insurance payout in one afternoon. Both sides of this market are paid, or charged, for the same thing: variance insurance. The formula tells you the premium, the term structure tells you the carry, and neither one is a mood.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Model-free variance: &#963;&#178; = (2/T) &#931;&#7522; (&#916;K&#7522;/K&#7522;&#178;) e^(RT) Q(K&#7522;) &#8722; (1/T)(F/K&#8320; &#8722; 1)&#178; Index level: VIX = 100 &#215; &#8730;(30-day risk-neutral variance) Strip weighting: each OTM option enters with weight &#916;K/K&#178; Contango roll cost: carry &#8776; &#8722;(F&#8322; &#8722; F&#8321;)/F&#8321; per roll cycle</p></blockquote><h2>Key Takeaways</h2><ul><li><p>The VIX is the square root of a 30-day risk-neutral variance computed from OTM SPX option prices; there is no model and no survey anywhere in it.</p></li><li><p>The 1/K&#178; weights come from log-contract replication, which makes VIX&#178; essentially the quote on a 30-day variance swap.</p></li><li><p>Five strikes and a calculator reproduce the machine: our toy strip prices 30-day volatility at 22.0.</p></li><li><p>The weighting is mechanically tilted toward downside strikes, so demand for crash insurance moves the index more than call speculation does.</p></li><li><p>VIX futures sit in contango roughly four days in five, so long ETPs pay a roll cost that compounds into near-total long-run decay.</p></li><li><p>The variance risk premium is real and collectible, and February 2018 stands as the permanent reminder of what it is compensation for.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #VIX #Volatility #Options #ImpliedVolatility #VarianceSwap #Derivatives #RiskNeutral #TermStructure #VolatilityTrading #OptionsTrading #MarketRisk #FearIndex</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0LLj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0LLj!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!0LLj!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!0LLj!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0LLj!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0LLj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51135,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0LLj!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!0LLj!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!0LLj!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0LLj!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b282be1-db63-4be5-8880-1ce4c9633d01_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Mean Reversion and the Ornstein-Uhlenbeck Process: Trading Half-Lives]]></title><description><![CDATA[An AR(1) slope of 0.94 is an 11-day half-life. Here is how to turn one regression into entries, exits, position sizes, and a kill switch.]]></description><link>https://hmaquant.substack.com/p/mean-reversion-and-the-ornstein-uhlenbeck</link><guid isPermaLink="false">https://hmaquant.substack.com/p/mean-reversion-and-the-ornstein-uhlenbeck</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Fri, 21 Aug 2026 06:01:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Fit an AR(1) regression to the daily level of a spread you like and suppose the slope comes back at 0.94. It looks like a nothing number. It is a clock: roughly 6% of any dislocation decays per day, so half of today's mispricing should be gone in about 11 trading days. Most people who trade mean reversion never compute this, then act surprised when their holding periods feel random.</p><p>Speed is the difference between a mean-reversion trade and a mean-reversion story. Two spreads can both "revert" while one pays you 22 times a year and the other ties up capital for a quarter. The half-life sets your expected profit per day, how wide your entry threshold should be, when a position is officially broken, and how many independent bets your capital cycles through annually. Sharpe ratios live or die on that last one.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post gives you the Ornstein-Uhlenbeck process, the standard model behind the words, then a worked estimate of the reversion speed &#954; from a regression you already know how to run, position rules that scale with z-score and half-life, and the failure mode that actually kills these books: the day reversion quietly stops.</p><div><hr></div><h2>The Rubber Band Before the SDE</h2><p>Picture a ball tied to a peg by a rubber band and kicked around by noise. The further it strays, the harder the band pulls it back. Pull proportional to distance, kicks that never stop: that tug-of-war is the entire model. In symbols it is the Ornstein-Uhlenbeck (OU) process:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;dX_t = \\kappa(\\theta - X_t)\\,dt + \\sigma\\,dW_t&quot;,&quot;id&quot;:&quot;U2cTV0nrH8&quot;}" data-component-name="LatexBlockToDOM"></div><p>Here &#952; is the long-run mean, &#963; scales the noise, and &#954; is the spring constant, the only genuinely interesting parameter. Take expectations and the noise drops out: E[X&#8348;&#8330;&#8341; | X&#8348;] = &#952; + (X&#8348; &#8722; &#952;)e^(&#8722;&#954;h). Expected dislocations decay exponentially. Set the decay factor to one half, e^(&#8722;&#954;t&#189;) = 0.5, and solve: t&#189; = ln 2/&#954;. That is the half-life, the time for the expected mispricing to shrink by 50%.</p><p>The kicks and the spring settle into a stationary distribution: Gaussian with mean &#952; and variance &#963;&#178;/(2&#954;). Strong spring, tight distribution; weak spring, wide one. Entries, exits, and sizing all come from these three quantities.</p><h2>From OLS Slope to Half-Life, With Numbers</h2><p>Sample the OU process every &#916;t and you get exactly an AR(1): X&#8348;&#8330;&#8321; = c + &#966;X&#8348; + &#949;&#8348;, with &#966; = e^(&#8722;&#954;&#916;t) and c = &#952;(1 &#8722; &#966;). One regression of today's level on yesterday's recovers everything.</p><p>Worked example on daily data, so &#916;t = 1 day. The regression returns &#966; = 0.94, c = 0.12, residual standard deviation &#963;_&#949; = 0.25.</p><ul><li><p>Speed: &#954; = &#8722;ln(0.94) &#8776; 0.0619 per day.</p></li><li><p>Half-life: t&#189; = 0.6931/0.0619 &#8776; 11.2 trading days.</p></li><li><p>Long-run mean: &#952; = c/(1 &#8722; &#966;) = 0.12/0.06 = 2.00.</p></li><li><p>Equilibrium sd: &#963;_eq = &#963;_&#949;/&#8730;(1 &#8722; &#966;&#178;) = 0.25/&#8730;0.1164 = 0.25/0.3412 &#8776; 0.73.</p></li></ul><p>So this spread lives around 2.00, breathes with a standard deviation of about 0.73, and repairs half of any shock in roughly two trading weeks.</p><p>One warning before you fall in love with 11.2: the OLS estimate of &#966; is biased downward in short samples, by roughly (1 + 3&#966;)/n, a result going back to Kendall in the 1950s. With n = 250 daily observations that is about 3.82/250 &#8776; 0.015, dragging the measured &#966; toward 0.925 and the implied half-life toward 9 days when the truth is 11. Estimated half-lives flatter you. Use long windows and treat the number as an order of magnitude, not a constant of nature.</p><h2>Trading the Clock: Z-Scores and Sizing</h2><p>Standardize the dislocation: z = (X&#8348; &#8722; &#952;)/&#963;_eq. A spread printing 3.50 today gives z = (3.50 &#8722; 2.00)/0.73 &#8776; 2.05. A serviceable rule set:</p><ul><li><p>Enter against the dislocation when |z| &#8805; 2. Here, short the spread.</p></li><li><p>Size proportional to z, capped near z = 3, so a 2.5-sigma dislocation carries 25% more risk than a 2-sigma one and a freak print cannot bankrupt you.</p></li><li><p>Exit when |z| falls below about 0.5. The last few tenths of a sigma decay slowly and pay little.</p></li></ul><p>The half-life converts rules into expected P&amp;L. Over one half-life the expected dislocation halves, from 1.50 above the mean to 0.75, so the short earns an expected 0.75 per unit of spread in about 11 days. If round-trip costs are 0.10, the net expected edge is 0.65. Compare that to the equilibrium sd of 0.73 and you have the trade's rough risk-reward before touching a backtest.</p><p>The clock also sets capital velocity: 252/11.2 is roughly 22 reversion cycles per year, and Sharpe scales roughly with the square root of the number of independent bets. A 3-day half-life gives about 84 cycles; a 60-day half-life gives 4. Faster is better, until the per-cycle edge shrinks below costs.</p><p>Finally the time stop, the most underused tool in stat arb: after three half-lives, about 34 days here, only 12.5% of the expected dislocation should remain. A position that has not converged by then is not early. Under your own model it is broken. Cut it.</p><h2>When the Spring Breaks</h2><p>&#954; is estimated, not guaranteed. Pairs die when something structural changes: a merger, a business pivot, an index deletion, a funding squeeze. The statistical symptom is &#966; drifting toward 1, the half-life stretching toward infinity, and the spread becoming a random walk wearing a mean-reversion costume. Your z-score then measures the distance to a mean that no longer exists.</p><p>Defenses: re-estimate &#954;, &#952;, and &#963;_eq on a rolling window and alarm on large shifts; run a unit-root test periodically and demote spreads that fail it; hold a hard stop around |z| = 3.5 to 4, since under the fitted Gaussian such prints should be rare and their frequent appearance is evidence against the model; and enforce the three-half-life time stop. The August 2007 quant unwind is the canonical warning: crowded mean-reversion books were forced to liquidate at once, spreads blew through every entry level and kept widening, and reversion returned only after many desks had been carried out. The spring usually recoils. You have to still be solvent when it does.</p><blockquote><h3>&#128273; Key Formulas</h3><p>OU dynamics: dX&#8348; = &#954;(&#952; &#8722; X&#8348;)dt + &#963; dW&#8348; Half-life: t&#189; = ln 2/&#954; AR(1) map: &#966; = e^(&#8722;&#954;&#916;t), &#954; = &#8722;ln(&#966;)/&#916;t, &#952; = c/(1 &#8722; &#966;) Equilibrium sd: &#963;_eq = &#963;_&#949;/&#8730;(1 &#8722; &#966;&#178;)</p></blockquote><h2>Key Takeaways</h2><ul><li><p>The OU process is a random walk on a rubber band, and its one deep parameter is the reversion speed &#954;.</p></li><li><p>A single AR(1) regression recovers the whole model: &#966; = e^(&#8722;&#954;&#916;t) gives the half-life ln 2/&#954;, and c/(1 &#8722; &#966;) gives the mean.</p></li><li><p>A daily slope of 0.94 means an 11-day half-life, which fixes your holding period, thresholds, and capital velocity in one number.</p></li><li><p>Size by z-score, but judge by the clock: a trade that has not converged after three half-lives is broken by your own model's logic.</p></li><li><p>Small-sample bias makes estimated half-lives look faster than reality, so estimate on long windows and round pessimistically.</p></li><li><p>Reversion dies by regime change, so pair every entry rule with a z-stop, a time stop, and rolling re-estimation.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #MeanReversion #OrnsteinUhlenbeck #StatArb #PairsTrading #HalfLife #TimeSeries #Econometrics #TradingStrategies #AlgorithmicTrading #QuantTrading #StochasticProcesses #SystematicTrading</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!u1xJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!u1xJ!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!u1xJ!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!u1xJ!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!u1xJ!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!u1xJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63305,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!u1xJ!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!u1xJ!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!u1xJ!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!u1xJ!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e3489df-75db-45b5-96dc-c9be7cfeb470_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Brownian Motion: Why √t Rules Everything Around You]]></title><description><![CDATA[Daily 1% volatility means annual 16%, a 5% wander takes 25 trading days, and one scaling law explains both. It also fails in specific, exploitable ways.]]></description><link>https://hmaquant.substack.com/p/brownian-motion-why-t-rules-everything</link><guid isPermaLink="false">https://hmaquant.substack.com/p/brownian-motion-why-t-rules-everything</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Thu, 20 Aug 2026 06:01:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A stock that moves about 1% a day does not move 252% over a 252-day trading year. It moves about 16%. The conversion, multiply daily vol by &#8730;252 &#8776; 15.9, is performed thousands of times a day on every trading floor on earth, and it rests on one property of random walks: variances add, volatilities do not.</p><p>Almost everything quantitative leans on this scaling. Annualizing volatility and Sharpe ratios, stretching one-day VaR to ten days, the &#8730;T inside Black-Scholes, sizing positions across horizons: all of it is the same square root wearing different clothes. And because the rule is applied so automatically, the places where it silently fails, autocorrelated returns, fat tails, volatility clustering, are exactly where careless quants get hurt.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post gives you the intuition for why the square root appears, the standard vol conversions worked digit by digit, a less familiar corollary about how long prices take to travel distances, and an honest list of the conditions under which &#8730;t is the wrong answer.</p><div><hr></div><h2>Variances Add, Volatilities Don't</h2><p>Start with coin flips. Take n independent steps of &#177;1. The expected displacement is zero, but the typical displacement is not: it grows like &#8730;n, because moves cancel each other only imperfectly. The clean statement is about variance: for independent increments, the variance of a sum is the sum of the variances, since independence kills the cross terms. Over n days each with variance &#963;&#178;, the total variance is n&#963;&#178; and the total volatility is &#963;&#8730;n. Brownian motion is this logic pushed to the continuum limit: W&#8348; is Gaussian with Var(W&#8348;) = t, and the famous &#8730;t is nothing deeper than variance accumulating linearly in time.</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\mathrm{Var}\\left(r_{1} + \\cdots + r_{n}\\right) = n\\sigma^{2} \\;\\Rightarrow\\; \\sigma_{(n)} = \\sigma\\sqrt{n}&quot;,&quot;id&quot;:&quot;zhNqpuyNX3&quot;}" data-component-name="LatexBlockToDOM"></div><p>Run the conversions for a stock with 1% daily vol. Weekly, over 5 trading days: 1% &#215; &#8730;5 &#8776; 2.24%. Monthly, over 21 days: 1% &#215; &#8730;21 &#8776; 4.58%. Annual, over 252 days: 1% &#215; &#8730;252 &#8776; 15.87%, which everyone rounds to 16%. Hence the rule of 16: annual vol &#8776; 16 &#215; daily vol, and in reverse, daily vol &#8776; annual vol divided by 16. A VIX print of 24 is the market pricing typical daily S&amp;P moves near 24/16 = 1.5%. One classic junior mistake dies here too: two independent 10% vols combine to &#8730;(10&#178; + 10&#178;) &#8776; 14.1%, not 20%. Add variances, then take the root, always in that order.</p><h2>Distance Costs the Square of Time</h2><p>Invert the scaling and you get something less familiar: if typical displacement grows like &#8730;t, then the time needed to travel a given distance grows like the distance squared. A stock with 1% daily vol typically needs about 25 trading days, not 5, to wander 5% away from where it started, because (5/1)&#178; = 25. Doubling the distance quadruples the time. This is why tight stop-losses get tripped constantly, why a barrier twice as far away is roughly four times the waiting time rather than two, and why a stock that has "gone nowhere for a month" is usually just diffusion doing exactly what diffusion does.</p><p>One honest caveat: for driftless Brownian motion the expected first-passage time to any level is actually infinite, because the hitting-time distribution has a heavy tail. Read "about 25 days" as the typical scale, not a mean. And one beautiful exact result survives all the caveats. The reflection principle says the probability that Brownian motion touches a level a at any point before time t is exactly twice the probability that it finishes beyond it: P(touch a by t) = 2 &#215; P(W&#8348; &#8805; a) in the driftless case. Touching is twice finishing. That single identity is the core intuition for why one-touch options are worth roughly twice their digital cousins when drift is small, and for why your high-water mark gets threatened far more often than your intuition about final outcomes suggests.</p><h2>Where the Square Root Fails</h2><p>Everything above assumed independent, identically distributed increments. Markets violate each assumption in measurable ways, and each violation bends &#8730;t in its own direction.</p><p>Autocorrelation is the direct hit. For two days, Var(r&#8321; + r&#8322;) = 2&#963;&#178;(1 + &#961;). With &#961; = +0.2, the two-day vol is &#963;&#8730;2.4 &#8776; 1.55&#963; rather than 1.41&#963;: trending markets make long-horizon vol grow faster than &#8730;t, and mean-reverting markets (&#961; &lt; 0) do the opposite. This is precisely what the Lo-MacKinlay variance-ratio test measures. The same disease infects Sharpe annualization: multiplying a daily Sharpe by &#8730;252 assumes uncorrelated daily returns, and for positively autocorrelated strategies it overstates the annual figure because true annual vol grows faster than the rule assumes.</p><p>Fat tails break a subtler piece. Independence still makes variances add, so vol itself scales fine, but tail quantiles stop following the Gaussian pattern: the central limit theorem repairs the middle of the distribution long before it repairs the tails, so scaling a daily 99.9% loss by &#8730;t misstates the 10-day 99.9% loss. Volatility clustering breaks the conditional version: after a 3% day, tomorrow's vol is not the unconditional 1%, so scaling today's calm into next month's risk fails exactly when it matters most. The working rules: &#8730;t is excellent for converting vol across moderate horizons in roughly uncorrelated markets, suspect in the tails, and dangerous for anything with a trend or a panic in it. When the horizon matters, measure at the horizon.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Brownian scaling: Var(W&#8348;) = t, so &#963; over n days = &#963;_daily &#215; &#8730;n Rule of 16: &#963;_annual &#8776; 16 &#215; &#963;_daily, since &#8730;252 &#8776; 15.9 Autocorrelation correction (2 days): &#963;&#8322; = &#963;&#8730;(2(1 + &#961;)) Reflection principle: P(touch a by t) = 2 &#215; P(W&#8348; &#8805; a)</p></blockquote><h2>Key Takeaways</h2><ul><li><p>For independent increments variances add, so volatility scales with the square root of time: &#963; over n days equals &#963;_daily &#215; &#8730;n.</p></li><li><p>The rule of 16 converts daily to annual volatility because &#8730;252 &#8776; 15.9, making a 1% daily stock a 16% annual one.</p></li><li><p>Travel time scales with distance squared: at 1% daily vol, a 5% excursion typically takes about 25 trading days, not 5.</p></li><li><p>The reflection principle makes touching a level exactly twice as likely as finishing beyond it, which is the core intuition behind barrier risk and drawdown frequency.</p></li><li><p>Positive autocorrelation makes true long-horizon vol exceed the &#8730;t estimate, which also inflates naively annualized Sharpe ratios.</p></li><li><p>Fat tails and volatility clustering mean &#8730;t handles mid-range vol well but misprices tails and conditional risk, so measure at the horizon you care about whenever you can.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #BrownianMotion #StochasticCalculus #RandomWalk #Volatility #ProbabilityTheory #MathFinance #RiskManagement #OptionPricing #StochasticProcesses #VolatilityScaling #TimeSeries #SquareRootOfTime</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dVqO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dVqO!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!dVqO!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!dVqO!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dVqO!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dVqO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56705,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dVqO!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!dVqO!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!dVqO!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dVqO!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6faf9290-e90c-4487-a3f2-3440694262fb_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Market Impact and the Square-Root Law]]></title><description><![CDATA[Trading 5% of a stock's daily volume moves the price about 45 basis points, and you can estimate that on an index card. The same formula decides how big your fund can get.]]></description><link>https://hmaquant.substack.com/p/market-impact-and-the-square-root</link><guid isPermaLink="false">https://hmaquant.substack.com/p/market-impact-and-the-square-root</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Wed, 19 Aug 2026 06:01:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You need to buy $10 million of a stock that trades $200 million a day. The screen shows a bid-ask spread of 5 basis points and you budget accordingly. The realistic bill is closer to 45 basis points, nine times the spread, and it does not come from your broker's commission schedule. It comes from a formula that fits on an index card: impact &#8776; &#963;&#8730;(Q/V).</p><p>Market impact is the dominant transaction cost at institutional size, and it is the quantity that decides how large a strategy can get before its own trading eats the alpha. The square-root law that governs it is one of the most robust empirical regularities in market microstructure, documented across equities, futures, FX and options in studies spanning decades, with the same functional form and roughly the same constant appearing everywhere researchers have looked.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>What follows: the law and the intuition for its strange concavity, a worked cost estimate for trading 5% of daily volume, the split between temporary and permanent impact, and the capacity arithmetic that tells you when a strategy is full.</p><div><hr></div><h2>The Law and Its Strange Concavity</h2><p>The empirical statement: execute a metaorder of Q shares in a stock with average daily volume V and daily volatility &#963;, and the price moves against you by roughly</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;I \\approx Y\\,\\sigma\\,\\sqrt{\\frac{Q}{V}}&quot;,&quot;id&quot;:&quot;uLRuBsrQUM&quot;}" data-component-name="LatexBlockToDOM"></div><p>with Y a constant of order one, typically estimated between roughly 0.5 and 1. Three features deserve attention. Impact is measured in units of the stock's own volatility: with Y near 1, trading 1% of ADV costs about a tenth of a daily standard deviation, since &#8730;0.01 = 0.1. Impact grows with the square root of size, not linearly: your hundred-thousandth share moves the price less than your first. And within sensible ranges the cost depends only weakly on how fast you execute, which surprises everyone the first time they see it.</p><p>Why concave? Because visible liquidity is a sliver of true liquidity. The order book displays a thin layer, and behind it sits latent supply that replenishes as the price moves. There is also a neat consistency argument: while your metaorder is running, the market cannot distinguish the first half of a 200,000-share order from the whole of a 100,000-share order, so the early fills must carry a disproportionate share of the total impact, forcing concavity in size. Latent-liquidity models make this precise, and the square root drops out.</p><h2>Pricing the Order: 5% of ADV at 2% Daily Vol</h2><p>Numbers. The stock does V = $200M a day with daily volatility &#963; = 2%. Your order is Q = $10M, so Q/V = 5%. Take Y = 1 for a round, conservative estimate. Then &#8730;0.05 &#8776; 0.2236 and I &#8776; 0.02 &#215; 0.2236 &#8776; 0.45%, call it 45 basis points. On $10 million that is roughly $45,000, against the roughly $5,000 a spread-based budget would have suggested. One refinement worth knowing and then setting aside: the square-root law describes the price displacement by completion, and your average fill price is somewhat better, roughly two-thirds of the peak in standard models. For budgeting, practitioners often just quote the square-root number.</p><p>Now scale up in the same stock. Trade $20M, which is 10% of ADV: &#8730;0.10 &#8776; 0.3162, so I &#8776; 63 basis points and the dollar cost is about $126,000. Doubling the order multiplied the per-share cost by &#8730;2 &#8776; 1.41 and the total dollars by 2^(3/2) &#8776; 2.83. That exponent is the entire capacity problem in one number: total cost C = Q &#215; I grows like Q^(3/2), while the gross alpha of a signal grows at best linearly in Q. Superlinear cost meets linear revenue, and cost wins eventually, every time.</p><h2>Temporary, Permanent, and What Slicing Actually Buys</h2><p>Watch the price after your last fill and it relaxes. Part of the impact was temporary, a rental fee for consuming liquidity quickly, and it decays away. What remains is permanent impact, the market's revision of fair value based on the information your trading revealed. Empirical studies typically find the price settling at roughly one-half to two-thirds of the peak impact. The permanent part cannot be avoided; it is the price of being detectable. The temporary part is what execution algorithms manage.</p><p>Slicing an order across time, whether by TWAP, VWAP, participation-of-volume rules, or an Almgren-Chriss optimal trajectory, trades impact against risk: execute slower and you rent liquidity more gently, but you hold unexecuted exposure longer while the price wanders. What slicing does not do is repeal the square-root law, which describes the whole metaorder's cost with only weak dependence on duration. Good execution determines whether you pay the law's price or the law's price plus slippage from clumsiness. It does not get you underneath the law.</p><h3>The Capacity Arithmetic</h3><p>A strategy whose edge is &#945; per trade stops scaling when impact eats the edge. Set Y&#963;&#8730;(Q/V) = &#945; and solve: Q*/V = (&#945;/(Y&#963;))&#178;. With a fat 1% edge and 2% vol, capacity is (0.01/0.02)&#178; = 25% of ADV, a big order but a feasible one. With a 20 basis point edge, more typical of systematic equity signals, it is (0.002/0.02)&#178; = 1% of ADV. Halve the alpha and capacity quarters, because the relationship is quadratic. This is why high-turnover strategies with thin edges cap out small, and why capacity claims deserve as much diligence as Sharpe ratios.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Square-root law: I &#8776; Y&#963;&#8730;(Q/V), with Y roughly 0.5 to 1 Rule of thumb (Y &#8776; 1): trading 1% of ADV costs &#8776; 0.1&#963; Total dollar cost: C &#8776; Q &#215; I, so C grows like Q^(3/2) Capacity bound: Q*/V &#8776; (&#945;/(Y&#963;))&#178;</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Market impact follows a square-root law, I &#8776; Y&#963;&#8730;(Q/V), with the same functional form found across asset classes and decades of data.</p></li><li><p>Impact is priced in volatility units: at Y &#8776; 1, trading 1% of a stock's daily volume costs about a tenth of a daily standard deviation.</p></li><li><p>Trading 5% of ADV in a 2%-vol stock costs roughly 45 basis points, typically an order of magnitude more than the quoted spread.</p></li><li><p>Total dollar cost scales like Q^(3/2), so doubling an order multiplies its cost by about 2.83, and this superlinearity is what ultimately caps strategy size.</p></li><li><p>Impact splits into a decaying temporary part and a permanent part of roughly half to two-thirds of peak; execution algorithms manage the first and nothing avoids the second.</p></li><li><p>Capacity scales with the square of alpha over volatility, so halving your edge quarters the size your strategy can run.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #MarketImpact #MarketMicrostructure #TransactionCosts #SquareRootLaw #AlgorithmicTrading #OptimalExecution #Liquidity #TradingCosts #OrderExecution #PortfolioCapacity #SystematicTrading #QuantResearch</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!wAbV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!wAbV!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!wAbV!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!wAbV!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!wAbV!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!wAbV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41260,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!wAbV!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!wAbV!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!wAbV!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!wAbV!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ced4a81-377e-4176-b66c-d4c0d82cbbfe_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Momentum: The Anomaly That Refuses to Die]]></title><description><![CDATA[Buying recent winners and shorting recent losers has paid roughly 1% a month for decades, except for the months it loses years of profit at once. Both halves of that sentence are the strategy.]]></description><link>https://hmaquant.substack.com/p/momentum-the-anomaly-that-refuses</link><guid isPermaLink="false">https://hmaquant.substack.com/p/momentum-the-anomaly-that-refuses</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Tue, 18 Aug 2026 06:01:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Rank every US stock by its return over the past year, buy the best tenth, short the worst tenth, hold for a month, repeat. Jegadeesh and Titman published that recipe in 1993, showing it had earned roughly 1% per month for decades. Thirty years of public scrutiny later, after thousands of papers and hundreds of funds built on it, the effect is still visible in the data, out of sample and across countries and asset classes.</p><p>Momentum matters because it is the sharpest standing insult to the efficient-market hypothesis: past prices alone, the cheapest information in existence, predicting cross-sectional returns. It became the fourth factor in Carhart's 1997 model and a pillar of every systematic equity platform since. It also carries a flaw its fans mention quietly: every decade or so it loses a large fraction of its value in a few months, and 2009 was the demonstration.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This post covers the exact construction, the 12-1 signal, a six-stock worked example you can follow with mental arithmetic, the behavioral machinery that plausibly keeps the anomaly alive, the anatomy of the 2009 crash, and the costs-and-capacity reality that decides whether any of it survives contact with a live portfolio.</p><div><hr></div><h2>The 12-1 Signal and a Six-Stock Book</h2><p>The standard academic construction measures each stock's cumulative return from twelve months ago to one month ago, skipping the most recent month:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;r^{\\mathrm{mom}}_{i} = \\prod_{k=2}^{12}\\left(1 + r_{i,\\,t-k}\\right) - 1&quot;,&quot;id&quot;:&quot;Jf1OrzhwX5&quot;}" data-component-name="LatexBlockToDOM"></div><p>The skip is not decoration. One-month returns tend to reverse, the short-term reversal effect Jegadeesh documented in 1990, so including month t&#8722;1 would mix a negative signal into a positive one. The strategy is cross-sectional: stocks are ranked against each other, winners bought and losers shorted in equal dollar amounts, so the market's overall direction roughly nets out. You are betting on persistence of relative performance, not on rising markets.</p><p>A six-stock toy book makes it concrete. Formation returns: A +40%, B +25%, C +10%, D +2%, E &#8722;15%, F &#8722;30%. Go long A and B with $50 each and short E and F with $50 each, $100 per leg. A normal continuation month follows: A +2% and B +4%, so the long leg returns (2 + 4)/2 = +3% and earns $3. E falls 1% and F falls 5%, so the shorts average &#8722;3% and earn another $3. Total: +$6 per $100 of leg notional, with the market's direction largely irrelevant. Real implementations do the same thing across thousands of stocks, with decile portfolios, overlapping holding periods, and weights proportional to demeaned ranks rather than binary buckets.</p><h2>Why the Cheapest Signal in Finance Still Works</h2><p>The mainstream explanations are behavioral, and they stack. Underreaction comes first: information diffuses slowly through limited investor attention, so prices drift toward new fair values instead of jumping, and post-earnings announcement drift is the same phenomenon photographed at close range. The disposition effect helps: holders sell winners too early to bank gains and cling to losers to avoid admitting mistakes, and both behaviors slow the price's adjustment, stretching trends. Then comes feedback: trend-followers and performance-chasing flows push winners past fair value, which fits neatly with the reversal De Bondt and Thaler found at three-to-five-year horizons. Underreaction starts the trend, herding overextends it, and the long-horizon unwind cleans up.</p><p>Risk-based stories exist, and one deserves genuine respect: momentum's returns are strongly negatively skewed, and the strategy behaves like it is short a crash option, collecting a steady premium punctuated by rare violent losses. On that reading, part of the 1% a month is insurance income. The 2009 episode is the exhibit.</p><h2>March 2009: The Loser Leg Bites Back</h2><p>By early 2009 the portfolio's composition had become extreme. The loser decile was stuffed with crushed high-beta financials and cyclicals, the winner decile with defensive names, which made the strategy heavily short the market's most beaten-down tail precisely when a rebound was possible. The rebound came: from the March 2009 low the S&amp;P 500 rallied roughly 40% in about three months, the loser leg roughly doubled off its lows in places, and Daniel and Moskowitz document the standard winners-minus-losers portfolio losing roughly three-quarters of its value in a few months, with 1932 as its historical twin. Momentum crashes are not random bad luck. They arrive after bear markets, during sharp reversals, exactly when the strategy's implicit market beta has flipped strongly negative.</p><p>The toy book shows the mechanism in one month. Junk rally: A 0% and B +2% give the long leg +1%, earning $1. E +20% and F +30% give the shorts an average of +25%, losing $25. Net: &#8722;$24 per $100 leg, which is four normal months of profit gone in one. Practitioners mitigate with volatility scaling, cutting exposure when momentum's own recent volatility spikes; Barroso and Santa-Clara, and Daniel and Moskowitz, both show this reduces crash severity substantially in backtests, roughly halving the worst drawdowns.</p><h3>The Bill for Trading It</h3><p>Costs are the final filter. Decile momentum turns over several hundred percent a year, roughly, and the paper signal is strongest among small illiquid names where trading is most expensive, an unkind coincidence. Early academic cost estimates suggested the premium might die at institutional scale; live-implementation studies from large systematic managers argue that patient, netted trading preserves most of it. The truthful summary is that momentum survives realistic costs but its capacity is finite, and the backtest Sharpe is not the deliverable.</p><blockquote><h3>&#128273; Key Formulas</h3><p>12-1 signal: r_mom = &#928;_{k=2..12}(1 + r_{t&#8722;k}) &#8722; 1 Strategy return: r_WML = r_winners &#8722; r_losers Rank weights: w_i &#8733; rank(s_i) &#8722; (N + 1)/2 Volatility-managed exposure: w_t &#8733; &#963;_target/&#963;&#770;_t</p></blockquote><h2>Key Takeaways</h2><ul><li><p>Momentum ranks stocks on their 12-1 return, skipping the most recent month to dodge short-term reversal, and bets that relative winners keep winning for about a month.</p></li><li><p>The effect has survived thirty years of publication and replication across countries and asset classes, making it the most durable known anomaly.</p></li><li><p>The leading explanations are behavioral: slow information diffusion starts trends, the disposition effect sustains them, and herding overextends them into eventual reversal.</p></li><li><p>Momentum's returns are negatively skewed, and in 2009 the standard long-short portfolio lost roughly three-quarters of its value as the loser leg exploded upward.</p></li><li><p>Volatility scaling roughly halves crash severity in backtests and is standard practice in serious implementations.</p></li><li><p>High turnover and small-cap concentration mean costs and capacity, not signal decay, are the binding constraints in production.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #Momentum #FactorInvesting #BehavioralFinance #AssetPricing #EquityMarkets #TradingStrategies #MarketAnomalies #SystematicTrading #PortfolioConstruction #QuantResearch #RiskPremia #Backtesting</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Fp5Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Fp5Z!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!Fp5Z!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!Fp5Z!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Fp5Z!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Fp5Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44856,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Fp5Z!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!Fp5Z!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!Fp5Z!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Fp5Z!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1da7fe6-a786-46e4-8c21-ba8c7df34b03_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[VaR vs Expected Shortfall: What Your Risk Number Actually Says]]></title><description><![CDATA[Two books can share the same $10M VaR while one hides a $300M scenario. The arithmetic that exposes the difference also explains why Basel switched metrics.]]></description><link>https://hmaquant.substack.com/p/var-vs-expected-shortfall-what-your</link><guid isPermaLink="false">https://hmaquant.substack.com/p/var-vs-expected-shortfall-what-your</guid><dc:creator><![CDATA[Héctor Melchor Alaiz]]></dc:creator><pubDate>Mon, 17 Aug 2026 06:02:38 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/919863d5-9f62-4535-881d-09b306a99332_1360x840.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Two desks hand you identical risk reports: 99% VaR of $10 million. Desk A's worst scenario loses $12 million. Desk B carries a small but genuine scenario that loses $300 million, thirty times its VaR. The reports are indistinguishable, and no amount of recalculation will change that, because a quantile is a threshold and thresholds do not look past themselves.</p><p>This is not a pedantic distinction. Value-at-Risk decides trading limits, margin, and regulatory capital across the industry, and its blindness beyond the quantile is exactly where blowups live. Regulators eventually agreed: the Basel Committee's overhaul of trading-book rules, known as FRTB, retired 99% VaR as the capital metric and replaced it with 97.5% expected shortfall. If you sit anywhere near a risk system, or a risk interview, you should be able to say precisely what changed and why.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here is the plan: both measures defined in plain terms, a worked 1,000-scenario example where ES sees a catastrophe VaR cannot, the classic two-bond portfolio where VaR punishes diversification, and the logic behind Basel's oddly specific choice of 97.5%.</p><div><hr></div><h2>A Threshold Versus a Tail Average</h2><p>VaR at confidence level &#945; answers one question: what loss will I exceed with probability at most 1 &#8722; &#945;? At 99% over one day, it is the loss you exceed roughly one trading day in a hundred. Formally it is a quantile of the loss distribution, VaR_&#945; = inf{&#8467; : P(L &gt; &#8467;) &#8804; 1 &#8722; &#945;}. Notice what the definition never mentions: the size of losses beyond the threshold. Cross the line by $1 or by $1 billion and VaR records the same event.</p><p>Expected shortfall asks the follow-up question a risk manager actually cares about: given that we are having one of the bad days, how bad is it on average? For a continuous loss distribution:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\mathrm{ES}_{\\alpha} = \\mathbb{E}\\left[\\, L \\mid L \\ge \\mathrm{VaR}_{\\alpha} \\,\\right]&quot;,&quot;id&quot;:&quot;Ngf5AYeiTt&quot;}" data-component-name="LatexBlockToDOM"></div><p>A useful shorthand: VaR is the best of the worst days, ES is the average of the worst days. For a normal loss distribution both are just multiples of the standard deviation: 99% VaR &#8776; 2.33&#963;, while 97.5% ES &#8776; 2.34&#963;. Keep those two numbers in mind; they explain Basel's calibration later.</p><h2>One Thousand Scenarios, One Invisible Catastrophe</h2><p>Historical-simulation risk systems work from a finite set of scenarios, so let us use one. Your book has 1,000 equally likely daily P&amp;L scenarios. Sorted from the worst: one scenario at &#8722;$60M, nine scenarios at &#8722;$10M each, and scenario eleven onward at &#8722;$8M or better.</p><p>The 99% VaR reads off the tenth-worst outcome: $10M. (Conventions differ by one rank across systems; nothing below depends on that.) Expected shortfall at 99% averages the worst ten: ES = (60 + 9 &#215; 10)/10 = 150/10 = $15M. So far the two numbers tell one story.</p><p>Now make the tail nastier. Replace the &#8722;$60M scenario with &#8722;$300M, a genuine wipeout. VaR: still $10M, exactly and provably unchanged, because the tenth-worst scenario did not move and the quantile is blind by construction to everything deeper. ES: (300 + 90)/10 = $39M, up 2.6 times. A desk optimizing against a VaR limit can load that deep tail for free, and desks respond to incentives. That is the entire case for ES in one arithmetic exercise: it is not a better forecast, it is a measure that at least looks at the scenarios that end careers.</p><h2>Two Safe Bonds, One "Risky" Portfolio</h2><p>A risk measure is subadditive if merging books never increases measured risk: risk(A + B) &#8804; risk(A) + risk(B). Subadditivity is one axiom of a coherent risk measure in the classic Artzner, Delbaen, Eber and Heath framework from 1999. Expected shortfall satisfies it. VaR does not, and the counterexample takes one paragraph.</p><p>Take two independent bonds, each with a 4% default probability and a $100 loss on default, zero otherwise; zero recovery keeps the arithmetic clean. Each bond alone: the probability of any loss is 4%, below 5%, so the 95% VaR is $0. The two-bond portfolio: the probability that at least one defaults is 1 &#8722; 0.96&#178; = 7.84%, above 5%, while both defaulting has probability only 0.16%. The portfolio's 95% VaR is therefore $100. Diversifying turned two zero-VaR positions into a $100-VaR portfolio: 100 &gt; 0 + 0.</p><p>ES behaves properly on the same example. Each bond's 95% ES averages its worst 5% of outcomes: (0.04 &#215; 100)/0.05 = $80, so the standalone sum is $160. The portfolio's worst 5% contains the both-default outcome (probability 0.16%, loss $200) topped up with single-default outcomes at $100: ES = (0.0016 &#215; 200 + 0.0484 &#215; 100)/0.05 = (0.32 + 4.84)/0.05 = $103.2, comfortably below $160. Diversification is rewarded, as it should be. The practical sting of VaR's failure: desk-level VaR limits can all be respected while concentration hides in the gaps between them, and an optimizer pointed at VaR will actively seek out exactly such structures.</p><h2>Why Basel Chose 97.5, Not 99</h2><p>FRTB, finalized by the Basel Committee in 2016 and revised in 2019, moved internal-model capital from 10-day 99% VaR to 97.5% expected shortfall computed across liquidity horizons. The confidence level is not arbitrary. Under a normal distribution, 97.5% ES &#8776; 2.34&#963; sits almost exactly on top of 99% VaR &#8776; 2.33&#963;. In a Gaussian world the capital number barely moves; in the fat-tailed real world, ES prices the tail that VaR ignored. The calibration was designed to change what the measure sees, not to mechanically raise capital.</p><p>ES is not free, and it is worth being honest about the costs. Tail averages are estimated from the scarcest data you have, so ES estimates carry more sampling noise than VaR at the same window length. Backtesting is genuinely harder too: counting VaR breaches is a clean binomial test, while ES has no comparably simple standalone test, though joint VaR-and-ES backtests exist and are used. Sensible risk teams run both numbers: VaR for its testability, ES for its honesty about the tail.</p><blockquote><h3>&#128273; Key Formulas</h3><p>Value-at-Risk (quantile): VaR_&#945; = inf{&#8467; : P(L &gt; &#8467;) &#8804; 1 &#8722; &#945;} Expected shortfall (tail mean): ES_&#945; = E[L | L &#8805; VaR_&#945;] Normal case: 99% VaR &#8776; 2.33&#963; and 97.5% ES &#8776; 2.34&#963; Coherence condition VaR fails: risk(A + B) &#8804; risk(A) + risk(B)</p></blockquote><h2>Key Takeaways</h2><ul><li><p>VaR is a quantile: it marks the loss you exceed with probability 1 &#8722; &#945; and says nothing about how bad the exceedances are.</p></li><li><p>In the worked example, replacing a &#8722;$60M tail scenario with &#8722;$300M leaves the 99% VaR frozen at $10M while the 99% ES jumps from $15M to $39M.</p></li><li><p>VaR can punish diversification: two independent bonds each carry zero 95% VaR alone but $100 of VaR together, a clean violation of subadditivity.</p></li><li><p>Expected shortfall is coherent and rewards diversification, giving $103.2 for the bond portfolio against a $160 standalone sum.</p></li><li><p>Basel's FRTB moved to 97.5% ES because it matches 99% VaR under normality, so the switch changes what the measure sees rather than mechanically raising capital.</p></li><li><p>The honest trade-off is that ES is noisier to estimate and harder to backtest than VaR, which is why good desks report both.</p></li></ul><blockquote><p>For more quantitative trading analysis:</p><p>&#127760; Website: <a href="https://hmaquant.com">https://hmaquant.com</a></p><p>&#128202; Substack: <a href="/__u/substack.com/@hmaquant">https://substack.com/@hmaquant</a></p><p>&#128188; Connect with me here on Linkedin: <a href="https://www.linkedin.com/in/quanthector">www.linkedin.com/in/quanthector</a></p><p>#QuantFinance #QuantitativeFinance #RiskManagement #ValueAtRisk #ExpectedShortfall #TailRisk #BaselIII #FRTB #MarketRisk #PortfolioRisk #RiskModels #FinancialRegulation #StressTesting #Statistics</p><p>Thanks for reading!</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2QL1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2QL1!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!2QL1!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!2QL1!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2QL1!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_webp, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2QL1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png" width="1360" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/919863d5-9f62-4535-881d-09b306a99332_1360x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61348,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!2QL1!, /__u/hmaquant.substack.com/w_424, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!2QL1!, /__u/hmaquant.substack.com/w_848, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!2QL1!, /__u/hmaquant.substack.com/w_1272, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2QL1!, /__u/hmaquant.substack.com/w_1456, /__u/hmaquant.substack.com/c_limit, /__u/hmaquant.substack.com/f_auto, /__u/hmaquant.substack.com/q_auto:good, /__u/hmaquant.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F919863d5-9f62-4535-881d-09b306a99332_1360x840.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://hmaquant.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">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>