Most watchlist imports that “don’t work” aren’t broken files — they’re symbols written in a format TradingView can’t resolve, or one that quietly resolves to a different instrument. The catch is that there is no single symbol format: crypto, forex and equities each follow a different rule, and the same punctuation means different things in each.
Everything below is drawn from three real TradingView exports — 816 Bitget perpetuals, 68 OANDA forex pairs and 6,277 US common stocks — so the edge cases are ones you’ll actually hit.
Every symbol takes the form EXCHANGE:TICKER. Without the prefix, TradingView resolves the ticker for you based on your plan and data subscriptions — and that choice can differ between your desktop and your phone. It’s why a watchlist sometimes looks right on one device and wrong on another.
The prefix matters more than most people expect. In the US stock export, 1,513 tickers appear under more than one exchange prefix. A bare ticker is genuinely ambiguous, not just technically ambiguous.
BTCUSDT ✗ dozens of exchanges list this BITGET:BTCUSDT ✓ spot, one venue BITGET:BTCUSDT.P ✓ perpetual, one venue
If you’re scripting anything against watchlists, this is the trap. No single rule works across all three.
| Asset class | Example | How the ticker splits |
|---|---|---|
| Crypto | BITGET:1000BONKUSDT.P | Variable-length base, quote matched from a known list, optional contract suffix |
| Forex | OANDA:EURUSD | Fixed 3/3 split, no separator, no suffix |
| Equities | NASDAQ:AAPL | Atomic — the ticker doesn’t split at all |
All 68 OANDA pairs are exactly six characters and split cleanly down the middle. Not one crypto symbol works that way. US stock tickers in the export run from 1 to 11 characters, so no fixed-length assumption survives either.
This is the subtlest failure in the whole system. A dot appears in both crypto and equity symbols and carries completely unrelated meaning.
BITGET:BTCUSDT.P .P = contract type (perpetual futures) NYSE:BRK.B .B = share class (Berkshire Class B)
Normalise your symbols by stripping everything after the dot and you turn Berkshire Class B into Class A, and a perpetual into spot. Six symbols in the US export use share-class dots: AGM.A, BRK.A, BRK.B, CRD.A, CRD.B and UHAL.B. Rare enough to slip past testing, expensive enough to matter.
Rule of thumb: .P is the only dot suffix to treat as a contract type. Anything else after a dot in an equity symbol is part of the ticker.
BITGET:BTCUSDT and BITGET:BTCUSDT.P are two different instruments with different prices, volume and history. All 816 symbols in the reference perpetuals list carry .P. Lose it in a copy-paste and you get a spot watchlist that looks correct at a glance.
If your funding-rate or open-interest indicators return no data, a missing .P is the first thing to check — those metrics only exist on perpetuals.
Low-priced tokens get listed as scaled contracts so the chart shows a workable price. The multiplier is baked into the ticker, and the notation isn’t standardised — one exchange can use two conventions at once:
| Notation | Examples from the same venue |
|---|---|
| Numeric | 1000BONKUSDT.P · 1000SATSUSDT.P · 10000NEXUSDT.P · 1000000MOGUSDT.P |
| Abbreviated | 1MBABYDOGEUSDT.P · 1MCHEEMSUSDT.P |
1000000MOG and 1MCHEEMS express the same idea two different ways on one venue. Across venues it’s worse: a token may be 1000PEPE on one and PEPE on another, and neither string resolves on the other platform.
The reference file splits 757 USDT / 50 USDC / 9 USD, and 49 base assets appear against more than one quote:
BITGET:BTCUSD.P BITGET:BTCUSDC.P BITGET:BTCUSDT.P ← three contracts, three charts
Deduplicate by base asset and you delete instruments you meant to keep.
Stripping the quote off the end to recover the base breaks on short tickers — and there are 51 of them in this one file:
| Symbol | Correct | Plausible misparse |
|---|---|---|
| SUSDT.P | S / USDT | SUSD / T |
| OPUSDT.P | OP / USDT | OPUSD / T |
| PLUSDT.P | PL / USDT | PLUS / DT |
| USDCUSDT.P | USDC / USDT | USDC read as the quote |
USDCUSDT.P is the sharpest case: strip USDT and you’re left with USDC, which looks like a quote currency, so the pair vanishes from a lot of parsers. Match the quote against a known list, longest first, rather than trusting the tail of the string.
OANDA pairs are six characters, no separator, base then quote:
OANDA:EURUSD EUR / USD OANDA:USDCNH USD / CNH — offshore yuan, not CNY OANDA:CHFZAR CHF / ZAR
The catch is the broker prefix, not the ticker. OANDA:EURUSD, FX:EURUSD and FX_IDC:EURUSD are the same pair from different data sources, with slightly different prices, spreads and session boundaries. A backtest run against one won’t reproduce exactly on another.
The 68-pair export covers 21 currencies. Note CNH rather than CNY — offshore and onshore yuan are separate instruments, and only the offshore one is freely tradeable.
The US common stock export spreads across seven prefixes:
| Prefix | Count | What it is |
|---|---|---|
| OTC | 3,177 | Over-the-counter |
| BOATS | 1,532 | Blue Ocean ATS — overnight session |
| NASDAQ | 896 | Nasdaq |
| NYSE | 630 | New York Stock Exchange |
| AMEX | 40 | NYSE American |
| CBOE / FINRA | 2 | Single listings |
Blue Ocean ATS is an alternative trading system for US National Market System stocks, running roughly 20:00 to 04:00 Eastern, Sunday through Thursday. It fills the overnight gap when the main exchanges are shut, which makes it useful if you trade US equities from Asia or the Gulf.
TradingView added the BOATS: prefix in 2025, and it’s the second-largest prefix in this export — bigger than NYSE. So NASDAQ:AAPL and BOATS:AAPL are the same company on two venues with different hours, liquidity and price action. If a stock shows up twice in your watchlist and you don’t know why, this is usually the reason.
Of the 3,177 OTC symbols, 1,642 are five characters ending in F — the convention for foreign ordinary shares traded over-the-counter in the US. A five-character ticker ending in Y would be an ADR instead. Neither is interchangeable with the company’s home-market listing, which trades in its local currency on its local exchange.
Both reference exports ship duplicate lines. The crypto file has 816 lines and 809 unique symbols. The stock file has 6,277 lines and 6,223 unique. That’s systematic, not a one-off — so deduplicate before importing, but by full symbol, never by ticker alone, since the same ticker legitimately appears under several prefixes.
TradingView accepts a plain .txt file. One symbol per line, or comma-separated. No header row:
BITGET:BTCUSDT.P OANDA:EURUSD NASDAQ:AAPL
Section headers are optional and take a triple-hash prefix:
###Majors BITGET:BTCUSDT.P BITGET:ETHUSDT.P ###FX OANDA:EURUSD
.P present for perpetuals, absent for spotChartWatch is an independent tool and is not affiliated with, endorsed by, or officially connected to TradingView, Inc. “TradingView” is a trademark of its respective owner. Exchange and venue names are trademarks of their respective owners.