{"id":12214,"date":"2018-10-14T09:16:12","date_gmt":"2018-10-14T09:16:12","guid":{"rendered":"https:\/\/commodity.com\/technical-analysis\/market-thrust\/"},"modified":"2026-04-15T02:32:08","modified_gmt":"2026-04-15T02:32:08","slug":"market-thrust","status":"publish","type":"page","link":"https:\/\/commodity.com\/technical-analysis\/market-thrust\/","title":{"rendered":"Market Thrust Indicator &#8211; This Powerful Trading Measurement Explained"},"content":{"rendered":"\n<p>This technical analysis guide explains what the Market Thrust Indicator (MTI) is and how it can be read on a trading chart.<\/p>\n\n\n\n\n<p>We cover the different components of the MTI, in depicting falls and rises in price, and we explain how the MTI can be used to spot divergences with example charts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mti\">What Is The Market Thrust Indicator?<\/h2>\n\n\n\n<p>The Market Thrust indicator is a powerful measure of the stock market&#8217;s internal strength or weakness. There are four components to this indicator:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Advancing Issues<\/strong> on the New York Stock Exchange (NYSE) &#8211; $ADV or $NYADV<\/li><li><strong>Advancing Volume<\/strong> on the NYSE &#8211; $UVOL or $NYUPV<\/li><li><strong>Declining Issues<\/strong> on the NYSE &#8211; $DECL or $NYDEC<\/li><li><strong>Declining Volume<\/strong> on the NYSE &#8211; $DVOL or $NYDNV<\/li><\/ol>\n\n\n\n<p>This is the formula for the Market Thrust indicator:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>(<span class=\"green\">Advancing Issues<\/span> x <span class=\"green\">Advancing Volume<\/span>) &#8211; (<span class=\"red\">Declining Issues<\/span> x <span class=\"red\">Declining Volume<\/span>)<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How To Read The Market Thrust Indicator<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/technical-analysis\/MarketThrustupYM5min.gif\" alt=\"market thrust indicator confirming price movement\" \/><figcaption>This is the chart for mini-Dow futures.<\/figcaption><\/figure><\/div>\n\n\n\n<p>When used for day-trading, the trend of the Market Thrust indicator is what is most important.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Rising Market Thrust Indicator<\/strong>: Considered a bullish sign; can act as a confirmation signal when combined with a rising stock, index ETF, or <a href=\"https:\/\/commodity.com\/brokers\/stock\/\">stock<\/a> index future&#8217;s price.<\/li><li><strong>Falling Market Thrust Indicator<\/strong>: \u00a0Considered a bearish sign; can act as a confirmation signal of a decreasing market price.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Market Thrust Indicator For Divergences<\/h3>\n\n\n\n<p>The Market Thrust indicator could be used for detecting divergences in trends. Divergences occur when:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Price is trending higher, but the Market Thrust indicator is not moving higher or is even going down.<\/li><li>Price is trending lower, however, the Market Thrust technical analysis tool is not trending lower, it is either not trending or is trending higher.<\/li><\/ul>\n\n\n\n<p>The following illustration shows the Market Thrust indicator uncovering divergences in price trend. This is the 5-minute chart of the mini-Dow Jones Industrial Average futures contract:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/technical-analysis\/MarketThrustdownYM5min.gif\" alt=\"market thrust diverging from price\" \/><\/figure><\/div>\n\n\n\n<p>The first third of the day, the Dow futures contract increased quite impressively.<\/p>\n\n\n\n<p>However, the Market Thrust indicator was falling &#8211; an equally impressive bearish divergence.<\/p>\n\n\n\n<p>In fact, the Market Thrust line was lower when the Dow future made its high for the day than the level of the technical indicator was when it first opened the day.<\/p>\n\n\n\n<p>A similar technical indicator is the <a href=\"https:\/\/commodity.com\/technical-analysis\/arms-index-trin\/\">Arms Index TRIN<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where Can I Trade Using The MTI?<\/h2>\n\n\n\n<p>If you are interested in trading stocks, or other commodity assets using <a href=\"https:\/\/commodity.com\/technical-analysis\/\">technical analysis<\/a>, have a look at our reviews of these regulated brokers available in <span class=\"ctamanager-country-name ctamanager-country-name-inline\"><\/span> to learn which charting &amp; analysis tools they offer:<\/p>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\">Further Reading on Volume Indicators<\/h2>\n\n\n\n<p>These volume tools complement Market Thrust: <a href=\"\/technical-analysis\/accumulation-distribution\/\">Accumulation Distribution<\/a>, <a href=\"\/technical-analysis\/chaikin-oscillator\/\">Chaikin Oscillator<\/a>, and <a href=\"\/technical-analysis\/open-interest\/\">Open Interest<\/a>.<\/p>\n\n<h2 class=\"wp-block-heading\">FAQs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What does the Breadth Thrust Indicator measure?<\/h3>\n\n\n\n<p>The breadth thrust indicator, also known as the market thrust indicator, measures the overall momentum of the market. The four measured components of advancing issues, advancing volumes, declining issues, and declining volumes give an overview of the market&#8217;s potency. See our detailed explanation <a href=\"#mti\">here<\/a>.<\/p>\n\n\n\n\n\n<h2 class=\"wp-block-heading\">Who developed the Breadth Thrust Indicator?<\/h2>\n\n\n\n<p>The thrust indicator was developed as a technical analysis tool by an American investor and financial analyst named Martin Zweig. According to Zweig, the entire purpose of the indicator is to measure extreme changes in the market within a short, compressed time frame. It is also known ans the Zweig Indicator.<\/p>\n\n\n\n<p>Technical analysis is most widely used in CFD and forex trading. If you&#8217;re ready to apply these techniques, browse our vetted <a href=\"\/brokers\/cfd\/\">CFD brokers<\/a> or <a href=\"\/brokers\/forex\/\">forex brokers<\/a>.<\/p>\n\n\n<div class=\"reg-brokers\"><p class=\"reg-brokers__label\">Top CFD brokers on Commodity.com:<\/p><div class=\"reg-brokers__row\"><a href=\"\/brokers\/plus500-review\/\" class=\"reg-brokers__card\"><div class=\"reg-brokers__logo\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/plus500-square.png\" alt=\"Plus500\" width=\"56\" height=\"56\" loading=\"lazy\"><\/div><span class=\"reg-brokers__name\">Plus500<\/span><\/a><a href=\"\/brokers\/etoro-review\/\" class=\"reg-brokers__card\"><div class=\"reg-brokers__logo\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/etoro-square.png\" alt=\"eToro\" width=\"56\" height=\"56\" loading=\"lazy\"><\/div><span class=\"reg-brokers__name\">eToro<\/span><\/a><a href=\"\/brokers\/xtb-review\/\" class=\"reg-brokers__card\"><div class=\"reg-brokers__logo\"><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/04\/xtb-square.png\" alt=\"XTB\" width=\"56\" height=\"56\" loading=\"lazy\"><\/div><span class=\"reg-brokers__name\">XTB<\/span><\/a><\/div><\/div>\n    <!-- Commodity Newsletter v20260322f -->\n    <style>\n    .cmm-nl{position:relative;background:#313236;border-radius:15px;padding:36px 32px;margin:48px 0 0;font-family:'Titillium Web',system-ui,-apple-system,sans-serif;overflow:hidden}\n    .cmm-nl::before{content:'';position:absolute;inset:0;background-image:radial-gradient(circle,rgba(255,255,255,.04) 1px,transparent 1px);background-size:20px 20px;pointer-events:none}\n    .cmm-nl__accent{position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,#8abc00,#109bf8)}\n    .cmm-nl__inner{position:relative;display:flex;flex-direction:column;gap:28px}\n    .cmm-nl__label{display:inline-block;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:2.5px;color:#8abc00;margin:0 0 10px}\n    .cmm-nl__title{font-size:26px;font-weight:700;color:#fff;margin:0 0 10px;line-height:1.2}\n    .cmm-nl__subtitle{font-size:16px;line-height:1.5;color:rgba(255,255,255,.7);margin:0 0 14px}\n    .cmm-nl__topics{display:flex;gap:20px;margin:0;padding:0;list-style:none}\n    .cmm-nl__topic{display:flex!important;align-items:center!important;gap:8px!important;font-size:15px!important;color:#fff!important;font-weight:700!important;opacity:1!important}\n    .cmm-nl__topic svg{width:22px!important;height:22px!important;flex-shrink:0!important;opacity:1!important}\n    .cmm-nl__fields{display:flex;flex-direction:column;gap:10px}\n    .cmm-nl__input{font-family:inherit!important;font-size:18px!important;padding:20px 22px!important;border:2px solid rgba(255,255,255,.4)!important;border-radius:8px!important;width:100%!important;box-sizing:border-box!important;background:rgba(255,255,255,.15)!important;color:#fff!important;transition:border-color .2s,box-shadow .2s,background .2s;-webkit-appearance:none!important;appearance:none!important;min-height:60px!important}\n    .cmm-nl__input::placeholder{color:rgba(255,255,255,.45)}\n    .cmm-nl__input:focus{outline:none;border-color:#109bf8;background:rgba(255,255,255,.12);box-shadow:0 0 0 3px rgba(16,155,248,.2)}\n    .cmm-nl__input--error{border-color:#ea580c!important;box-shadow:0 0 0 3px rgba(234,88,12,.15)!important}\n    .cmm-nl__btn{font-family:inherit;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:4.2px;color:#fff;background:#0286e0;border:none;border-radius:24px;padding:16px 32px;cursor:pointer;transition:background .2s,transform .1s;width:100%;-webkit-appearance:none;appearance:none}\n    .cmm-nl__btn:hover{background:#109bf8;transform:translateY(-1px)}\n    .cmm-nl__btn:active{transform:translateY(0)}\n    .cmm-nl__btn:disabled{opacity:.65;cursor:not-allowed;transform:none}\n    .cmm-nl__btn--loading{position:relative;color:transparent}\n    .cmm-nl__btn--loading::after{content:'';position:absolute;top:50%;left:50%;width:18px;height:18px;margin:-9px 0 0 -9px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:cmm-nl-spin .6s linear infinite}\n    .cmm-nl__btn--pulse{animation:cmm-nl-pulse 2s ease-in-out 1}\n    @keyframes cmm-nl-spin{to{transform:rotate(360deg)}}\n    @keyframes cmm-nl-pulse{0%,100%{box-shadow:0 0 0 0 rgba(2,134,224,0)}50%{box-shadow:0 0 0 12px rgba(2,134,224,.3)}}\n    .cmm-nl__msg{font-size:14px;margin:6px 0 0;min-height:20px}\n    .cmm-nl__msg--success{color:#8abc00}\n    .cmm-nl__msg--error{color:#ea580c}\n    .cmm-nl__meta{font-size:13px;color:rgba(255,255,255,.45);margin:10px 0 0;line-height:1.5}\n    .cmm-nl__meta a{color:rgba(255,255,255,.55);text-decoration:underline;text-underline-offset:2px}\n    .cmm-nl__meta a:hover{color:rgba(255,255,255,.8)}\n    .cmm-nl__success{text-align:center;padding:24px 0}\n    .cmm-nl__success-icon{display:inline-block;width:48px;height:48px;margin-bottom:12px}\n    .cmm-nl__success-text{font-size:18px;font-weight:600;color:#fff;margin:0 0 8px}\n    .cmm-nl__success-sub{font-size:14px;color:rgba(255,255,255,.55);margin:0 0 16px}\n    .cmm-nl__success-share{display:flex;justify-content:center;gap:12px}\n    .cmm-nl__success-share a{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:20px;font-size:13px;font-weight:600;text-decoration:none;transition:opacity .2s}\n    .cmm-nl__success-share a:hover{opacity:.85}\n    .cmm-nl__share-x{background:#000;color:#fff}\n    .cmm-nl__share-li{background:#0a66c2;color:#fff}\n    .cmm-nl__hp{position:absolute;left:-9999px;opacity:0;height:0;width:0;overflow:hidden}\n    \/* Sticky mobile bar *\/\n    .cmm-nl-bar{display:none;position:fixed;bottom:0;left:0;right:0;z-index:9999;background:#313236;border-top:2px solid #8abc00;padding:12px 16px;font-family:'Titillium Web',system-ui,-apple-system,sans-serif;transform:translateY(100%);transition:transform .3s ease}\n    .cmm-nl-bar--visible{transform:translateY(0)}\n    .cmm-nl-bar__inner{display:flex;gap:8px;align-items:center;max-width:600px;margin:0 auto}\n    .cmm-nl-bar__input{flex:1;font-family:inherit;font-size:16px;padding:10px 14px;border:2px solid rgba(255,255,255,.15);border-radius:8px;background:rgba(255,255,255,.08);color:#fff;-webkit-appearance:none;appearance:none;min-width:0}\n    .cmm-nl-bar__input::placeholder{color:rgba(255,255,255,.45)}\n    .cmm-nl-bar__input:focus{outline:none;border-color:#109bf8}\n    .cmm-nl-bar__btn{font-family:inherit;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:2px;color:#fff;background:#0286e0;border:none;border-radius:20px;padding:12px 20px;cursor:pointer;white-space:nowrap;-webkit-appearance:none;appearance:none}\n    .cmm-nl-bar__close{background:none;border:none;color:rgba(255,255,255,.5);font-size:20px;cursor:pointer;padding:4px 8px;line-height:1}\n    .cmm-nl-bar__close:hover{color:#fff}\n    .cmm-nl-bar__msg{color:#ea580c;font-size:12px;text-align:center;margin:4px 0 0;display:none}\n    \/* Exit intent slide-up *\/\n    .cmm-nl-exit{display:none;position:fixed;bottom:0;left:0;right:0;z-index:10000;background:#313236;border-top:3px solid #8abc00;padding:20px;font-family:'Titillium Web',system-ui,-apple-system,sans-serif;transform:translateY(100%);transition:transform .4s ease}\n    .cmm-nl-exit--visible{transform:translateY(0)}\n    .cmm-nl-exit__inner{max-width:700px;margin:0 auto;display:flex;align-items:center;gap:20px}\n    .cmm-nl-exit__text{flex:1}\n    .cmm-nl-exit__title{font-size:18px;font-weight:700;color:#fff;margin:0 0 4px}\n    .cmm-nl-exit__sub{font-size:14px;color:rgba(255,255,255,.6);margin:0}\n    .cmm-nl-exit__form{display:flex;gap:8px;flex:1}\n    .cmm-nl-exit__input{flex:1;font-family:inherit;font-size:16px;padding:10px 14px;border:2px solid rgba(255,255,255,.15);border-radius:8px;background:rgba(255,255,255,.08);color:#fff;-webkit-appearance:none;appearance:none;min-width:0}\n    .cmm-nl-exit__input::placeholder{color:rgba(255,255,255,.45)}\n    .cmm-nl-exit__input:focus{outline:none;border-color:#109bf8}\n    .cmm-nl-exit__btn{font-family:inherit;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:2px;color:#fff;background:#0286e0;border:none;border-radius:20px;padding:12px 24px;cursor:pointer;white-space:nowrap}\n    .cmm-nl-exit__close{position:absolute;top:8px;right:12px;background:none;border:none;color:rgba(255,255,255,.5);font-size:22px;cursor:pointer;line-height:1}\n    .cmm-nl-exit__close:hover{color:#fff}\n    @media(min-width:768px){\n        .cmm-nl{padding:44px 52px}\n        .cmm-nl__inner{flex-direction:row;align-items:center;gap:48px}\n        .cmm-nl__content{flex:1 1 45%}\n        .cmm-nl__form-wrap{flex:1 1 55%}\n        .cmm-nl__title{font-size:30px}\n        .cmm-nl__subtitle{font-size:17px}\n        .cmm-nl-bar{display:none!important}\n    }\n    @media(max-width:767px){\n        .cmm-nl-bar{display:block}\n        .cmm-nl__topics{flex-wrap:wrap;gap:12px}\n        .cmm-nl-exit__inner{flex-direction:column;gap:12px}\n        .cmm-nl-exit__form{width:100%}\n    }\n    @media(prefers-reduced-motion:reduce){\n        .cmm-nl__btn--loading::after{animation:none}\n        .cmm-nl__btn:hover{transform:none}\n        .cmm-nl__btn--pulse{animation:none}\n        .cmm-nl-bar,.cmm-nl-exit{transition:none}\n    }\n    <\/style>\n\n        <section class=\"cmm-nl\" aria-labelledby=\"cmm-nl-heading\" id=\"newsletter\" data-nl-placement=\"main\">\n        <div class=\"cmm-nl__accent\"><\/div>\n        <div class=\"cmm-nl__inner\" id=\"cmm-nl-inner\">\n            <div class=\"cmm-nl__content\">\n                <span class=\"cmm-nl__label\">Free daily newsletter<\/span>\n                <h3 id=\"cmm-nl-heading\" class=\"cmm-nl__title\">The Commodity Briefing<\/h3>\n                <p class=\"cmm-nl__subtitle\">The stories behind the prices. Surprising, useful, occasionally weird - in your inbox every weekday.<\/p>\n                <ul class=\"cmm-nl__topics\" aria-label=\"What we cover\">\n                    <li class=\"cmm-nl__topic\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M2 12l3-4 3 2 4-6\" stroke=\"#8abc00\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><rect x=\"1\" y=\"1\" width=\"14\" height=\"14\" rx=\"2\" stroke=\"rgba(255,255,255,.3)\" stroke-width=\"1\"\/><\/svg>\n                        Price moves\n                    <\/li>\n                    <li class=\"cmm-nl__topic\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M8 2v6M8 12v2M5 5l3 3 3-3\" stroke=\"#ea580c\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n                        Supply shocks\n                    <\/li>\n                    <li class=\"cmm-nl__topic\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"#109bf8\" stroke-width=\"1.5\"\/><path d=\"M2 8h12M8 2c2 2 3 4 3 6s-1 4-3 6M8 2c-2 2-3 4-3 6s1 4 3 6\" stroke=\"#109bf8\" stroke-width=\"1\"\/><\/svg>\n                        Macro drivers\n                    <\/li>\n                <\/ul>\n                <p class=\"cmm-nl__meta\" style=\"margin-top:14px;font-size:12px;\">Every weekday. 2-minute read.<\/p>\n            <\/div>\n            <div class=\"cmm-nl__form-wrap\">\n                <form class=\"cmm-nl__form\" id=\"cmm-nl-form\" method=\"post\" novalidate>\n                    <input type=\"hidden\" name=\"action\" value=\"cmm_nl_subscribe\">\n                    <input type=\"hidden\" name=\"nonce\" value=\"e74f7f6ab2\">\n                    <input type=\"hidden\" name=\"ts\" value=\"\">\n                    <div class=\"cmm-nl__hp\" aria-hidden=\"true\">\n                        <label>Leave blank <input type=\"text\" name=\"b_hp\" tabindex=\"-1\" autocomplete=\"off\"><\/label>\n                    <\/div>\n                    <div class=\"cmm-nl__fields\">\n                        <input type=\"email\" name=\"email\" placeholder=\"Your email address\" class=\"cmm-nl__input\" autocomplete=\"email\" required aria-label=\"Email address\" id=\"cmm-nl-email\">\n                        <button type=\"submit\" class=\"cmm-nl__btn\" id=\"cmm-nl-btn\">Get the briefing<\/button>\n                    <\/div>\n                    <div class=\"cmm-nl__msg\" id=\"cmm-nl-msg\" role=\"alert\" aria-live=\"polite\"><\/div>\n                    <p class=\"cmm-nl__meta\">Join 11,000+ readers. Unsubscribe anytime. <a href=\"https:\/\/commodity.com\/privacy\/\">Privacy policy<\/a><\/p>\n                <\/form>\n            <\/div>\n        <\/div>\n    <\/section>\n\n    <!-- Sticky mobile bottom bar -->\n    <div class=\"cmm-nl-bar\" id=\"cmm-nl-bar\" aria-label=\"Newsletter signup\" data-nl-placement=\"bar\">\n        <div class=\"cmm-nl-bar__inner\">\n            <input type=\"email\" class=\"cmm-nl-bar__input\" id=\"cmm-nl-bar-email\" placeholder=\"Email for daily briefing\" aria-label=\"Email address\" autocomplete=\"email\">\n            <button class=\"cmm-nl-bar__btn\" id=\"cmm-nl-bar-btn\">Join<\/button>\n            <button class=\"cmm-nl-bar__close\" id=\"cmm-nl-bar-close\" aria-label=\"Dismiss\">&times;<\/button>\n        <\/div>\n        <div class=\"cmm-nl-bar__msg\" id=\"cmm-nl-bar-msg\"><\/div>\n    <\/div>\n\n    <!-- Exit-intent slide-up -->\n    <div class=\"cmm-nl-exit\" id=\"cmm-nl-exit\" role=\"dialog\" aria-label=\"Newsletter signup\" data-nl-placement=\"exit\">\n        <button class=\"cmm-nl-exit__close\" id=\"cmm-nl-exit-close\" aria-label=\"Close\">&times;<\/button>\n        <div class=\"cmm-nl-exit__inner\">\n            <div class=\"cmm-nl-exit__text\">\n                <p class=\"cmm-nl-exit__title\">Before you go<\/p>\n                <p class=\"cmm-nl-exit__sub\">Get The Commodity Briefing - free, 2 minutes.<\/p>\n            <\/div>\n            <form class=\"cmm-nl-exit__form\" id=\"cmm-nl-exit-form\" novalidate>\n                <input type=\"email\" class=\"cmm-nl-exit__input\" id=\"cmm-nl-exit-email\" placeholder=\"Email address\" aria-label=\"Email address\" autocomplete=\"email\">\n                <button type=\"submit\" class=\"cmm-nl-exit__btn\">Subscribe<\/button>\n            <\/form>\n        <\/div>\n    <\/div>\n\n    <script>\n    (function(){\n        var ajaxUrl = 'https:\/\/commodity.com\/wp-admin\/admin-ajax.php';\n        var nonce = 'e74f7f6ab2';\n        var shareUrl = 'https:\/\/commodity.com\/newsletter';\n        var form = document.getElementById('cmm-nl-form');\n        if (!form) return;\n\n        \/* Timestamp for timing check *\/\n        form.querySelector('[name=\"ts\"]').value = Date.now();\n\n        \/* Already subscribed? *\/\n        var subscribed = false;\n        try { subscribed = !!localStorage.getItem('cmm_nl_subscribed'); } catch(e){}\n        if (subscribed) { showSuccess(); return; }\n\n        \/* Pulse animation when button scrolls into view *\/\n        var btn = document.getElementById('cmm-nl-btn');\n        if ('IntersectionObserver' in window && !window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n            var pulseObs = new IntersectionObserver(function(entries) {\n                entries.forEach(function(e) {\n                    if (e.isIntersecting) {\n                        btn.classList.add('cmm-nl__btn--pulse');\n                        pulseObs.disconnect();\n                    }\n                });\n            }, {threshold: 0.5});\n            pulseObs.observe(btn);\n        }\n\n        \/* Main form submit *\/\n        form.addEventListener('submit', function(e) {\n            e.preventDefault();\n            submitEmail(\n                document.getElementById('cmm-nl-email'),\n                btn,\n                document.getElementById('cmm-nl-msg')\n            );\n        });\n\n        \/* Sticky mobile bar *\/\n        var bar = document.getElementById('cmm-nl-bar');\n        var barDismissed = false;\n        try { barDismissed = !!sessionStorage.getItem('cmm_nl_bar_dismissed'); } catch(e){}\n\n        if (bar && !barDismissed && window.innerWidth < 768) {\n            var barShown = false;\n            window.addEventListener('scroll', function() {\n                if (barShown || barDismissed) return;\n                var scrollPct = window.scrollY \/ (document.body.scrollHeight - window.innerHeight);\n                if (scrollPct > 0.3) {\n                    bar.classList.add('cmm-nl-bar--visible');\n                    barShown = true;\n                }\n            }, {passive: true});\n\n            document.getElementById('cmm-nl-bar-close').addEventListener('click', function() {\n                bar.classList.remove('cmm-nl-bar--visible');\n                barDismissed = true;\n                try { sessionStorage.setItem('cmm_nl_bar_dismissed', '1'); } catch(e){}\n            });\n\n            document.getElementById('cmm-nl-bar-btn').addEventListener('click', function() {\n                var input = document.getElementById('cmm-nl-bar-email');\n                var msgEl = document.getElementById('cmm-nl-bar-msg');\n                var email = input.value.trim();\n                if (!email || !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) {\n                    msgEl.textContent = 'Enter a valid email';\n                    msgEl.style.display = 'block';\n                    return;\n                }\n                msgEl.style.display = 'none';\n                submitEmailSimple(email, function() {\n                    if (typeof window.nlTrack === 'function') window.nlTrack('submit', 'bar', 'control', '');\n                    bar.innerHTML = '<div style=\"text-align:center;color:#8abc00;padding:8px;font-weight:600;\">You\\'re in!<\/div>';\n                    setTimeout(function() { bar.classList.remove('cmm-nl-bar--visible'); }, 2000);\n                }, function(err) {\n                    msgEl.textContent = err;\n                    msgEl.style.display = 'block';\n                });\n            });\n        }\n\n        \/* Exit-intent slide-up *\/\n        var exitEl = document.getElementById('cmm-nl-exit');\n        var exitShown = false;\n        try { exitShown = !!sessionStorage.getItem('cmm_nl_exit_shown'); } catch(e){}\n\n        if (exitEl && !exitShown) {\n            \/* Desktop: mouse leaves viewport top. Mobile: 80% scroll depth *\/\n            if (window.innerWidth >= 768) {\n                document.addEventListener('mouseout', function(e) {\n                    if (exitShown) return;\n                    if (e.clientY < 5 && e.relatedTarget === null) {\n                        showExit();\n                    }\n                });\n            } else {\n                window.addEventListener('scroll', function() {\n                    if (exitShown) return;\n                    var scrollPct = window.scrollY \/ (document.body.scrollHeight - window.innerHeight);\n                    if (scrollPct > 0.8) showExit();\n                }, {passive: true});\n            }\n\n            function showExit() {\n                if (exitShown) return;\n                try { if (localStorage.getItem('cmm_nl_subscribed')) return; } catch(e){}\n                exitShown = true;\n                try { sessionStorage.setItem('cmm_nl_exit_shown', '1'); } catch(e){}\n                exitEl.style.display = 'block';\n                requestAnimationFrame(function() {\n                    requestAnimationFrame(function() {\n                        exitEl.classList.add('cmm-nl-exit--visible');\n                    });\n                });\n            }\n\n            document.getElementById('cmm-nl-exit-close').addEventListener('click', function() {\n                exitEl.classList.remove('cmm-nl-exit--visible');\n                setTimeout(function() { exitEl.style.display = 'none'; }, 400);\n            });\n\n            document.getElementById('cmm-nl-exit-form').addEventListener('submit', function(e) {\n                e.preventDefault();\n                var input = document.getElementById('cmm-nl-exit-email');\n                var email = input.value.trim();\n                if (!email || !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) {\n                    input.style.borderColor = '#ea580c';\n                    return;\n                }\n                submitEmailSimple(email, function() {\n                    if (typeof window.nlTrack === 'function') window.nlTrack('submit', 'exit', 'control', '');\n                    exitEl.querySelector('.cmm-nl-exit__inner').innerHTML = '<p style=\"text-align:center;color:#8abc00;font-weight:600;font-size:18px;margin:0;\">You\\'re in! Check your inbox.<\/p>';\n                    setTimeout(function() {\n                        exitEl.classList.remove('cmm-nl-exit--visible');\n                        setTimeout(function() { exitEl.style.display = 'none'; }, 400);\n                    }, 2500);\n                }, function(err) {\n                    input.style.borderColor = '#ea580c';\n                });\n            });\n        }\n\n        \/* Shared submit helpers *\/\n        function submitEmail(emailInput, btnEl, msgEl) {\n            var email = emailInput.value.trim();\n            msgEl.textContent = '';\n            msgEl.className = 'cmm-nl__msg';\n            emailInput.classList.remove('cmm-nl__input--error');\n\n            if (!email) { showError('Please enter your email address.', emailInput, msgEl); return; }\n            if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) { showError('That doesn\\'t look like a valid email.', emailInput, msgEl); return; }\n\n            btnEl.disabled = true;\n            btnEl.classList.add('cmm-nl__btn--loading');\n\n            var fd = new FormData();\n            fd.append('action', 'cmm_nl_subscribe');\n            fd.append('nonce', nonce);\n            fd.append('email', email);\n            fd.append('ts', form.querySelector('[name=\"ts\"]').value);\n\n            fetch(ajaxUrl, {method:'POST', body:fd})\n            .then(function(r){return r.json();})\n            .then(function(res){\n                btnEl.disabled = false;\n                btnEl.classList.remove('cmm-nl__btn--loading');\n                if (res.success) {\n                    try{localStorage.setItem('cmm_nl_subscribed','1');}catch(e){}\n                    if (typeof window.nlTrack === 'function') { window.nlTrack('submit', 'main', form.closest('[data-nl-placement]')?.getAttribute('data-nl-variant') || 'control', form.closest('[data-nl-placement]')?.getAttribute('data-nl-test') || ''); }\n                    showSuccess();\n                } else {\n                    var err = (res.data && res.data.message) || 'Something went wrong.';\n                    msgEl.textContent = err;\n                    msgEl.className = 'cmm-nl__msg cmm-nl__msg--error';\n                }\n            })\n            .catch(function(){\n                btnEl.disabled = false;\n                btnEl.classList.remove('cmm-nl__btn--loading');\n                msgEl.textContent = 'Something went wrong. Please try again.';\n                msgEl.className = 'cmm-nl__msg cmm-nl__msg--error';\n            });\n        }\n\n        function submitEmailSimple(email, onSuccess, onError) {\n            var fd = new FormData();\n            fd.append('action', 'cmm_nl_subscribe');\n            fd.append('nonce', nonce);\n            fd.append('email', email);\n            fd.append('ts', String(Date.now() - 5000));\n\n            fetch(ajaxUrl, {method:'POST', body:fd})\n            .then(function(r){return r.json();})\n            .then(function(res){\n                if (res.success) {\n                    try{localStorage.setItem('cmm_nl_subscribed','1');}catch(e){}\n                    onSuccess();\n                } else {\n                    onError((res.data && res.data.message) || 'Something went wrong.');\n                }\n            })\n            .catch(function(){ onError('Network error. Try again.'); });\n        }\n\n        function showError(text, input, msgEl) {\n            msgEl.textContent = text;\n            msgEl.className = 'cmm-nl__msg cmm-nl__msg--error';\n            if (input) { input.classList.add('cmm-nl__input--error'); input.focus(); }\n        }\n\n        function showSuccess() {\n            var inner = document.getElementById('cmm-nl-inner');\n            var motionOk = !window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n            if (motionOk) {\n                inner.style.transition = 'opacity .3s ease';\n                inner.style.opacity = '0';\n                setTimeout(function(){ replaceWithSuccess(inner); }, 300);\n            } else {\n                replaceWithSuccess(inner);\n            }\n            \/* Hide bar and exit intent too *\/\n            var bar = document.getElementById('cmm-nl-bar');\n            if (bar) bar.style.display = 'none';\n            var exit = document.getElementById('cmm-nl-exit');\n            if (exit) exit.style.display = 'none';\n        }\n\n        function nextBriefing() {\n            var d = new Date();\n            var day = d.getDay(); \/* 0=Sun, 5=Fri, 6=Sat *\/\n            \/* If Thu after send time, Fri before send, or Sat\/Sun -> Monday *\/\n            if (day === 5 || day === 6 || day === 0) return 'Monday morning';\n            return 'tomorrow morning';\n        }\n\n        function replaceWithSuccess(inner) {\n            inner.innerHTML = '<div class=\"cmm-nl__success\">' +\n                '<svg class=\"cmm-nl__success-icon\" viewBox=\"0 0 48 48\" fill=\"none\" aria-hidden=\"true\">' +\n                '<circle cx=\"24\" cy=\"24\" r=\"22\" stroke=\"#8abc00\" stroke-width=\"3\" fill=\"none\"\/>' +\n                '<path d=\"M14 24l7 7 13-13\" stroke=\"#8abc00\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>' +\n                '<\/svg>' +\n                '<p class=\"cmm-nl__success-text\">You\\'re in. Your first briefing arrives ' + nextBriefing() + '.<\/p>' +\n                '<p class=\"cmm-nl__success-sub\">Know someone who\\'d enjoy this?<\/p>' +\n                '<div class=\"cmm-nl__success-share\">' +\n                '<a class=\"cmm-nl__share-x\" href=\"https:\/\/twitter.com\/intent\/tweet?text=' + encodeURIComponent('The Commodity Briefing - free daily newsletter worth reading. ') + '&url=' + encodeURIComponent(shareUrl) + '\" target=\"_blank\" rel=\"noopener\">Share on X<\/a>' +\n                '<a class=\"cmm-nl__share-li\" href=\"https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=' + encodeURIComponent(shareUrl) + '\" target=\"_blank\" rel=\"noopener\">Share on LinkedIn<\/a>' +\n                '<\/div>' +\n                '<\/div>';\n            inner.style.opacity = '1';\n        }\n    })();\n    <\/script>\n        <script>\n    (function(){\n        \/* \u2500\u2500 Newsletter Analytics v20260322 \u2500\u2500 *\/\n        var ajaxUrl = \"https:\\\/\\\/commodity.com\\\/wp-admin\\\/admin-ajax.php\";\n        var nlTests = [];\n\n        \/* Deterministic visitor hash for variant assignment *\/\n        function getVisitorId() {\n            var vid = '';\n            try {\n                vid = localStorage.getItem('nl_vid');\n                if (!vid) {\n                    vid = Math.random().toString(36).substr(2) + Date.now().toString(36);\n                    localStorage.setItem('nl_vid', vid);\n                }\n            } catch(e) {\n                vid = 'anon_' + Math.random().toString(36).substr(2);\n            }\n            return vid;\n        }\n\n        function hashCode(str) {\n            var hash = 0;\n            for (var i = 0; i < str.length; i++) {\n                hash = ((hash << 5) - hash) + str.charCodeAt(i);\n                hash |= 0;\n            }\n            return Math.abs(hash);\n        }\n\n        \/* Assign variant for a placement *\/\n        function assignVariant(placement) {\n            var test = nlTests[placement];\n            if (!test) return {testId: '', variant: 'control', config: {}};\n\n            var vid = getVisitorId();\n            var hash = hashCode(vid + test.id);\n\n            \/* Traffic inclusion *\/\n            if ((hash % 100) >= test.traffic_pct) {\n                return {testId: test.id, variant: 'control', config: {}};\n            }\n\n            var bucket = hash % 100;\n            var cumulative = 0;\n            for (var i = 0; i < test.variants.length; i++) {\n                cumulative += test.variants[i].weight;\n                if (bucket < cumulative) {\n                    return {\n                        testId: test.id,\n                        variant: test.variants[i].key,\n                        config: test.variants[i].config || {}\n                    };\n                }\n            }\n            return {testId: test.id, variant: 'control', config: {}};\n        }\n\n        \/* Apply variant text swaps *\/\n        function applyVariant(formEl, assignment) {\n            if (assignment.variant === 'control' || !assignment.config) return;\n            var cfg = assignment.config;\n            var section = formEl.closest('.cmm-nl, .cmm-nl-inline, .cmm-nl-bar, .cmm-nl-exit');\n            if (!section) return;\n\n            if (cfg.cta_text) {\n                var btn = section.querySelector('[type=\"submit\"]');\n                if (btn) btn.textContent = cfg.cta_text;\n            }\n            if (cfg.title) {\n                var title = section.querySelector('[class*=\"title\"]');\n                if (title) title.textContent = cfg.title;\n            }\n            if (cfg.subtitle) {\n                var sub = section.querySelector('[class*=\"subtitle\"], [class*=\"sub\"]');\n                if (sub) sub.textContent = cfg.subtitle;\n            }\n        }\n\n        \/* Send tracking event to 3 destinations *\/\n        function nlTrack(eventType, placement, variant, testId) {\n            \/* 1. Server-side log *\/\n            var fd = new FormData();\n            fd.append('action', 'nl_track');\n            fd.append('event_type', eventType);\n            fd.append('placement', placement);\n            fd.append('variant', variant);\n            fd.append('test_id', testId);\n            fd.append('page_url', location.pathname);\n\n            if (navigator.sendBeacon) {\n                navigator.sendBeacon(ajaxUrl, fd);\n            } else {\n                fetch(ajaxUrl, {method: 'POST', body: fd});\n            }\n\n            \/* 2. GA4 *\/\n            if (typeof gtag === 'function') {\n                gtag('event', 'newsletter_' + eventType, {\n                    nl_placement: placement,\n                    nl_variant: variant,\n                    nl_test: testId\n                });\n            }\n\n            \/* 3. Matomo *\/\n            if (typeof _paq !== 'undefined') {\n                _paq.push(['trackEvent', 'Newsletter',\n                    eventType.charAt(0).toUpperCase() + eventType.slice(1),\n                    placement + (variant !== 'control' ? ' | ' + variant : '')\n                ]);\n            }\n        }\n\n        \/* Attach tracking to a form element *\/\n        function trackForm(formEl) {\n            var placement = formEl.getAttribute('data-nl-placement');\n            if (!placement) return;\n\n            var assignment = assignVariant(placement);\n\n            \/* Set data attributes for reference *\/\n            formEl.setAttribute('data-nl-variant', assignment.variant);\n            formEl.setAttribute('data-nl-test', assignment.testId);\n\n            \/* Apply variant text swaps *\/\n            applyVariant(formEl, assignment);\n\n            \/* Impression: 50% visible for 1 second *\/\n            if ('IntersectionObserver' in window) {\n                var impTimer = null;\n                var impObs = new IntersectionObserver(function(entries) {\n                    entries.forEach(function(e) {\n                        if (e.isIntersecting) {\n                            impTimer = setTimeout(function() {\n                                nlTrack('impression', placement, assignment.variant, assignment.testId);\n                                impObs.disconnect();\n                            }, 1000);\n                        } else if (impTimer) {\n                            clearTimeout(impTimer);\n                        }\n                    });\n                }, {threshold: 0.5});\n                impObs.observe(formEl);\n            }\n\n            \/* Interaction: first focus on email input *\/\n            var emailInput = formEl.querySelector('input[type=\"email\"]');\n            if (emailInput) {\n                emailInput.addEventListener('focus', function handler() {\n                    nlTrack('interact', placement, assignment.variant, assignment.testId);\n                    emailInput.removeEventListener('focus', handler);\n                });\n            }\n        }\n\n        \/* Initialize all forms on page *\/\n        function initTracking() {\n            var forms = document.querySelectorAll('[data-nl-placement]');\n            forms.forEach(trackForm);\n        }\n\n        \/* Run on DOM ready *\/\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initTracking);\n        } else {\n            initTracking();\n        }\n\n        \/* Expose nlTrack globally so parent plugin can call it on submit *\/\n        window.nlTrack = nlTrack;\n        window.nlGetAssignment = assignVariant;\n    })();\n    <\/script>\n    ","protected":false},"excerpt":{"rendered":"<p>This technical analysis guide explains what the Market Thrust Indicator (MTI) is and how it can be read on a trading chart. We cover the different components of the MTI, in depicting falls and rises in price, and we explain how the MTI can be used to spot divergences with example charts. What Is The [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"parent":12154,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-12214","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/commodity.com\/wp-json\/wp\/v2\/pages\/12214","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/commodity.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/commodity.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/commodity.com\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/commodity.com\/wp-json\/wp\/v2\/comments?post=12214"}],"version-history":[{"count":0,"href":"https:\/\/commodity.com\/wp-json\/wp\/v2\/pages\/12214\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/commodity.com\/wp-json\/wp\/v2\/pages\/12154"}],"wp:attachment":[{"href":"https:\/\/commodity.com\/wp-json\/wp\/v2\/media?parent=12214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}