Валютные пары: основные, второстепенные и экзотические (руководство для разработчиков)
Если вы строите что угодно, что касается международных денег — чекаут, финтех-дашборд, торгового бота, казначейский инструмент или даже простой конвертер валют — вы столкнётесь с понятием валютных пар уже в первый час работы. Пары — это единица измерения на рынке Forex (FX): у одной валюты нет цены сама по себе, она имеет цену только относительно другой валюты. Понимание того, как пары классифицируются, котируются и обрабатываются в коде — это фундамент для любой другой FX-функциональности, которую вы когда-либо будете строить.
Это руководство объясняет основные, второстепенные и экзотические валютные пары с точки зрения разработчика. Мы разберём, что означает каждая категория, какие соглашения нужно соблюдать при чтении и записи строк пар, и какие практические паттерны использовать для получения, нормализации и расчёта пар через документацию Finexly API. К концу вы будете знать, какие пары поддерживать в первую очередь, как обрабатывать пограничные случаи и как получать живые курсы несколькими строками кода.
Что такое валютная пара?
Валютная пара — это котировка, выражающая цену одной валюты в единицах другой. Она всегда записывается двумя кодами ISO 4217 — например EUR/USD или EURUSD — и одной десятичной ценой.
Первая валюта в паре — это базовая валюта. Вторая — котируемая валюта (иногда называемая контрвалютой). Цена показывает, сколько единиц котируемой валюты нужно, чтобы купить одну единицу базовой.
Так, EUR/USD = 1,0850 означает, что один евро стоит 1,0850 долларов США. Если котировка поднимается до 1,0900, евро укрепился относительно доллара. Если падает до 1,0800, евро ослаб. Базовая валюта — это «то, что оценивается», а котируемая — «деньги, которыми вы платите».
Простое соглашение, но почти каждый разработчик хотя бы раз спотыкается на нём. Если вы храните курсы, не отслеживая последовательно, какая сторона базовая, а какая котируемая, рано или поздно вы инвертируете число и тихо переплатите или недоплатите пользователю. Как этого избежать — в разделе кода ниже. Чтобы глубже понять, что движет самой ценой, прочитайте наше руководство как работают валютные курсы.
Глобальный рынок FX оборачивает около 7,5 трлн долларов в день по данным трёхлетнего обзора Банка международных расчётов, что делает его крупнейшим финансовым рынком в мире. Эта ликвидность распределена между парами неравномерно — большая её часть концентрируется в небольшой группе, называемой основными парами.
Основные валютные пары
Основные пары — самые торгуемые валютные пары в мире. У рынка нет единого официального определения, но на практике у каждой основной пары есть два свойства: с одной стороны находится доллар США (USD), с другой — валюта крупной, стабильной, развитой экономики.
Семь пар, которые почти повсеместно признаны основными:
EUR/USD— Евро / Доллар СШАUSD/JPY— Доллар США / Японская иенаGBP/USD— Британский фунт / Доллар СШАUSD/CHF— Доллар США / Швейцарский франкAUD/USD— Австралийский доллар / Доллар СШАUSD/CAD— Доллар США / Канадский долларNZD/USD— Новозеландский доллар / Доллар США
Вместе основные пары составляют примерно 75% мирового объёма FX, причём только EUR/USD приходится около четверти всех торгов. Эта концентрация имеет прямые последствия для всего, что вы строите:
- Самые узкие спреды. Разница между бид (что платят покупатели) и аск (что просят продавцы) минимальна на основных. Если вы показываете курсы конечным пользователям, это означает наименьшую разницу между средним рыночным курсом и тем, что они получат на самом деле.
- Самая высокая частота обновления. Тиковые данные по основным приходят много раз в секунду в часы рынка. Второстепенные и экзотические обновляются реже.
- Самые надёжные исторические данные. Для бектестинга, аналитики или построения графиков основные пары имеют самые чистые, длинные и без пропусков истории.
- Минимальная стоимость API на полезный ответ. Поскольку одна основная пара часто служит блоком для построения десятков других курсов (через расчёт кросс-курсов), вы можете обслуживать глобальный продукт, агрессивно кэшируя основные и выводя остальные.
Минимальный пример получения всех семи основных от Finexly одним запросом:
// Fetch all major pairs vs USD in a single call
const symbols = ['EUR', 'JPY', 'GBP', 'CHF', 'AUD', 'CAD', 'NZD'];
const response = await fetch(
`https://api.finexly.com/v1/latest?base=USD&symbols=${symbols.join(',')}`,
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const data = await response.json();
console.log(data.rates);
// { EUR: 0.9217, JPY: 154.32, GBP: 0.7891, CHF: 0.8843, ... }Заметьте, что мы запросили base=USD и получили курсы для каждого символа в единицах USD. Чтобы получить общепринятое направление пары (например EUR/USD, а не USD/EUR), может потребоваться инверсия. Этот паттерн рассмотрим в разделе кода ниже.
Второстепенные (кросс-) пары
Второстепенные пары, также называемые кроссами или кросс-валютными парами — это пары двух основных валют, не включающие доллар США. Название «кросс» происходит от того, что исторически такие пары приходилось рассчитывать «скрещиванием» двух USD-пар — например, выводя EUR/GBP из EUR/USD и GBP/USD. Сегодня большинство API и брокеров котируют их напрямую, но понимание базовой математики по-прежнему полезно.
Распространённые второстепенные пары:
EUR/GBP— Евро / Британский фунтEUR/JPY— Евро / Японская иенаEUR/CHF— Евро / Швейцарский франкGBP/JPY— Британский фунт / Японская иенаAUD/JPY— Австралийский доллар / Японская иенаCHF/JPY— Швейцарский франк / Японская иенаEUR/AUD— Евро / Австралийский долларGBP/CAD— Британский фунт / Канадский доллар
Кроссы по-прежнему обладают сильной ликвидностью — особенно EUR- и JPY-кроссы — но спреды у них обычно шире, чем у семи основных, а внутридневная волатильность чаще выше. Например, GBP/JPY известен среди трейдеров своими резкими движениями и иногда зовётся «дракон».
Для разработчиков практический вывод: не предполагайте экзотический уровень наценки или экзотическую частоту обновлений у любой не-USD-пары. Кроссы находятся посередине: ликвидности достаточно практически для любого B2C- или B2B-продукта, но не такие узкие спреды, как у EUR/USD.
Если ваш провайдер не котирует конкретный кросс напрямую, вы всегда можете вывести его из двух USD-«ног»:
# Derive EUR/GBP from EUR/USD and GBP/USD
eur_usd = 1.0850 # 1 EUR = 1.0850 USD
gbp_usd = 1.2680 # 1 GBP = 1.2680 USD
# 1 EUR = (eur_usd / gbp_usd) GBP
eur_gbp = eur_usd / gbp_usd
print(f"EUR/GBP = {eur_gbp:.4f}") # EUR/GBP = 0.8557Именно это большинство движков курсов делает за кулисами. Finexly возвращает кроссы напрямую через эндпоинт конвертера валют, но эта математика полезна в голове: она позволяет проверить любой курс и изящно отступить, если конкретная пара отсутствует в фиде.
Экзотические валютные пары
Экзотические пары объединяют основную валюту (обычно USD или EUR) с валютой меньшей, развивающейся или менее ликвидной экономики. Примеры:
USD/TRY— Доллар США / Турецкая лираUSD/MXN— Доллар США / Мексиканское песоUSD/ZAR— Доллар США / Южноафриканский рэндUSD/BRL— Доллар США / Бразильский реалUSD/INR— Доллар США / Индийская рупияUSD/THB— Доллар США / Тайский батEUR/PLN— Евро / Польский злотыйEUR/HUF— Евро / Венгерский форинтUSD/SGD— Доллар США / Сингапурский долларUSD/HKD— Доллар США / Гонконгский доллар
Граница между «второстепенными» и «экзотическими» размыта — USD/SGD и USD/HKD иногда классифицируют как второстепенные из-за высокого уровня развития их экономик, а USD/CNH (офшорный юань) иногда относят к основным из-за объёма торговли. Категория важна меньше, чем характеристики, влияющие на ваш код:
- Более широкие спреды. Разница бид-аск может быть в 5–20 раз шире, чем на основных.
- Низкая ликвидность вне рабочих часов. Многие экзотические торгуются тонко вне часов локального рынка, поэтому курсы выходного дня или ночные могут быть устаревшими или прыгать.
- Высокая чувствительность к новостям. Экзотические валюты резко реагируют на местные политические новости, решения центральных банков и объявления о контроле капитала. Подробнее в нашем разборе как геополитические события влияют на валютные курсы.
- Более частые гэпы курсов. Пара вроде
USD/TRYможет прыгнуть на несколько процентов за выходные или после одного решения по ставке. Если ваша логика выставления счетов или ценообразования это не учитывает, вы рискуете показывать пользователю устаревший курс целый час после крупного движения. - Привязанные или управляемые валюты. Некоторые «экзотические» пары почти не двигаются, потому что центральный банк интервенирует —
USD/HKDклассический пример, удерживаемый в узком коридоре. Графики будут выглядеть почти плоскими — это правильно, а не баг ваших данных.
Если ваш продукт обслуживает развивающиеся рынки, не относитесь к экзотическим как к сноске — именно там часто живёт самая большая боль ценообразования. У нас есть отдельное руководство как справляться с волатильностью валют в 2026, углубляющееся в операционные паттерны.
Прямые, обратные и инверсные котировки
Помимо классификации основные/второстепенные/экзотические, каждому разработчику нужно знать ещё одно понятие: разницу между прямыми и обратными котировками.
Прямая котировка выражает иностранную валюту в единицах местной (домашней) валюты. С точки зрения США USD/EUR = 0,92 — прямая котировка — она говорит американскому пользователю, что один доллар покупает 0,92 евро. Обратная котировка переворачивает это: EUR/USD = 1,0850 — это прямая котировка с европейской точки зрения и обратная с американской.
Общепринятые котировки FX-рынка следуют историческим правилам «ранжирования», а не перспективе пользователя:
EURвсегда базовая валюта при сочетании с любой другой.GBPбазовая, кроме случая противEUR.AUDиNZD— базовые против большинства, кромеEURиGBP.USD— базовый против большинства, кроме четырёх выше.JPYпочти всегда котируемая валюта.
Поэтому EUR/USD, GBP/USD, AUD/USD, USD/JPY, USD/CHF — общепринятые направления, а не USD/EUR. Если ваш провайдер возвращает USD/EUR, это знак, что он отдаёт все курсы с USD в качестве базы, и ваша задача — перевернуть пару при показе трейдерам или финансовым профессионалам, ожидающим общепринятого направления.
Инвертирование — простая математика, но её легко ошибиться:
// Convert USD-based rate to conventional pair direction
function toConventionalQuote(base: string, quote: string, rate: number) {
const usdBaseFirst = ['EUR', 'GBP', 'AUD', 'NZD'];
// If the quote currency is "stronger" by convention, flip
if (usdBaseFirst.includes(quote)) {
return { pair: `${quote}/${base}`, rate: 1 / rate };
}
return { pair: `${base}/${quote}`, rate };
}
toConventionalQuote('USD', 'EUR', 0.9217);
// → { pair: 'EUR/USD', rate: 1.0850 }Если вы показываете цены только конечным пользователям, которым безразличны рыночные соглашения, можно полностью пропустить этот шаг и котировать всё от своей домашней валюты. Но если ваши пользователи — профессионалы (трейдеры, казначеи, бухгалтеры), правильное направление — знак доверия.
Как обрабатывать валютные пары в коде
Здесь живёт большинство багов. Ниже паттерны, которые мы рекомендуем, отжатые из тысяч интеграций API.
1. Всегда используйте коды ISO 4217 внутри
Никогда не храните идентификаторы валют как символы ($, €, ¥) или названия («доллар»). Храните их как трёхбуквенные коды ISO 4217 — USD, EUR, JPY. Символы неоднозначны ($ используется более чем 20 валютами), а названия локализованы. Коды ISO однозначны и языково-нейтральны.
2. Нормализуйте строки пар на границе
Вы увидите пары в виде EURUSD, EUR/USD, EUR-USD, EUR_USD и eur/usd. Выберите одно внутреннее представление и нормализуйте на границе системы:
function normalizePair(input) {
const cleaned = input.toUpperCase().replace(/[^A-Z]/g, '');
if (cleaned.length !== 6) {
throw new Error(`Invalid pair: ${input}`);
}
return {
base: cleaned.slice(0, 3),
quote: cleaned.slice(3, 6),
canonical: `${cleaned.slice(0, 3)}/${cleaned.slice(3, 6)}`,
};
}
normalizePair('eur-usd');
// → { base: 'EUR', quote: 'USD', canonical: 'EUR/USD' }Внутри предпочитайте структурированную форму ({ base, quote }), а не строку. Строки нужны для логов и API; структурированные данные — для кода.
3. Конвертируйте между любыми двумя валютами через пивот
Если кэшируете курсы с одной базой (USD — общепринятая), любую пару можно посчитать на лету:
def convert(amount, source, target, rates_in_usd):
"""
rates_in_usd: dict like {'EUR': 0.9217, 'GBP': 0.7891, ...}
Each value is "1 USD = X units of currency"
"""
if source == target:
return amount
if source == 'USD':
return amount * rates_in_usd[target]
if target == 'USD':
return amount / rates_in_usd[source]
# Pivot through USD
amount_in_usd = amount / rates_in_usd[source]
return amount_in_usd * rates_in_usd[target]
# Convert 100 EUR to JPY using USD-based rates
rates = {'EUR': 0.9217, 'JPY': 154.32}
print(convert(100, 'EUR', 'JPY', rates)) # 16,743.31Этот паттерн позволяет поддерживать 170+ валют с одним горячим кэшем курсов «USD против всего». Эндпоинт /v1/latest?base=USD от Finexly возвращает именно такую форму.
4. Корректно обрабатывайте десятичную точность
Валютные пары используют разные общепринятые уровни точности: большинство основных котируются до 4 или 5 знаков после запятой (1.08503), а пары с JPY — до 2 или 3 (154.32). У валют вроде вьетнамского донга вообще нет копеек. Всегда храните курсы в типах Decimal / BigDecimal, не во float, при расчёте сумм, влияющих на баланс пользователя. Конкретные подводные камни описаны в нашем руководстве Currency API на Python.
5. Кэшируйте умно, а не грубо
Основные пары почти не двигаются от секунды к секунде в спокойные моменты — их можно кэшировать на 30–60 секунд без последствий. Экзотические могут требовать более коротких TTL вокруг плановых новостей. Наше руководство по кэшированию и обработке ошибок описывает многоуровневую стратегию кэша, работающую для обоих случаев.
Распространённые ошибки
Короткий список того, что обжигало реальные команды:
- Хранение курса без направления пары. «1,0850» ничего не значит без знания, это
EUR/USDилиUSD/EUR. - Смешение перспектив пользователя и рынка в одном UI. Выберите одну и чётко её обозначьте.
- Восприятие выходных курсов как живых. FX-рынки закрыты с 17:00 EST пятницы до 17:00 EST воскресенья. Курс, который вы отдаёте субботним утром — это закрытие пятницы. Для большинства приложений нормально, для исполнения опасно. См. часы работы Forex.
- Хардкод списка «поддерживаемых пар». Используйте эндпоинт
symbolsAPI как источник истины. Новые валюты появляются (и редко исчезают) со временем. - Слишком раннее округление. Округляйте при выводе, а не в расчётах. Курс среднего рынка с четырьмя знаками после запятой, умноженный на маленькую сумму, может потерять значимую точность, если округлять в середине пайплайна.
Часто задаваемые вопросы
Сколько всего валютных пар? При примерно 180 активно торгующихся национальных валютах теоретическое число уникальных пар ~16 000 (180 × 179 / 2). На практике лишь несколько сотен пар торгуются с осмысленной ликвидностью, и большинство API — включая Finexly — открывают 170+ валют, что даёт ~14 000 выводимых пар. Большинству продуктов достаточно поддерживать 20–50 в UI.
Какая пара самая торгуемая в мире?
EUR/USD — самая торгуемая, на неё приходится около 22–24% дневного объёма Forex. Затем USD/JPY и GBP/USD.
USD/EUR и EUR/USD — это одно и то же?
Нет. Числа — математически обратные (USD/EUR = 1 / EUR/USD), но это разные котировки. Общепринятая запись — EUR/USD. Если показать USD/EUR финансовому профессионалу, он подумает, что что-то не так.
Почему экзотические пары более рискованные? Экзотические пары опираются на менее ликвидные рынки, что означает более широкие спреды, более крупные гэпы после новостей, большую чувствительность к локальным политическим событиям и иногда контроль капитала или интервенции центрального банка. Это не делает их непригодными — просто ваш код не должен предполагать «маленький спред, гладкий поток тиков», как для основных.
Нужен ли отдельный тариф API для экзотических пар? В Finexly не нужен. Все 170+ валют — основные, второстепенные и экзотические — доступны на любом тарифе, включая бесплатный. Тарифы различаются объёмом вызовов, частотой обновления и глубиной истории, но не покрытием пар. Подробнее на странице тарифы.
Как часто обновлять валютные курсы? Для большинства сценариев (отображение в e-commerce, выставление счетов, отчётность) хватает каждые 5–15 минут. Для активной торговли или хеджирования — каждые несколько секунд или подписка на фид. Для бухгалтерского закрытия периода — один снимок на конец дня.
Начните с живых данных по валютным парам
Валютные пары — язык FX. Как только у вас есть чистая ментальная модель основные / второстепенные / экзотические и аккуратный набор хелперов нормализации в коде, любая другая FX-фича — конвертеры, мульти-валютный чекаут, биллинг SaaS, отчётность — становится сильно проще.
Готовы подключить живые курсы к проекту? Зарегистрируйтесь бесплатно и получите ключ Finexly API менее чем за минуту, без кредитной карты. Вы получите 1 000 запросов в месяц бесплатно, доступ ко всем 170+ валютам и те же средние рыночные курсы, что и у профессиональных финтех-продуктов. Когда переросте бесплатный тариф, платные планы начинаются с цены, удобной для инди-проектов, и масштабируются до корпоративных объёмов.
Хотите сначала сравнить варианты — посмотрите наш разбор лучшего API-конвертера валют для 2026.
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →