Что такое пункт (pip) в Forex? Руководство разработчика по пипсам, пипеттам и математике FX (2026)
Если вы создаёте торгового бота, калькулятор размера позиции, панель управления рисками или любой FX-ориентированный продукт, то быстро столкнётесь с вопросом: что такое pip в Forex и как рассчитать его стоимость в коде? Ошибиться здесь — значит получить искажённую P&L, сработавшие на неверных уровнях стоп-лоссы, и пользователи терпеть это не будут.
Это руководство объясняет пипсы, пипетты и полную формулу стоимости пипса с точки зрения разработчика — с проработанными примерами и готовым к копированию кодом на JavaScript, Python, PHP и cURL. К концу у вас будет рабочий калькулятор пипсов, который тянет курсы в реальном времени из документации API Finexly и обрабатывает каждый граничный случай, который учебники замалчивают.
Что такое pip? Быстрое определение
Pip (сокращение от "percentage in point" или "price interest point") — это наименьшее стандартизированное приращение цены валютной пары. Для большинства пар это четвёртый знак после запятой котировки — движение в 0.0001. Для пар, котируемых в японских иенах, это второй знак после запятой — движение в 0.01.
Конкретные примеры:
- EUR/USD движется с
1.0850до1.0851→ 1 пипс (изменение 0.0001 USD за EUR). - GBP/USD движется с
1.2640до1.2655→ 15 пипсов. - USD/JPY движется со
154.20до154.30→ 10 пипсов (изменение 0.10 JPY за USD). - AUD/JPY движется с
99.45до99.40→ −5 пипсов.
Пипс — универсальная единица FX-рынка для «насколько сдвинулась цена?» — гораздо полезнее сырых десятичных значений, потому что нормализует разговор между парами с очень разными абсолютными уровнями цен.
Pips vs Pipettes vs Points
Современные брокеры и поставщики данных котируют курсы на один знак дальше стандартного пипса. Эта дополнительная цифра называется пипетта, дробный пипс или просто point. Одна пипетта равна одной десятой пипса.
| Пара | Размер pip | Размер pipette | Пример котировки |
|---|---|---|---|
| EUR/USD | 0.0001 | 0.00001 | 1.08507 |
| GBP/USD | 0.0001 | 0.00001 | 1.26482 |
| USD/JPY | 0.01 | 0.001 | 154.215 |
| EUR/JPY | 0.01 | 0.001 | 167.482 |
1.08507, конечная 7 — это пипетта, обычно отрисовывается мельче или верхним индексом на торговой платформе. Как разработчик, обращайтесь с этим различием аккуратно: если вы вычисляете разницу цен строковой арифметикой над котировками с пипеттами, вы будете занижать движения в пипсах в 10 раз, если не масштабируете правильно.Безопасное правило: всегда нормализуйте к числовому типу, затем умножайте или делите на константу размера пипса для этой пары.
Почему размеры пипса различаются между парами
Двухзначный пипс для пар JPY — не произвольный выбор. У японской иены небольшая удельная стоимость относительно большинства резервных валют — около 1 USD ≈ 154 JPY в 2026 году — поэтому котировка до четырёх знаков создавала бы косметически ничтожные ценовые движения и нечитаемые лестницы на торговых экранах. Усечение до двух знаков сохраняет ценовое действие визуально пропорциональным другим основным парам.
Та же логика применяется к горстке других «низкоудельных» котируемых валют (корейский вон, венгерский форинт и т. д.) — их часто котируют с размером пипса 0.01 или 1. Когда вы строите многопарную систему, никогда не зашивайте 0.0001 как константу размера пипса. Всегда смотрите по паре.
Прагматичное правило обнаружения, которое работает для большинства пар:
function getPipSize(pair) {
// pair example: "EURUSD" or "EUR/USD"
const quote = pair.replace("/", "").slice(3, 6).toUpperCase();
const twoDecimalQuotes = new Set(["JPY", "HUF", "KRW"]);
return twoDecimalQuotes.has(quote) ? 0.01 : 0.0001;
}
console.log(getPipSize("EURUSD")); // 0.0001
console.log(getPipSize("USD/JPY")); // 0.01
console.log(getPipSize("EURHUF")); // 0.01Для продакшен-системы вам понадобится полная таблица размеров пипсов, индексируемая по кодам валют ISO 4217 — см. наше полное руководство разработчика по кодам валют ISO 4217 для полного списка.
Формула стоимости пипса
Ключевой вопрос для любого расчёта P&L: для позиции в N единицах базовой валюты — насколько изменится мой баланс счёта, когда пара двигается на один пипс?
Общая формула:
pip_value_in_quote_currency = pip_size × position_size
pip_value_in_account_currency = pip_value_in_quote_currency × (quote_to_account_rate)Три случая в зависимости от соотношения валюты счёта и торгуемой пары.
Случай 1: Валюта счёта = Котируемая валюта
Самый простой случай. Если вы торгуете EUR/USD на USD-счёте, каждый пипс стоит фиксированную сумму в долларах без дополнительной конвертации.
pip_value = pip_size × position_sizeДля 100 000 единиц (один стандартный лот) EUR/USD на USD-счёте:
0.0001 × 100,000 = 10 USD за пипсЭто и есть учебное «10 долларов за пипс на стандартный лот», которое цитируется везде — оно работает только когда котируемая валюта совпадает с валютой счёта.
Случай 2: Валюта счёта = Базовая валюта
Если вы торгуете USD/CHF на USD-счёте, движение пипса деноминировано в CHF и должно быть конвертировано обратно в USD по текущему курсу ask пары.
pip_value_in_quote = pip_size × position_size
pip_value_in_account = pip_value_in_quote / current_rateДля 100 000 единиц USD/CHF, когда USD/CHF = 0.9050:
0.0001 × 100,000 = 10 CHF
10 CHF / 0.9050 = 11.05 USD за пипсСлучай 3: Кросс-пара (ни одна сторона не является валютой счёта)
Самый запутанный случай. Вы торгуете EUR/JPY на USD-счёте. Движение пипса в JPY, и чтобы выразить его в USD, нужен курс конвертации между JPY и USD.
pip_value_in_quote = pip_size × position_size
pip_value_in_account = pip_value_in_quote × (account_per_quote_rate)Для 100 000 единиц EUR/JPY, когда USD/JPY = 154.20:
0.01 × 100,000 = 1,000 JPY
1,000 JPY / 154.20 = 6.49 USD за пипсОбратите внимание, мы использовали курс USD/JPY, а не EUR/JPY, потому что мы конвертируем из JPY в USD, а не из EUR во что-либо.
Создание калькулятора пипсов с API Finexly
Подключим формулу выше к настоящему живому API курсов валют, чтобы калькулятор оставался точным при движении рынка. Зарегистрируйтесь на Finexly для бесплатного API-ключа — 1000 запросов/месяц без карты, более чем достаточно для такого калькулятора. Полная справка по запросам — в документации API Finexly.
JavaScript (Node.js)
const FINEXLY_API_KEY = process.env.FINEXLY_API_KEY;
const BASE_URL = "https://finexly.com/api";
// Two-decimal-pip currencies. Extend as needed.
const TWO_DECIMAL_PIP_QUOTES = new Set(["JPY", "HUF", "KRW"]);
function pipSize(quoteCcy) {
return TWO_DECIMAL_PIP_QUOTES.has(quoteCcy) ? 0.01 : 0.0001;
}
async function getRate(base, quote) {
const res = await fetch(
`${BASE_URL}/latest?base=${base}&symbols=${quote}&api_key=${FINEXLY_API_KEY}`
);
const json = await res.json();
return json.rates[quote];
}
async function calcPipValue({ pair, positionSize, accountCcy }) {
const base = pair.slice(0, 3).toUpperCase();
const quote = pair.slice(3, 6).toUpperCase();
const pip = pipSize(quote);
const pipValueInQuote = pip * positionSize;
if (accountCcy === quote) {
return pipValueInQuote;
}
if (accountCcy === base) {
const rate = await getRate(base, quote);
return pipValueInQuote / rate;
}
// Cross: convert quote -> account via account/quote rate
const rate = await getRate(accountCcy, quote);
return pipValueInQuote / rate;
}
// Example: 100,000 units of EUR/JPY on a USD account
calcPipValue({
pair: "EURJPY",
positionSize: 100_000,
accountCcy: "USD",
}).then((v) => console.log(`Pip value: ${v.toFixed(2)} USD`));Python
import os
import requests
FINEXLY_API_KEY = os.environ["FINEXLY_API_KEY"]
BASE_URL = "https://finexly.com/api"
TWO_DECIMAL_PIP_QUOTES = {"JPY", "HUF", "KRW"}
def pip_size(quote_ccy: str) -> float:
return 0.01 if quote_ccy in TWO_DECIMAL_PIP_QUOTES else 0.0001
def get_rate(base: str, quote: str) -> float:
r = requests.get(
f"{BASE_URL}/latest",
params={"base": base, "symbols": quote, "api_key": FINEXLY_API_KEY},
timeout=10,
)
r.raise_for_status()
return r.json()["rates"][quote]
def calc_pip_value(pair: str, position_size: float, account_ccy: str) -> float:
base, quote = pair[:3].upper(), pair[3:6].upper()
pip = pip_size(quote)
pip_in_quote = pip * position_size
if account_ccy == quote:
return pip_in_quote
if account_ccy == base:
return pip_in_quote / get_rate(base, quote)
# Cross
return pip_in_quote / get_rate(account_ccy, quote)
if __name__ == "__main__":
value = calc_pip_value("EURJPY", 100_000, "USD")
print(f"Pip value: {value:.2f} USD")PHP
<?php
$apiKey = getenv('FINEXLY_API_KEY');
$baseUrl = 'https://finexly.com/api';
$twoDecimalPipQuotes = ['JPY', 'HUF', 'KRW'];
function pipSize(string $quoteCcy): float {
global $twoDecimalPipQuotes;
return in_array($quoteCcy, $twoDecimalPipQuotes, true) ? 0.01 : 0.0001;
}
function getRate(string $base, string $quote): float {
global $apiKey, $baseUrl;
$url = "$baseUrl/latest?base=$base&symbols=$quote&api_key=$apiKey";
$body = file_get_contents($url);
$data = json_decode($body, true);
return $data['rates'][$quote];
}
function calcPipValue(string $pair, float $positionSize, string $accountCcy): float {
$base = strtoupper(substr($pair, 0, 3));
$quote = strtoupper(substr($pair, 3, 3));
$pipInQuote = pipSize($quote) * $positionSize;
if ($accountCcy === $quote) return $pipInQuote;
if ($accountCcy === $base) return $pipInQuote / getRate($base, $quote);
return $pipInQuote / getRate($accountCcy, $quote);
}
echo number_format(calcPipValue('EURJPY', 100000, 'USD'), 2) . " USD\n";cURL
Если вам нужен только сырой курс, чтобы подключить к собственному расчёту пипса:
curl "https://finexly.com/api/latest?base=USD&symbols=JPY&api_key=YOUR_KEY"
# {"base":"USD","rates":{"JPY":154.20},"timestamp":1746...}Этого одного курса достаточно, чтобы преобразовать движение пипса JPY в USD по формуле выше.
Распространённые ловушки в математике пипсов
Пипсы выглядят просто. Баги тонкие. Пять моментов для внимания:
1. Дрейф плавающей точки в арифметике пипсов. 0.1 + 0.2 !== 0.3 в JavaScript, и то же семейство проблем кусает вас при суммировании пипсовой P&L по многим сделкам. Для всего, что доходит до продакшена — особенно финансовых расчётов — используйте внутри целочисленные счётчики пипсов (умножайте цены на 10_000 для не-JPY пар и на 100 для JPY-пар) или десятичную библиотеку вроде decimal.js или decimal.Decimal в Python.
2. Захардкодить 0.0001 как размер пипса. Это ломает каждую JPY-пару, как только пользователь начнёт ею торговать. Всегда смотрите размер пипса в таблице по парам.
3. Путать пипсы с пипеттами при сравнении цен. Котировка EUR/USD с 5 знаками вроде 1.08502 выглядит как 1.08502 пипса движения с 1.08501, но это всего лишь 1 пипетта = 0.1 пипса. Нормализуйте к плавающей точке и делите на размер пипса.
4. Использовать устаревшие курсы для конвертации в валюту счёта в Случае 3. Расчёт стоимости пипса для открытой позиции должен использовать текущий курс, а не курс на момент открытия позиции. Если кэшируете курсы, выставляйте TTL достаточно короткий, чтобы конверсия оставалась точной — см. лучшие практики кэширования и обработки ошибок currency-API для проверенных в продакшене паттернов.
5. Забывать асимметрию bid/ask. Брокеры конвертируют P&L по bid для закрытия лонгов и по ask для закрытия шортов. Для калькулятора, ориентированного на конечного пользователя, которому нужна только оценка, средний курс подойдёт. Для системы исполнения используйте соответствующую сторону.
Для более глубокого взгляда на разделение bid/ask см. наш материал спот-курс vs форвард-курс, а для конвертаций кросс-пар — кросс-курсы валют объяснены.
Стоимость пипса с одного взгляда: распространённые пары
Для счёта, деноминированного в USD, с торговлей одним стандартным лотом (100 000 единиц), вот типичные значения пипса по индикативным курсам мая 2026 года. Воспринимайте это как проверку на здравый смысл, не как догму — тяните живые курсы из конвертера валют Finexly или API для всего, что касается реального счёта.
| Пара | Размер pip | Стоимость пипса (1 лот, USD-счёт) |
|---|---|---|
| EUR/USD | 0.0001 | 10.00 USD |
| GBP/USD | 0.0001 | 10.00 USD |
| USD/CHF | 0.0001 | ~11.05 USD |
| USD/JPY | 0.01 | ~6.49 USD |
| EUR/JPY | 0.01 | ~6.49 USD |
| AUD/USD | 0.0001 | 10.00 USD |
| EUR/GBP | 0.0001 | ~12.61 USD |
Часто задаваемые вопросы
Что такое pip в Forex простыми словами?
Pip — это наименьшее стандартизированное движение цены валютной пары — обычно четвёртый знак после запятой для большинства пар (0.0001) и второй знак для иеновых пар (0.01). Это универсальная единица FX-рынка для измерения движения цены.
Как рассчитать стоимость пипса в коде? Умножьте размер пипса на размер позиции, чтобы получить стоимость пипса в котируемой валюте, затем конвертируйте в валюту счёта по текущему курсу. Три случая (котируемая = счёт, базовая = счёт, кросс) показаны в примерах JavaScript, Python и PHP выше.
В чём разница между пипсом и пипеттой?
Пипетта — это десятая часть пипса, дробная цифра, которую некоторые брокеры и фиды добавляют для более узких спредов. Если pip на EUR/USD равен 0.0001, то пипетта — 0.00001.
Почему один пипс равен примерно 10 долларам на EUR/USD?
Потому что стандартный лот — это 100 000 единиц, а размер пипса для не-JPY пар — 0.0001. 100,000 × 0.0001 = 10 единиц котируемой валюты. Когда котируемая валюта USD, это напрямую 10 долларов.
Нужен ли платный API для калькулятора пипсов? Нет. Бесплатный план Finexly даёт 1000 запросов в месяц и покрывает 170+ валют — достаточно для личного калькулятора пипсов или низкотрафикового сайд-проекта. Для большего объёма см. наши тарифные планы.
Различаются ли размеры пипсов для крипто-пар? Крипто-пары не следуют стандартной FX-конвенции пипса. BTC/USD часто котируется с 2 или 4 знаками в зависимости от площадки, а «1 пипс» определяется площадкой. Для чистой крипто-P&L работайте в абсолютных разностях цен, а не в пипсах.
Готовы строить?
Теперь у вас есть формула, три рабочих образца кода и список багов, которые кусают большинство людей. Последний кусочек — курсы в реальном времени, которые не уплывут от вас в середине расчёта.
Получите бесплатный API-ключ Finexly — кредитная карта не нужна. Начните с 1000 бесплатных запросов в месяц, 170+ валют, латентности менее 50 мс, и обновляйтесь только когда понадобится. Ваш калькулятор пипсов заслуживает курсов, столь же точных, как математика за ним.
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 →