← TradingView strategy optimizer
Pine Script · Optimization·June 2026·9 min read

Pine Script Parameter Optimization — A Practical Guide

How to design your Pine Script inputs for optimization, choose sensible ranges, and avoid the most common parameter-tuning mistakes.

Pine Script parameter optimization lives or dies at the input() declarations. A poorly designed input list will produce a beautiful but worthless optimization report; a clean one makes even a basic random search produce robust, trade-ready parameter sets. This guide is about getting the design right before you run a single combination.

Rule 1 — Expose fewer inputs, not more. Every additional optimizable input doubles or triples the curve-fitting risk. Aim for 3–5 truly meaningful inputs (e.g. lookback length, stop multiplier, profit target, regime filter). Cosmetic inputs (colors, plot widths, label text) should be marked group="Display" and excluded from optimization.

Rule 2 — Use input.int and input.float with explicit minval, maxval, and step. The optimizer reads these to build its search space. input.int(title="RSI Length", defval=14, minval=5, maxval=40, step=1) is unambiguous; a bare input.int(14) tells the optimizer nothing.

Rule 3 — Pick step sizes that match the asset and timeframe. On 1H crypto, an ATR multiplier step of 0.1 is meaningful; on daily indices, 0.5 is. Step sizes that are too small inflate the search space without changing strategy behavior — they're a tax on optimization time and a magnet for noise.

Rule 4 — Group correlated inputs. If your strategy has both fastLen and slowLen for an EMA crossover, constrain the search so slowLen > fastLen. You can do this with a guard in the script (if slowLen <= fastLen: strategy.exit early) so invalid combinations score zero and get pruned by the optimizer.

Rule 5 — Always include at least one regime filter. A strategy with no trend filter (e.g. price > 200 EMA) will optimize to fit a single market regime and break on the next one. Adding a binary input.bool("Use Trend Filter", true) lets the optimizer decide whether the filter helps — and if it always picks true on out-of-sample data, you've validated a real component, not noise.

Rule 6 — Separate entry and exit parameters. Optimizing entries and exits together is fine, but make sure both have at least one degree of freedom. A common failure mode is to optimize 4 entry inputs and lock the exit at a fixed stop — the optimizer then 'discovers' that wider stops always win on the in-sample data, which is meaningless.

How a TradingView strategy optimizer reads your script. Optimizer AI parses every input() call, builds the search space from minval/maxval/step, runs Random Search or Genetic Algorithm across the cartesian product, and ranks results with robustness scoring instead of raw profit. The cleaner your inputs, the cleaner the output.

Worked example. A simple RSI mean-reversion strategy with rsiLen (5–30, step 1), oversold (15–35, step 1), overbought (65–85, step 1), atrStopMult (1.0–4.0, step 0.25), and a useTrendFilter boolean. Total search space ≈ 12,500 combinations — well within genetic-algorithm range, and small enough that out-of-sample validation catches overfit candidates.

Ready to optimize Pine Script strategy parameters the right way? Run the workflow above on the TradingView strategy optimizer, and pair it with the curve-fitting avoidance guide for the validation steps.

Related guides