<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Advanced Charts Documentation Blog</title>
        <link>https://www.tradingview.com/charting-library-docs/blog</link>
        <description>Advanced Charts Documentation Blog</description>
        <lastBuildDate>Wed, 01 Jul 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Version 32.0.0]]></title>
            <link>https://www.tradingview.com/charting-library-docs/blog/version-3200</link>
            <guid>https://www.tradingview.com/charting-library-docs/blog/version-3200</guid>
            <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[New major v32.0.0 release is here]]></description>
            <content:encoded><![CDATA[<p>Welcome to <strong>Version 32.0.0</strong>.</p>
<p>This release introduces <strong>worker-based chart processing</strong> for improved performance, migrates core widget methods to a <strong>Promise-based API</strong>, extends <strong>countdown support to daily, weekly, and monthly bars</strong>, and includes updates to <strong>drawing tool names and availability</strong>.
Let's dive into the highlights.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="breaking-changes">Breaking changes<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#breaking-changes" class="hash-link" aria-label="Direct link to Breaking changes" title="Direct link to Breaking changes">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="updated-drawing-tool-names">Updated drawing tool names<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#updated-drawing-tool-names" class="hash-link" aria-label="Direct link to Updated drawing tool names" title="Direct link to Updated drawing tool names">​</a></h3>
<p>Drawing tool names have been updated throughout the UI for consistency.
If you use either of the following options, update the name strings you pass in:</p>
<ul>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.ChartingLibraryWidgetOptions/#custom_translate_function"><code>custom_translate_function</code></a> — the <code>originalText</code> argument now reflects the new names (for example, <code>"Trendline"</code> instead of <code>"Trend Line"</code>).</li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.ChartingLibraryWidgetOptions/#drawings_access"><code>drawings_access</code></a> — the <code>name</code> property in the <code>tools</code> array must use the new names (for example, <code>"Trendline"</code> instead of <code>"Trend Line"</code>).</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="updated-return-values-for-dataready-setcharttype-and-savecharttoserver">Updated return values for <code>dataReady</code>, <code>setChartType</code>, and <code>saveChartToServer</code><a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#updated-return-values-for-dataready-setcharttype-and-savecharttoserver" class="hash-link" aria-label="Direct link to updated-return-values-for-dataready-setcharttype-and-savecharttoserver" title="Direct link to updated-return-values-for-dataready-setcharttype-and-savecharttoserver">​</a></h3>
<p>Calling these methods <strong>without a callback</strong> now returns a Promise instead of the previous value:</p>
<ul>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartWidgetApi/#dataready"><code>dataReady()</code></a> on <code>IChartWidgetApi</code> now returns <code>Promise&lt;boolean&gt;</code> instead of a synchronous boolean. Update any synchronous readiness checks accordingly.</li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartWidgetApi/#setcharttype"><code>setChartType(type)</code></a> now returns <code>Promise&lt;void&gt;</code> and rejects with an <code>Error</code> if the chart type change cannot load data.</li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/#savecharttoserver"><code>saveChartToServer()</code></a> now returns <code>Promise&lt;void&gt;</code> and rejects with a <code>SaveChartError</code> (exported as <code>TradingView.SaveChartError</code>) on failure — handle the returned promise to avoid unhandled rejections.</li>
</ul>
<p>Existing calls that pass callbacks retain their previous behavior.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="key-updates">Key updates<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#key-updates" class="hash-link" aria-label="Direct link to Key updates" title="Direct link to Key updates">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="worker-based-chart-processing">Worker-based chart processing<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#worker-based-chart-processing" class="hash-link" aria-label="Direct link to Worker-based chart processing" title="Direct link to Worker-based chart processing">​</a></h3>
<p>Indicator calculations and other internal chart workloads can now run off the main thread.
Enable the new <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.ChartingLibraryWidgetOptions/#workers"><code>workers</code></a> option in the <a href="https://www.tradingview.com/charting-library-docs/latest/configuration/Widget-Constructor">widget constructor</a> to let the library attempt to start a dedicated worker thread.
If the worker cannot be started, the library automatically falls back to the main-thread implementation.</p>
<div class="language-js codeBlockContainer_MSfy theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_RkKg"><pre tabindex="0" class="prism-code language-js codeBlock_h8Em thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_gOgx"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> widget </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">TradingView</span><span class="token class-name punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token class-name">widget</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">container</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'tv_chart_container'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">workers</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">enabled</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">library_path</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'charting_library/'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">datafeed</span><span class="token operator">:</span><span class="token plain"> myDatafeed</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">/* Other widget constructor options */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup_Gwcw"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CgaP" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_SVmo"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_haGG"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="promise-based-widget-api">Promise-based widget API<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#promise-based-widget-api" class="hash-link" aria-label="Direct link to Promise-based widget API" title="Direct link to Promise-based widget API">​</a></h3>
<p>The remaining callback-based methods on <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/"><code>IChartingLibraryWidget</code></a> and <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartWidgetApi/"><code>IChartWidgetApi</code></a> now have Promise-based counterparts:</p>
<ul>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/#chartready"><code>chartReady</code></a></li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/#save"><code>save</code></a></li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/#getsavedcharts"><code>getSavedCharts</code></a></li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/#savecharttoserver"><code>saveChartToServer</code></a></li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/#removechartfromserver"><code>removeChartFromServer</code></a></li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/#shownoticedialog"><code>showNoticeDialog</code></a></li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartingLibraryWidget/#showconfirmdialog"><code>showConfirmDialog</code></a></li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartWidgetApi/#dataready"><code>dataReady</code></a></li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartWidgetApi/#setcharttype"><code>setChartType</code></a></li>
</ul>
<p>The callback overloads remain for backward compatibility and emit a one-time deprecation warning on first use.
<code>widget.setSymbol()</code> is also deprecated in favour of <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartWidgetApi/#setsymbol"><code>widget.activeChart().setSymbol()</code></a>.</p>
<div class="theme-admonition theme-admonition-warning admonition__obt alert alert--warning"><div class="admonitionHeading_vGs3"><span class="admonitionIcon_HjOI"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>warning</div><div class="admonitionContent_XN6I"><p>These methods will be removed in a future major release — migrate to the Promise-based API to avoid breakage when that happens.</p></div></div>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="countdown-for-daily-weekly-and-monthly-bars">Countdown for daily, weekly, and monthly bars<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#countdown-for-daily-weekly-and-monthly-bars" class="hash-link" aria-label="Direct link to Countdown for daily, weekly, and monthly bars" title="Direct link to Countdown for daily, weekly, and monthly bars">​</a></h3>
<p>The bar close countdown was previously limited to intraday resolutions.
It now also works for <strong>daily, weekly, and monthly</strong> bars.
Set the <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.ChartPropertiesOverrides/#mainseriespropertiesshowcountdown"><code>mainSeriesProperties.showCountdown</code></a> chart override to <code>true</code> to display the countdown on the price scale.
As before, implementing <a href="https://www.tradingview.com/charting-library-docs/latest/connecting_data/datafeed-api/additional-methods#getservertime"><code>getServerTime</code></a> in your datafeed ensures accurate countdown values.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="unpaired-exit-levels">Unpaired exit levels<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#unpaired-exit-levels" class="hash-link" aria-label="Direct link to Unpaired exit levels" title="Direct link to Unpaired exit levels">​</a></h3>
<p>For Trading Platform integrations using <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.BrokerConfigFlags/#supportmultipleexitlevels"><code>supportMultipleExitLevels</code></a>, the new <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.BrokerConfigFlags/#supportunpairedexitlevels"><code>supportUnpairedExitLevels</code></a> flag allows each exit level to contain only one side — either a take-profit or a stop-loss — instead of requiring both.
See <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/trading-concepts/brackets/#multiple-exit-levels">Multiple exit levels</a> for details.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="documentation">Documentation<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="implement-datafeed-tutorial">Implement Datafeed tutorial<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#implement-datafeed-tutorial" class="hash-link" aria-label="Direct link to Implement Datafeed tutorial" title="Direct link to Implement Datafeed tutorial">​</a></h3>
<p>The <a href="https://www.tradingview.com/charting-library-docs/latest/tutorials/tutorials/implement_datafeed_tutorial/">Implement Datafeed tutorial</a> has been rewritten to use the Binance REST API, replacing the CryptoCompare integration.
The tutorial now extends into a dedicated <a href="https://www.tradingview.com/charting-library-docs/latest/tutorials/tutorials/implement_datafeed_tutorial/extend-to-trading-platform/">Extend to Trading Platform</a> section that shows how to add quote-based features on top of a working datafeed: real-time quotes, the DOM widget, news, alerts, and save/load integration.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="margin-meter">Margin meter<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#margin-meter" class="hash-link" aria-label="Direct link to Margin meter" title="Direct link to Margin meter">​</a></h3>
<p>The margin meter lets traders see how close their current exposure is to the available margin limit, giving them a real-time signal before placing or adjusting orders.
A new <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/order-ticket#enable-margin-meter">Enable margin meter</a> section in the Order Ticket article explains what the margin meter displays and walks through the full integration.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="conclusion">Conclusion<a href="https://www.tradingview.com/charting-library-docs/blog/version-3200#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>This release also includes important bug fixes: timescale marks now render correctly on slow network connections, Risk/Reward drawings work properly with custom price formatters, and repeated no-data requests for monthly resolutions have been resolved.
For the full list of updates, improvements, and fixes, see the <strong><a href="https://www.tradingview.com/charting-library-docs/latest/releases/release-notes">Release notes</a></strong>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Version 31.1.0]]></title>
            <link>https://www.tradingview.com/charting-library-docs/blog/version-3110</link>
            <guid>https://www.tradingview.com/charting-library-docs/blog/version-3110</guid>
            <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Welcome to Version 31.1.0.]]></description>
            <content:encoded><![CDATA[<p>Welcome to <strong>Version 31.1.0</strong>.</p>
<p>This release introduces <strong>CSP nonce</strong> support for stricter security compliance,
adds <strong>save/load context</strong> to enable globally shared drawings, and brings a new way to <strong>organize custom indicator inputs</strong>.
Let's dive into the highlights.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="key-updates">Key updates<a href="https://www.tradingview.com/charting-library-docs/blog/version-3110#key-updates" class="hash-link" aria-label="Direct link to Key updates" title="Direct link to Key updates">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="enhanced-security-with-csp-nonce-support">Enhanced security with CSP nonce support<a href="https://www.tradingview.com/charting-library-docs/blog/version-3110#enhanced-security-with-csp-nonce-support" class="hash-link" aria-label="Direct link to Enhanced security with CSP nonce support" title="Direct link to Enhanced security with CSP nonce support">​</a></h3>
<p>Strict Content Security Policies (CSP) are essential for financial apps.
To tighten security, you can now use a new <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.ChartingLibraryWidgetOptions/#nonce"><code>nonce</code></a> property in the Widget Constructor.
This property applies a cryptographic nonce to all TradingView-owned scripts and runtime-generated tags inside the iframe.</p>
<p>Note that the <code>nonce</code> value must match the nonce served in your server's <code>Content-Security-Policy</code> header for the current response.
Nonces must be unique per page load and should be cryptographically random (at least 128 bits of entropy, base64-encoded).</p>
<div class="language-js codeBlockContainer_MSfy theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_RkKg"><pre tabindex="0" class="prism-code language-js codeBlock_h8Em thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_gOgx"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> widget </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">TradingView</span><span class="token class-name punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token class-name">widget</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">container</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'tv_chart_container'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">nonce</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'server-generated-nonce-value'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">library_path</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'charting_library/'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">datafeed</span><span class="token operator">:</span><span class="token plain"> myDatafeed</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">/* Other widget constructor options */</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre><div class="buttonGroup_Gwcw"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CgaP" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_SVmo"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_haGG"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If omitted, the library automatically infers it from <code>window.__tvCspNonce</code> or a host page's <code>&lt;script nonce&gt;</code>.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="globally-shared-drawings">Globally shared drawings<a href="https://www.tradingview.com/charting-library-docs/blog/version-3110#globally-shared-drawings" class="hash-link" aria-label="Direct link to Globally shared drawings" title="Direct link to Globally shared drawings">​</a></h3>
<p>In Trading Platform, when the <a href="https://www.tradingview.com/charting-library-docs/latest/customization/Featuresets#saveload_separate_drawings_storage"><code>saveload_separate_drawings_storage</code></a> featureset is enabled, users now have access to a <strong>New drawings sync globally</strong> button in the drawing toolbar.
This allows users to synchronize their drawings across all layouts for a specific symbol.</p>
<img src="https://www.tradingview.com/charting-library-docs/assets/images/drawings-sync-globally-button-47ed96213873005ab93f46dee7a1c31c.png" alt="New drawings sync globally button" style="max-width:500px">
<p>To support this under the hood, we have extended the save/load adapter API when <a href="https://www.tradingview.com/charting-library-docs/latest/saving_loading/saving_drawings_separately">saving drawings separately</a>.
The <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IExternalSaveLoadAdapter/#savelinetoolsandgroups"><code>saveLineToolsAndGroups</code></a> method now receives an optional <code>context</code> argument containing metadata: <code>sharingMode</code>, <code>symbol</code>, and <code>requestId</code>.
Now, <code>context.sharingMode</code> tells you exactly what type of synchronization is happening.
This allows you to easily separate global drawings from layout-specific ones in your storage.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="organized-custom-indicator-inputs">Organized custom indicator inputs<a href="https://www.tradingview.com/charting-library-docs/blog/version-3110#organized-custom-indicator-inputs" class="hash-link" aria-label="Direct link to Organized custom indicator inputs" title="Direct link to Organized custom indicator inputs">​</a></h3>
<p>As <a href="https://www.tradingview.com/charting-library-docs/latest/custom_studies/">custom indicators</a> grow in complexity, the <em>Settings</em> dialog can become cluttered, making it difficult for users to find the parameters they want to adjust.
You can now use the <code>group</code> property in your custom indicator's <a href="https://www.tradingview.com/charting-library-docs/latest/custom_studies/metainfo/Custom-Studies-Inputs">inputs</a> to organize related inputs under a common header.</p>
<p>In the example below, "Fast Length" and "Slow Length" appear under a <strong>MACD</strong> header while "Signal Smoothing" appears under a <strong>Signal</strong> header.</p>
<!-- -->
<div class="tabs-container tabList_fEvE"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_rW_X tabs__item--active">Settings dialog</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_rW_X">Metainfo configuration</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_kSFv"><img src="https://www.tradingview.com/charting-library-docs/assets/images/group-inputs-a84de4471dc95f824dccf400e43ee737.png" alt="Group inputs" style="max-width:500px"></div><div role="tabpanel" class="tabItem_kSFv" hidden=""><div class="language-js codeBlockContainer_MSfy theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_RkKg"><pre tabindex="0" class="prism-code language-js codeBlock_h8Em thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_gOgx"><span class="token-line" style="color:#F8F8F2"><span class="token literal-property property">metainfo</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">inputs</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">id</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"fast_length"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Fast Length"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">defval</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">12</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"integer"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">group</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"MACD"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">id</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"slow_length"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Slow Length"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">defval</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">26</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"integer"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">group</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"MACD"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">id</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"signal_length"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">name</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Signal Smoothing"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">defval</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">9</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">type</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"integer"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            </span><span class="token literal-property property">group</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Signal"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre><div class="buttonGroup_Gwcw"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_CgaP" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_SVmo"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_haGG"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="conclusion">Conclusion<a href="https://www.tradingview.com/charting-library-docs/blog/version-3110#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>This release also includes important bug fixes, such as resolving a delayed chart refresh when applying <code>tradingProperties</code> overrides and fixing a <code>ReferenceError</code> when adding orders with exit levels.
For the full list of updates, improvements, and fixes, see the <strong><a href="https://www.tradingview.com/charting-library-docs/latest/releases/release-notes">Release notes</a></strong>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Version 31.0.0]]></title>
            <link>https://www.tradingview.com/charting-library-docs/blog/version-3100</link>
            <guid>https://www.tradingview.com/charting-library-docs/blog/version-3100</guid>
            <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[New major v31.0.0 release is here]]></description>
            <content:encoded><![CDATA[<p>Welcome to <strong>Version 31.0.0</strong>.</p>
<p>This major release introduces a new <strong>table view</strong> for precise data analysis, brings support for <strong>multiple exit levels</strong>, and applies <strong>UI updates</strong> across the chart.
Let's dive into the highlights.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="key-updates">Key updates<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#key-updates" class="hash-link" aria-label="Direct link to Key updates" title="Direct link to Key updates">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="data-table-view">Data table view<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#data-table-view" class="hash-link" aria-label="Direct link to Data table view" title="Direct link to Data table view">​</a></h3>
<p>Users can now toggle their display to view chart and indicator data in <strong>table view</strong>.
This mode is accessible via the legend's "More" menu or the chart <a href="https://www.tradingview.com/charting-library-docs/latest/ui_elements/context-menu">context menu</a>.</p>
<p><img decoding="async" loading="lazy" alt="Data table view" src="https://www.tradingview.com/charting-library-docs/assets/images/data-table-view-18e4e06ba21c4ec58607fc5d302abeaa.gif" width="1220" height="762" class="img_vf9z"></p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="multiple-exit-levels">Multiple exit levels<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#multiple-exit-levels" class="hash-link" aria-label="Direct link to Multiple exit levels" title="Direct link to Multiple exit levels">​</a></h3>
<p>Risk management is the cornerstone of professional trading.
Now, Trading Platform supports <strong>multiple exit levels</strong> (brackets).</p>
<p><img decoding="async" loading="lazy" alt="Create multiple exit levels" src="https://www.tradingview.com/charting-library-docs/assets/images/exit-levels-75d7cfc7c6e399f582cf182466a4b3ac.gif" width="1220" height="762" class="img_vf9z"></p>
<p>When the <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.BrokerConfigFlags#supportmultipleexitlevels"><code>supportMultipleExitLevels</code></a> configuration flag is enabled, users can now protect their orders and positions with multiple take-profit and stop-loss levels at different prices and quantities.
This gives your users granular control over their strategy execution directly from the chart.
For more information, see <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/trading-concepts/brackets/#multiple-exit-levels">Multiple exit levels</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="no-overlap-mode">No overlap mode<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#no-overlap-mode" class="hash-link" aria-label="Direct link to No overlap mode" title="Direct link to No overlap mode">​</a></h3>
<p>When multiple orders or positions cluster at the same price level, labels often become unreadable.
In version 30, we introduced <strong>no overlap mode</strong>, a context menu option that automatically offsets the trading lines and labels.
In this version, the <em>No overlap orders and positions</em> setting is now persistent.
Once enabled, the separation remains active until you manually toggle it off.</p>
<p><img decoding="async" loading="lazy" alt="Enable no overlapping orders and positions" src="https://www.tradingview.com/charting-library-docs/assets/images/no-overlap-mode-6f199d8d22c76c3a67497084c9315cc9.gif" width="1220" height="762" class="img_vf9z"></p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="adaptive-trading-layouts">Adaptive trading layouts<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#adaptive-trading-layouts" class="hash-link" aria-label="Direct link to Adaptive trading layouts" title="Direct link to Adaptive trading layouts">​</a></h3>
<p>To help maintain a clean interface on smaller devices, we have introduced a new <code>tradedGroupConfig</code> object within the <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.SingleBrokerMetaInfo"><code>SingleBrokerMetaInfo</code></a> interface.
This configuration controls the <em>traded group</em> — the combination of elements drawn on the chart for a single position or order (including lines, dots, and UI controls).</p>
<p>Inside this configuration, the new <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.TradedGroupConfig#supportadaptivelayout"><code>supportAdaptiveLayout</code></a> property controls responsiveness:</p>
<ul>
<li>When <code>true</code> (default), trading buttons (such as TP/SL modifications and P&amp;L displays) on position and order lines will automatically hide on narrow viewports to optimize the layout.</li>
<li>When <code>false</code>, these buttons will remain visible regardless of screen width.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="documentation">Documentation<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="new-guides">New guides<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#new-guides" class="hash-link" aria-label="Direct link to New guides" title="Direct link to New guides">​</a></h3>
<ul>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/configuration/events-and-subscriptions">Events and subscriptions</a> guide clarifies how to handle the library's event system.
The events are divided into three distinct scopes: widget, chart, and global, each with its own set of listeners and use cases.</li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/customization/overrides/trading-overrides#override-properties">Trading overrides convention</a> guide explains the hierarchical naming pattern used for trading properties.
Following the <code>{Side}.{State}.{Element}.{Property}</code> format, you can determine the correct property name without guessing.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="streamlined-structure">Streamlined structure<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#streamlined-structure" class="hash-link" aria-label="Direct link to Streamlined structure" title="Direct link to Streamlined structure">​</a></h3>
<p>We have significantly reorganized our documentation to make <strong>onboarding faster</strong>.
The previously expansive <em>Getting started</em> section has been refined into a focused <a href="https://www.tradingview.com/charting-library-docs/latest/introduction">Introduction</a> and <a href="https://www.tradingview.com/charting-library-docs/latest/quick-start">Get started</a> guides.
Advanced topics previously located in <em>Getting started</em> have been moved to their specific functional categories (such as <em>Configuration</em> or <em>Reference</em>).</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="faster-work-with-ai-assistant">Faster work with AI assistant<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#faster-work-with-ai-assistant" class="hash-link" aria-label="Direct link to Faster work with AI assistant" title="Direct link to Faster work with AI assistant">​</a></h3>
<p>As introduced in the previous major version, we provide a <a href="https://www.tradingview.com/charting-library-docs/charting-library-context.txt" download="charting-library-context.txt"><b>downloadable file</b></a> containing our complete documentation and full TypeScript definitions.
This file is <strong>updated with every release</strong> to reflect the latest API changes, new features, and deprecated methods.
Feeding this file to your AI assistant ensures it generates answers compatible with the latest release.
For more information, see <a href="https://www.tradingview.com/charting-library-docs/latest/resources/llm-context">Build AI library assistant</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="conclusion">Conclusion<a href="https://www.tradingview.com/charting-library-docs/blog/version-3100#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>This release also includes important bug fixes, such as corrected P&amp;L calculations for Risk/Reward drawings and improved quantity rounding logic.
For the full list of updates, improvements, and fixes, see the <strong><a href="https://www.tradingview.com/charting-library-docs/latest/releases/release-notes">Release notes</a></strong>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Version 30.2.0]]></title>
            <link>https://www.tradingview.com/charting-library-docs/blog/version-3020</link>
            <guid>https://www.tradingview.com/charting-library-docs/blog/version-3020</guid>
            <pubDate>Mon, 22 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Welcome to Version 30.2.0.]]></description>
            <content:encoded><![CDATA[<p>Welcome to <strong>Version 30.2.0</strong>.</p>
<p>This release introduces a more efficient way to <strong>handle extensive symbol lists</strong>, adds <strong>smarter data loading</strong> for the VWAP indicator, restores the <strong>dynamic Depth of Market</strong>, and includes other improvements and bug fixes.
Let's dive into the highlights.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="key-updates">Key updates<a href="https://www.tradingview.com/charting-library-docs/blog/version-3020#key-updates" class="hash-link" aria-label="Direct link to Key updates" title="Direct link to Key updates">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="paginated-symbol-search">Paginated Symbol Search<a href="https://www.tradingview.com/charting-library-docs/blog/version-3020#paginated-symbol-search" class="hash-link" aria-label="Direct link to Paginated Symbol Search" title="Direct link to Paginated Symbol Search">​</a></h3>
<p>If your app supports an extensive number of available symbols, loading hundreds of tickers at once can create a sluggish user experience during search.
Now, you can optimize this experience using <strong>paginated <a href="https://www.tradingview.com/charting-library-docs/latest/ui_elements/Symbol-Search">Symbol Search</a></strong>.</p>
<p>Usually, the Datafeed API relies on <code>searchSymbols</code> to return all results in a single payload.
Now, you can implement the optional <code>searchSymbolsPaginated</code> method instead.
This allows the library to request symbols in pages.</p>
<p>For example, you can return the first 50 matches instantly, and as the user scrolls down the list, the library will automatically trigger a request for the next batch. For implementation details, see <a href="https://www.tradingview.com/charting-library-docs/latest/connecting_data/datafeed-api/additional-methods#searchsymbolspaginated">Additional Datafeed API methods: <code>searchSymbolsPaginated</code></a>.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="smarter-data-loading-for-vwap">Smarter data loading for VWAP<a href="https://www.tradingview.com/charting-library-docs/blog/version-3020#smarter-data-loading-for-vwap" class="hash-link" aria-label="Direct link to Smarter data loading for VWAP" title="Direct link to Smarter data loading for VWAP">​</a></h3>
<p>Few things disrupt a charting workflow like adding an indicator and seeing an error message due to insufficient history.
Now, the <strong>VWAP indicator</strong> handles this automatically.</p>
<p>Instead of displaying a warning when there isn't enough data to calculate the target anchor for the latest bar, the indicator detects the gap and automatically requests the exact amount of historical data required.
This ensures a seamless experience for your users without them needing to manually scroll back to load more bars.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="return-of-dynamic-dom">Return of dynamic DOM<a href="https://www.tradingview.com/charting-library-docs/blog/version-3020#return-of-dynamic-dom" class="hash-link" aria-label="Direct link to Return of dynamic DOM" title="Direct link to Return of dynamic DOM">​</a></h3>
<p>The Depth of Market (DOM) widget now uses <strong>dynamic mode</strong> by default, restoring the pre-v28 behavior where the spread stays in focus automatically.
You can still provide the static mode by enabling the <a href="https://www.tradingview.com/charting-library-docs/latest/customization/Featuresets#static_dom"><code>static_dom</code></a> featureset.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="conclusion">Conclusion<a href="https://www.tradingview.com/charting-library-docs/blog/version-3020#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>This release also includes other fixes to make the library more stable and reliable, from accurate rounding in the Hull indicator to fixing context menu interactions on the floating toolbar.
For the full list of updates, improvements, and fixes, see the <strong><a href="https://www.tradingview.com/charting-library-docs/latest/releases/release-notes">Release notes</a></strong>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Version 30.1.0]]></title>
            <link>https://www.tradingview.com/charting-library-docs/blog/version-3010</link>
            <guid>https://www.tradingview.com/charting-library-docs/blog/version-3010</guid>
            <pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We are happy to announce version 30.1.0.]]></description>
            <content:encoded><![CDATA[<p>We are happy to announce <strong>version 30.1.0</strong>.</p>
<p>This release brings clear indicator legends, more flexible drag-to-export feature, and various other improvements and bug fixes.
Let's dive into the highlights.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="key-updates">Key updates<a href="https://www.tradingview.com/charting-library-docs/blog/version-3010#key-updates" class="hash-link" aria-label="Direct link to Key updates" title="Direct link to Key updates">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="distinguish-indicators-at-a-glance">Distinguish indicators at a glance<a href="https://www.tradingview.com/charting-library-docs/blog/version-3010#distinguish-indicators-at-a-glance" class="hash-link" aria-label="Direct link to Distinguish indicators at a glance" title="Direct link to Distinguish indicators at a glance">​</a></h3>
<p>When users apply the same indicator (like a Moving Average) to multiple symbols on a single chart, the legend can become ambiguous.
Hiding <a href="https://www.tradingview.com/charting-library-docs/latest/custom_studies/metainfo/Custom-Studies-Inputs">inputs</a> to clean up the view often removes the one piece of information they need most: which symbol each indicator line belongs to.</p>
<p>We've introduced the <a href="https://www.tradingview.com/charting-library-docs/latest/customization/Featuresets#always_show_study_symbol_input_values_in_legend"><code>always_show_study_symbol_input_values_in_legend</code></a> featureset.
When enabled, symbol inputs in your indicator legends remain visible even when other inputs are hidden.
This provides instant clarity, allowing users to confidently compare indicators across different instruments.</p>
<!-- -->
<div class="tabs-container tabList_fEvE"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_rW_X tabs__item--active">Featureset enabled</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_rW_X">Featureset disabled</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_kSFv"><img src="https://www.tradingview.com/charting-library-docs/assets/images/legend-inputs-featureset-enabled-fbc0783362ec0879e69adcd61ae80771.png" alt="The always_show_study_symbol_input_values_in_legend featureset is enabled" width="434" height="260"></div><div role="tabpanel" class="tabItem_kSFv" hidden=""><img src="https://www.tradingview.com/charting-library-docs/assets/images/legend-inputs-featureset-disabled-34d829300b37a5d484b4a76decefb417.png" alt="The always_show_study_symbol_input_values_in_legend featureset is disabled" width="434" height="260"></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="more-flexible-drag-to-export-feature">More flexible drag-to-export feature<a href="https://www.tradingview.com/charting-library-docs/blog/version-3010#more-flexible-drag-to-export-feature" class="hash-link" aria-label="Direct link to More flexible drag-to-export feature" title="Direct link to More flexible drag-to-export feature">​</a></h3>
<p>Previously, enabling the drag-to-export feature meant putting the entire chart into a rigid drag mode.
This locked out normal interactions, forcing you to write complex logic with key listeners to toggle the mode on and off.</p>
<p>We've completely reimagined this feature to be more flexible and easier to implement.
The new event-driven approach keeps your chart fully interactive at all times.
For implementation details, see <a href="https://www.tradingview.com/charting-library-docs/latest/ui_elements/Chart#enable-drag-to-export-feature">Enable drag-to-export feature</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="get-the-precise-range-of-visible-bars">Get the precise range of visible bars<a href="https://www.tradingview.com/charting-library-docs/blog/version-3010#get-the-precise-range-of-visible-bars" class="hash-link" aria-label="Direct link to Get the precise range of visible bars" title="Direct link to Get the precise range of visible bars">​</a></h3>
<p>To give you more precision, we've added a new method that complements the existing <code>getVisibleRange</code>.</p>
<p>Use the new <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IChartWidgetApi/#getvisiblebarsrange"><code>getVisibleBarsRange</code></a> when you need the range of the actual data on screen.
This method returns the precise time of the first visible bar to the last, including incomplete bars and correctly handling non-time-based styles like Renko.
The range does not include any empty future space beyond the last visible bar.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="documentation">Documentation<a href="https://www.tradingview.com/charting-library-docs/blog/version-3010#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation">​</a></h2>
<p>Here are the key updates in the documentation:</p>
<ul>
<li>New <a href="https://www.tradingview.com/charting-library-docs/latest/connecting_data/time-and-sessions/">Time and sessions</a> section explains core principles of how to correctly handle bar times, symbol sessions, and resolutions in your datafeed to prevent common issues.</li>
<li>The previous <strong>Tutorials</strong> section has been split into four focused categories: <a href="https://www.tradingview.com/charting-library-docs/latest/tutorials/tutorials">Tutorials</a>, <a href="https://www.tradingview.com/charting-library-docs/latest/tutorials/how-to-guides">How-to guides</a>, <a href="https://www.tradingview.com/charting-library-docs/latest/tutorials/framework-integrations">Framework integrations</a>, and <a href="https://codepen.io/tradingview" target="_blank" rel="noopener noreferrer">Interactive code examples</a>.
You can now find the type of content you need right away.</li>
<li>New <a href="https://www.tradingview.com/charting-library-docs/latest/troubleshooting">Troubleshooting</a> article is a practical starting point for diagnosing and resolving issues you may encounter while implementing the library.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="conclusion">Conclusion<a href="https://www.tradingview.com/charting-library-docs/blog/version-3010#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>This release also includes other fixes to make the library more stable and reliable, from fixing a VWAP indicator bug to ensuring UI elements resize correctly.
For the full list of updates, improvements, and fixes, see the <strong><a href="https://www.tradingview.com/charting-library-docs/latest/releases/release-notes">Release notes</a></strong>.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Version 30.0.0]]></title>
            <link>https://www.tradingview.com/charting-library-docs/blog/version-3000</link>
            <guid>https://www.tradingview.com/charting-library-docs/blog/version-3000</guid>
            <pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[New major v30.0.0 release is here]]></description>
            <content:encoded><![CDATA[<p>Another <strong>major release</strong> is here, packed with features and resources designed to make the integration process faster, charting features better, and your native solution more powerful.
Let’s dive into the highlights.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="key-updates">Key updates<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#key-updates" class="hash-link" aria-label="Direct link to Key updates" title="Direct link to Key updates">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="new-floating-tooltip-for-detailed-bar-analysis">New floating tooltip for detailed bar analysis<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#new-floating-tooltip-for-detailed-bar-analysis" class="hash-link" aria-label="Direct link to New floating tooltip for detailed bar analysis" title="Direct link to New floating tooltip for detailed bar analysis">​</a></h3>
<p>A new floating tooltip now appears after a long press on the chart, displaying detailed OHLC values and the price change for the selected bar.
The tooltip follows your cursor or finger as you move across the chart, providing a seamless way to analyze data.
To disable this feature, use the <a href="https://www.tradingview.com/charting-library-docs/latest/customization/Featuresets#long_press_floating_tooltip"><code>long_press_floating_tooltip</code></a> featureset.</p>
<p><img decoding="async" loading="lazy" alt="New floating tooltip for detailed bar analysis" src="https://www.tradingview.com/charting-library-docs/assets/images/floating-tooltip-ece3298dee5cea759c005323279e35c8.gif" width="1746" height="1180" class="img_vf9z"></p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="inactivity-gaps-on-daily-weekly-and-monthly-charts">Inactivity gaps on daily, weekly, and monthly charts<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#inactivity-gaps-on-daily-weekly-and-monthly-charts" class="hash-link" aria-label="Direct link to Inactivity gaps on daily, weekly, and monthly charts" title="Direct link to Inactivity gaps on daily, weekly, and monthly charts">​</a></h3>
<p>To provide a more accurate analysis of traded assets, we've extended inactivity gaps beyond intraday charts.
You can now display gaps for periods with no trading activity on daily, weekly, and monthly timeframes.
This gives users a better representation of time for instruments that don't trade every day.</p>
<p>This feature is enabled via the new <a href="https://www.tradingview.com/charting-library-docs/latest/customization/Featuresets#inactivity_gaps"><code>inactivity_gaps</code></a> featureset, which replaces the previous intraday-only version.
<a href="https://www.tradingview.com/charting-library-docs/latest/ui_elements/Chart#showhide-gaps-on-the-chart">Learn more about showing gaps on the chart</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="new-visibility-controls-in-watermarks">New visibility controls in watermarks<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#new-visibility-controls-in-watermarks" class="hash-link" aria-label="Direct link to New visibility controls in watermarks" title="Direct link to New visibility controls in watermarks">​</a></h3>
<p>You now have granular control over the default chart <a href="https://www.tradingview.com/charting-library-docs/latest/ui_elements/watermarks">watermark</a>.
We've added new <a href="https://www.tradingview.com/charting-library-docs/latest/api/interfaces/Charting_Library.IWatermarkApi">API methods</a> and corresponding UI checkboxes to independently toggle the visibility of the ticker, interval, and description.
This allows you to set a cleaner default state programmatically, and gives end-users the power to customize the watermark to their exact preference through the chart settings.</p>
<p><img decoding="async" loading="lazy" alt="New visibility controls in watermarks" src="https://www.tradingview.com/charting-library-docs/assets/images/watermark-settings-43af80a85051732e99dbaed3d3f543d4.png" width="1234" height="930" class="img_vf9z"></p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="updated-broker-sample">Updated Broker sample<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#updated-broker-sample" class="hash-link" aria-label="Direct link to Updated Broker sample" title="Direct link to Updated Broker sample">​</a></h3>
<p>The <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/trading-concepts/#broker-api">Broker API</a> is the heart of our trading integration.
To simplify your start, we’ve updated our <a href="https://github.com/tradingview/trading_platform/tree/master/broker-sample" target="_blank" rel="noopener noreferrer" title="The repository is private.">broker sample</a>&nbsp;🔐&nbsp;(access is <a title="Click to open the 'Getting Access' section." href="https://www.tradingview.com/charting-library-docs/latest/quick-start#1-get-access">restricted</a>) so you can develop faster and with more clarity.</p>
<p>Choose between two distinct paths: a <strong>minimalist scaffold</strong> with only the essentials for our <a href="https://www.tradingview.com/charting-library-docs/latest/tutorials/tutorials/implement-broker-api/">new step-by-step tutorial</a> or a <strong>feature-rich mock</strong> that demonstrates advanced functionality like bracket orders.
This new structure gives you the flexibility to either build from the ground up or learn from a complete example, streamlining your development process.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="instant-trading-info-with-enhanced-tooltips">Instant trading info with enhanced tooltips<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#instant-trading-info-with-enhanced-tooltips" class="hash-link" aria-label="Direct link to Instant trading info with enhanced tooltips" title="Direct link to Instant trading info with enhanced tooltips">​</a></h3>
<p>To make it easier to read trading information on a busy chart, we've added price and profit/loss (P&amp;L) details directly to the tooltips for <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/trading-concepts/positions">positions</a>, <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/trading-concepts/orders">orders</a>, and <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/trading-concepts/brackets">brackets</a>.
Simply hover over any on-chart trading line to see its exact price and current P&amp;L at a glance, without searching for crowded labels on the price axis.</p>
<p><img decoding="async" loading="lazy" alt="Instant trading info with enhanced tooltips" src="https://www.tradingview.com/charting-library-docs/assets/images/enhanced-trading-tooltips-fccf07ed62b8277ec962e43df4a0b67d.gif" width="664" height="500" class="img_vf9z"></p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="a-more-intuitive-trading-settings-panel">A more intuitive Trading Settings panel<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#a-more-intuitive-trading-settings-panel" class="hash-link" aria-label="Direct link to A more intuitive Trading Settings panel" title="Direct link to A more intuitive Trading Settings panel">​</a></h3>
<p>Meet the reworked <em>Trading Settings</em> panel, designed to be more intuitive and user-friendly.
Clear descriptions now appear under checkboxes, removing any guesswork when customizing the view.
A new toggle also lets you instantly hide <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/trading-concepts/profit-and-loss">Profit &amp; loss</a> information for both positions and brackets.</p>
<p><img decoding="async" loading="lazy" alt="A more intuitive Trading Settings panel" src="https://www.tradingview.com/charting-library-docs/assets/images/new-trading-settings-panel-8d6f4c748df969ca7ee34dbfa06eed45.png" width="791" height="1122" class="img_vf9z"></p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="watchlists-now-update-across-all-your-tabs">Watchlists now update across all your tabs<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#watchlists-now-update-across-all-your-tabs" class="hash-link" aria-label="Direct link to Watchlists now update across all your tabs" title="Direct link to Watchlists now update across all your tabs">​</a></h3>
<p>To create a more seamless user experience, <a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/Watch-List">watchlists</a> are now automatically synchronized across all open browser tabs.
Changes made in one tab, like adding or removing a symbol, instantly appear everywhere else.</p>
<p>This feature is enabled by default and requires the <a href="https://www.tradingview.com/charting-library-docs/latest/customization/Featuresets#use_localstorage_for_settings"><code>use_localstorage_for_settings</code></a> featureset.
To disable the feature, use the <a href="https://www.tradingview.com/charting-library-docs/latest/customization/Featuresets#watchlist_cross_tab_sync"><code>watchlist_cross_tab_sync</code></a> featureset.</p>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="documentation">Documentation<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation">​</a></h2>
<p>Great features reach their full potential only when they're easy to understand and to use.
That’s why our documentation focuses on explanations and practical examples, so you can go from idea to implementation faster.</p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="build-your-own-ai-expert">Build your own AI expert<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#build-your-own-ai-expert" class="hash-link" aria-label="Direct link to Build your own AI expert" title="Direct link to Build your own AI expert">​</a></h3>
<p>Many of you already use AI assistants to explore our library and write code.
Yet it's frustrating when a generic model hallucinates an answer or suggests a deprecated API based on outdated training data.</p>
<p>The power is now directly in your hands with a <a href="https://www.tradingview.com/charting-library-docs/charting-library-context.txt" download="charting-library-context.txt">downloadable documentation file</a>.
This is a comprehensive base containing our complete, up-to-date documentation and full TypeScript definitions. By feeding this file to a modern LLM, you transform a general-purpose AI into a dedicated expert on our library. Ask complex questions, request full code examples, and get reliable, context-aware answers instantly.
<a href="https://www.tradingview.com/charting-library-docs/latest/resources/llm-context">Learn how to set up your AI library assistant</a>.</p>
<p><img decoding="async" loading="lazy" alt="LLM answer example" src="https://www.tradingview.com/charting-library-docs/assets/images/llm-context-example-a934d0604636643c7a9ebc84b3006554.png" width="1192" height="933" class="img_vf9z"></p>
<h3 class="anchor anchorWithStickyNavbar_q9Uz" id="new-guides">New guides<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#new-guides" class="hash-link" aria-label="Direct link to New guides" title="Direct link to New guides">​</a></h3>
<p>We've also shipped a batch of new articles to tackle common questions and clarify powerful features:</p>
<ul>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/ui_elements/watermarks">Customization with Watermarks</a>. Learn how to dynamically control content, color, and visibility of chart watermarks.</li>
<li><a href="https://www.tradingview.com/charting-library-docs/latest/trading_terminal/trading-concepts/profit-and-loss">Best practices for Profit &amp; Loss</a>. Ensure the P&amp;L values in your UI match your backend perfectly. This article explains why you should provide your own P&amp;L data and shows you exactly how to do it, preventing discrepancies and building user trust.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_q9Uz" id="conclusion">Conclusion<a href="https://www.tradingview.com/charting-library-docs/blog/version-3000#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2>
<p>This release is about giving you better tools, clearer documentation, and more control over the user experience.
This post covers the highlights — for the full list of updates, improvements, and fixes, see the <strong><a href="https://www.tradingview.com/charting-library-docs/latest/releases/release-notes">Release notes</a></strong>.</p>]]></content:encoded>
        </item>
    </channel>
</rss>