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 
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).
Step 3 - Add the indicator from the toolbar
- Click the Indicators button on the chart's top toolbar.
- 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.
- Click your indicator.

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 .


