It is a fair question. Python and JavaScript already existed, both had huge communities, and either could theoretically run trading logic. Why would TradingView spend years building and maintaining an entirely new language instead of embedding one that already worked? The answer is not stubbornness. It is that a general-purpose language would have been the wrong tool for the specific job, and understanding why explains a lot about how Pine Script behaves.
The scale problem
TradingView runs an enormous number of user scripts simultaneously, across millions of charts. Every script someone writes runs on TradingView's shared infrastructure, not on their own machine. That single fact drives almost every design decision. You cannot let millions of untrusted scripts run arbitrary code on your servers, because any one of them could hang, consume unbounded memory, or try to reach places it should not. A general language like Python gives users far too much power in that setting.
The sandbox and safety
Pine Script runs in a tightly controlled sandbox. It cannot make network calls, cannot read or write files, and cannot access the system it runs on. These are the same limits we map in what Pine Script can and cannot do, and from the user's side they can feel restrictive. From TradingView's side they are the whole point: a language that literally cannot reach the network or the filesystem is safe to run at massive scale without auditing every script. Building their own language let them bake those guarantees into the language itself rather than trying to cage a general one.
The hard performance ceilings serve the same goal. The 500-millisecond per-bar loop limit and the drawing-object caps, detailed in why your Pine Script is slow, exist so that no single script can degrade the platform for everyone else. A general language has no such built-in governor.
Determinism
A trading indicator must be reproducible. Given the same bars, it should always produce the same result, whether it runs today, tomorrow, or in a replay. General languages make it easy to introduce non-determinism through randomness, external calls, or system state. Pine Script is designed to be deterministic, so a script replays history identically every time. That property is essential for backtesting to mean anything, a theme we pick up in how TradingView backtesting actually works.
The series model as a domain fit
The most elegant reason is the data model. Financial charts are fundamentally series: columns of values indexed by bar. Pine Script's series-of-values model, explained in the execution model guide, matches that shape exactly. A moving average, a crossover, a lookback are all natural operations on a series, so they read cleanly in Pine Script and awkwardly in a general language where you would be managing arrays and indices by hand. The language fits the domain because it was shaped by the domain.
This is also why Pine Script is so concise. Because the once-per-bar execution and the history operator are built into the language, an indicator that would be dozens of lines of bookkeeping in Python is a few lines in Pine. The design trades general power for a perfect fit to one problem, and for charting that trade is clearly worth it.
The tradeoff, stated honestly
Every one of these choices costs the user something. No network means no external data. The sandbox means no file I/O. Determinism and safety mean no arbitrary computation. Pine Script is powerful within its domain and firmly walled outside it, which is exactly the comparison we draw in Pine Script vs Python. TradingView chose a language that does one thing exceptionally well over one that does everything adequately and dangerously.
The one remaining friction is that Pine Script is still a language you have to learn, and its unusual model trips people up. That is the gap PineScripter fills: it lets you get the benefits of Pine's design, the speed, the safety, the chart-native fit, by describing what you want in plain English and receiving working v6 code. If Pine's philosophy appeals but its syntax does not, you can try it free at PineScripter.
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.