The question is usually asked as one question and is really two. How many indicators can I put on a chart is a billing question, answered by your plan. Why does my chart get slow, or my script stop drawing, or my script refuse to load at all, is a different question with different answers, and no plan upgrade fixes most of them. The second set is where the interesting limits live.
Short answer
The number of indicators per chart is set by your TradingView plan, rising from a small handful on the free tier to fifty on the highest. Checked in September 2026, the figures were 2 on Free, 5 on Essential, 10 on Plus, 25 on Premium, and 50 on the top tier, but TradingView changes plan names and allowances, so verify against their pricing page rather than trusting any third-party number including this one. Separately and independently, Pine Script imposes its own per-script limits on security requests, drawing objects, execution time, and memory, and those apply regardless of what you pay.
Key facts
- Indicators per chart is a plan limit. As checked in September 2026 it ranged from 2 on the free tier to 50 on the highest, with 5, 10, and 25 on the tiers between.
- TradingView renames plans and revises allowances periodically, so the pricing page is the only reliable source for the current numbers.
- Pine Script limits apply per script and are independent of your plan: a script cannot exceed them by upgrading.
- Drawing objects such as labels, lines, and boxes are capped at 500 each per script, and the default allowance is well below that.
- There is a platform limit on distinct request.security() calls per script, and every unique symbol, timeframe, and expression combination counts toward it.
- Scripts have execution time and memory budgets, and exceeding them produces a runtime error rather than a slow script.
- Available historical bars is also a plan limit, so a script can behave differently on the same symbol under a different subscription.
- A single Pine script can plot many series and draw many objects, so consolidating several indicators into one script is a legitimate way around the per-chart count.
| Limit | Set by | Fixable by upgrading? | What happens when you hit it |
|---|---|---|---|
| Indicators per chart | Your plan | Yes | You cannot add another until one is removed |
| Historical bars available | Your plan | Yes | Calculations have less history to work with |
| Drawing objects per script | Pine Script | No | Oldest objects are deleted silently |
| request.security() calls | Pine Script | No | The script fails to compile |
| Execution time | Pine Script | No | Runtime error, script stops |
| Memory | Pine Script | No | Runtime error, script stops |
The plan limit, and why we are not going to promise you a number
Indicators per chart scales with your subscription. When we checked in September 2026, the allowance was 2 on the free tier, 5 on Essential, 10 on Plus, 25 on Premium, and 50 on the highest tier. Those figures were consistent across most sources, though not all: some listed the free tier as 3 rather than 2, which is a good illustration of the problem with third-party numbers.
TradingView revises these. Plan names have changed more than once, tiers have been added, and allowances have moved. Any article stating a figure is stating a figure from whenever it was written, and that includes this one. The pricing page on TradingView is the authority and takes ten seconds to check, so check it rather than trusting a blog post, ours included.
What is stable is the shape: the free tier is deliberately restrictive, and the allowance rises steeply across the paid tiers. If your problem is genuinely that you want a dozen indicators visible at once, that is a purchasing decision and there is not much more to say about it. What is worth more of your attention is that most people asking this question do not actually need a higher count.
You probably need fewer indicators than you think
A single Pine script can plot as many series as you like. That means several indicators can be consolidated into one, which counts once against your per-chart allowance rather than once each. A moving average, a volume average, and an ATR-derived level are three separate indicators or one script with three plots, and the chart cannot tell the difference.
This is the highest-leverage answer to the question and it is almost never the one people are looking for. If you routinely use the same four indicators together, combining them into one script is a genuine improvement rather than a workaround: fewer objects on the chart, one settings dialog rather than four, and consistent parameter naming. It also gets you under the limit for free.
There is a real tradeoff. A combined script is less flexible than separate ones, because you cannot remove just one part without editing the code, and a mistake in one section affects the whole thing. So combine indicators you always use together, and keep separate the ones you toggle on and off. The consolidation is worth doing where the grouping is stable and counterproductive where it is not.
Overlays help too, but for a different reason. Several indicators drawn in the same pane keep the chart readable, which is usually the actual complaint behind wanting more indicators. Frequently the problem is not the count but that ten panes leaves no room for price.
//@version=6
// One indicator, four plots. Counts once against the per-chart limit.
indicator("Combined moving averages and bands", overlay = true)
fastLen = input.int(10, "Fast MA", minval = 1, group = "Moving averages")
slowLen = input.int(30, "Slow MA", minval = 1, group = "Moving averages")
trendLen = input.int(200, "Trend MA", minval = 1, group = "Moving averages")
atrLen = input.int(14, "ATR length", minval = 1, group = "Volatility")
atrMult = input.float(2.0, "ATR band", minval = 0.1, group = "Volatility")
fast = ta.sma(close, fastLen)
slow = ta.sma(close, slowLen)
trend = ta.sma(close, trendLen)
atrValue = ta.atr(atrLen)
// display arguments let each plot be toggled from the settings dialog,
// so one script keeps most of the flexibility of separate ones.
plot(fast, "Fast MA", color = color.new(color.teal, 0))
plot(slow, "Slow MA", color = color.new(color.orange, 0))
plot(trend, "Trend MA", color = color.new(color.gray, 0), linewidth = 2)
plot(slow + atrValue * atrMult, "Upper band", color = color.new(color.gray, 60))
plot(slow - atrValue * atrMult, "Lower band", color = color.new(color.gray, 60))Grouping the inputs is what keeps a combined script usable. Without the group argument, a script with five sections produces one long undifferentiated settings dialog, which is the main reason people abandon consolidation after trying it once. With grouping, the dialog reads like several indicators that happen to share a window.
The Pine Script limits, which upgrading does not touch
This is the part worth knowing, because these limits produce the confusing failures. They apply per script, they are properties of the language and platform rather than of your subscription, and hitting one is not a signal to upgrade.
Drawing objects are capped at 500 each for labels, lines, and boxes, and the default allowance in force when you do not specify anything is considerably lower. When the cap is reached, the oldest objects are deleted to make room, silently. That is the mechanism behind the most confusing symptom in Pine Script: annotations that appear on recent bars and are simply absent further back, with no error anywhere. Our guide to the drawing limits covers the diagnosis and the fix, which is usually to draw on events rather than on every bar.
Requests for other symbols or timeframes are limited per script, and the accounting catches people out because every unique combination of symbol, timeframe, and expression counts separately. A script requesting four values from three timeframes is not making three requests. Exceeding the limit is a compile error, so at least it announces itself.
Execution time and memory are budgeted, and exceeding either produces a runtime error rather than a script that merely runs slowly. Loops that execute on every bar are the usual cause, since their cost multiplies by the number of bars on the chart. So are unbounded arrays and drawing objects that are created and never deleted. Our guide to why Pine Script runs slowly works through the specific patterns.
The history-referencing depth is a related limit with its own error message, and it is one of the few that tells you the fix in the message, which unfortunately encourages people to apply it without understanding the cost. Larger history buffers use more memory, so silencing that error by declaring a large depth can convert a clear error into a vague performance problem.
Historical bars is a plan limit that changes results
How much history your charts load is also set by your plan, and this one has consequences beyond convenience. A two-hundred-period moving average needs two hundred bars before it produces a value. A backtest over a period your plan cannot load is not a shorter backtest, it is a different one. And a script that works on a liquid symbol with years of data can behave differently on a recent listing or a high timeframe simply because fewer bars exist.
This produces a genuinely puzzling class of report: the same script, on the same symbol, giving different results for two people. If the two accounts have different history allowances, the calculations have different amounts of data to warm up on, and long-lookback indicators are the most affected. It is worth ruling out before suspecting the code.
It also interacts with the history-depth limit in a way worth knowing. A reference three hundred bars back cannot be satisfied on a chart with two hundred bars, regardless of how the buffer is declared. If a script fails only on certain symbols or timeframes, count the available bars before changing anything in the code.
Diagnosing which limit you have actually hit
The symptoms map onto the causes fairly cleanly, so it is worth having the mapping to hand. If TradingView refuses to add another indicator and says so, that is the plan limit and the only fix is a plan or a consolidation. If the script compiles and runs but annotations are missing from older bars, that is the drawing allowance, and it is silent. If the script fails to compile with a message about securities, that is the request limit. If it compiles and then stops with a runtime error, that is time or memory.
The one that gets misdiagnosed most often is the drawing limit, precisely because there is no error. People conclude their detection logic is broken and spend an evening on it. The check takes ten seconds: scroll to the left edge of the chart. If drawings are present on the right and absent on the left, the logic is fine and the allowance is exhausted.
The second most misdiagnosed is slowness, because it feels like a plan problem and is not. A chart with several heavy scripts on it will be slow on any subscription, and the fix is in the scripts. Loops running per bar, repeated security requests, and drawing objects accumulating without deletion account for most of it. Our error decoder identifies a specific message once you have one.
What to do when you genuinely need more
Consolidate first, because it is free and frequently sufficient. Group the indicators you always use together into one script with grouped inputs and per-plot display toggles. This is the option most people have not considered and it solves the problem outright for a lot of setups.
Then reduce. A chart with fifteen indicators is usually a chart nobody can read, and the honest question is whether the count reflects a need or an accumulation. This is not a technical point and it is often the useful one.
Then, if the requirement is real, upgrade. Wanting a dozen indicators visible simultaneously is a legitimate need and the higher tiers exist for it. Just be clear about which limit you are buying your way past, because the Pine Script limits come with the language and no tier removes them.
And if what you actually want is one indicator that does something the available ones do not, that is a coding problem rather than a limits problem. Writing one script that computes exactly what you need is usually fewer objects on the chart than assembling the same idea out of four generic indicators.
Where a Pine-focused workflow helps
Consolidating several indicators into one script is a mechanical but fiddly job. Input names collide, plot titles need to stay distinct, groups need assigning, and it is easy to end up with a script that works but whose settings dialog is unusable. It is also exactly the kind of task where asking a general chat assistant produces a plausible script that quietly drops one of the calculations.
PineScripter is the product we build, and the fit here is that it edits in place and shows a diff, so combining scripts can be done one section at a time with each addition visible. That matters when the risk is silent omission rather than a compile error. It also retrieves the Pine Script manual, so the limit-related parameters such as the drawing counts come from documentation rather than from a guess about what they are called.
The plan question is not something any tool answers. Check TradingView’s pricing page for the current allowance, and treat every number in this article, including ours, as needing that confirmation.
Frequently asked questions
How many indicators can you add on TradingView?
It depends on your plan. As checked in September 2026 the allowance was 2 on the free tier, 5 on Essential, 10 on Plus, 25 on Premium, and 50 on the highest tier. TradingView revises plan names and allowances periodically, so confirm the current figures on their pricing page rather than relying on any third-party list.
How do I get more indicators without upgrading?
Combine them into one Pine script. A single script can plot as many series as you like and counts once against the per-chart limit, so four indicators you always use together become one. Use the group argument on inputs and display toggles on plots so the combined script stays usable.
Why do my Pine Script labels disappear from older bars?
You have exhausted the drawing allowance, which is capped at 500 labels per script with a default well below that. When the cap is reached the oldest are deleted with no error, which is why recent bars look fine and older ones are empty. This is a Pine Script limit and upgrading your plan does not change it.
Do Pine Script limits change with my TradingView plan?
The per-chart indicator count and the amount of historical data available do. The per-script Pine Script limits on drawing objects, security requests, execution time, and memory do not: they are properties of the platform and apply the same on every tier.
Why is my TradingView chart slow?
Usually the scripts rather than the plan. Loops that run on every bar cost their execution multiplied by the number of bars on the chart, repeated request.security() calls are expensive, and drawing objects that accumulate without being deleted add up. A chart with several heavy scripts is slow on any subscription.
Does more historical data change my indicator values?
It can. An indicator with a long lookback needs that many bars before it produces a value, so an account with a larger history allowance has more warm-up data. This is why the same script on the same symbol can give slightly different results for two people, and it is worth ruling out before suspecting the code.
The practical takeaway
Two ceilings, and they are unrelated. The per-chart indicator count is a plan limit, and the fastest way past it is usually to combine the indicators you always use together into one script rather than to upgrade. Everything else, the drawing caps, the security request limit, the time and memory budgets, comes with Pine Script itself, applies on every tier, and is addressed in the code.
Because consolidating several indicators into one script risks silently dropping a calculation rather than failing loudly, PineScripter is our product and shows each section as it is added so you can check nothing went missing. It cannot tell you which plan you need, and TradingView’s pricing page is the only current source for that.
Sources
- TradingView pricing and plan comparison (the authority on per-chart limits)
- TradingView Pine Script documentation: script limitations
- TradingView Pine Script documentation: drawing object limits
Related reading: why a Pine script runs slowly, the label and line drawing limits, the security request limit, what Pine Script can and cannot do, the Pine Script error decoder.
Disclaimer: PineScripter is a coding tool for Pine Script development. It does not provide financial advice and does not guarantee trading profits. Always backtest strategies thoroughly and understand the risks before live trading.