How to Load a PineScript Indicator

How to Load a PineScript Indicator

25 October 2026, 19:28
Herath Indika
0
39

ChartZephyr compiles TradingView Pine Script indicators and runs them natively in its own bytecode VM inside MetaTrader 5. This guide shows how to load a Pine Script indicator into the VM, step by step.

  • The ChartZephyr EA available in your terminal's Navigator.
  • Your indicator as a .pine source file (Pine Script v4 / v5 / v6 with a //@version=N annotation).
  • A chart to attach the EA to.

Step 1 - Put the script where ChartZephyr can find it

ChartZephyr scans two drop folders for scripts. Copy your .pine file into either (create the folders if they do not exist):

<MQL5 data folder>\MQL5\Files\zephyr\custom - the terminal's data folder <terminal common folder>\Common\Files\zephyr\custom - the shared folder

Open Data Folder

The terminal data folder path looks like C:\Users\<you>\AppData\Roaming\MetaQuotes\Terminal\<ID>\MQL5\Files\zephyr\custom . The common folder is shared by every terminal installed on the machine and is the only one the Strategy Tester sees.

Notes:

  • The zephyr\custom folder is created automatically on every EA start, so it usually already exists. Its contents are never overwritten or deleted by the EA.
  • The 85 indicators of the built-in library live in zephyr\builtin and are unpacked there once by the EA - you do not need to touch that folder.
  • Both .pine source files and .pineb compiled bytecode files are accepted.

Step 2 - Attach the ChartZephyr EA to a chart

Drag ChartZephyr from the Navigator onto a chart. The chart starts empty (no indicators are loaded by default).
Main UI

Step 3 - Add the indicator from the toolbar

  1. Click the Indicators button on the chart's top toolbar.
  2. The Add Indicator dialog opens with two sections:
    • Builtin - the indicators shipped inside the EA (unpacked from zephyr\builtin ).
    • Custom scripts - everything in zephyr\custom , including your file.
  3. Click your indicator.

    Add Indicator Dialog

Step 4 - Wait for the warm-up replay

A freshly added script warms up through a chunked history replay on a 50 ms timer - time-sliced so the terminal never blocks. While it runs you see a loading spinner, and the Experts journal prints progress lines (with InpShowDebugMessages=true ). 

Where the indicator renders

  • overlay=true (the default for strategies) renders in the main pane.
  • overlay=false (the default for indicators) gets its own sub-pane below the main pane, with its own price scale.

You can load up to 8 scripts at once, in any mix of indicators and at most one strategy() .

Adjusting inputs

Click the gear button ("S") at the chart's top-right to open the TradingView-style settings dialog:


  • One row per input.*() in the script, grouped like TradingView; the dialog shows a script selector dropdown when more than one script is loaded.
  • OK applies the values (no recompile, no EA reload), Defaults restores the script defaults, Cancel/x discards.
  • Changed values persist per script/symbol/timeframe and are reloaded next time.



The Style and Visibility tabs control per-element colors, line styles and which timeframes the script is visible on - like TradingView.

Removing an indicator

Hover the indicator's legend row in its pane and click the trash icon. The eye (hide/show) and gear (settings) icons are on the same hover toolbar. The built-in Volume histogram row works the same way.

Troubleshooting

  • The script does not appear in the Custom scripts section - check the folder: the dialog reads MQL5\Files\zephyr\custom (terminal data folder) first, then Common\Files\zephyr\custom . Files added after the dialog was opened require reopening it.
  • Wrong values vs TradingView - check the //@version=N annotation: the compiler applies per-version semantics (a missing annotation is treated as v5 with a warning). Only the Pine subset described in the product documentation is implemented; unsupported syntax fails at compile time with a message in the Experts log.
  • Compile errors - the Experts log always prints errors even with InpShowDebugMessages=false .