Назад к блогу

Что такое пункт (pip) в Forex? Руководство разработчика по пипсам, пипеттам и математике FX (2026)

V
Vlado Grigirov
May 10, 2026
Currency API Exchange Rates Forex Education Developer Guide Pips Finexly

Что такое пункт (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.08511 пипс (изменение 0.0001 USD за EUR).
  • GBP/USD движется с 1.2640 до 1.265515 пипсов.
  • USD/JPY движется со 154.20 до 154.3010 пипсов (изменение 0.10 JPY за USD).
  • AUD/JPY движется с 99.45 до 99.40−5 пипсов.

Пипс — универсальная единица FX-рынка для «насколько сдвинулась цена?» — гораздо полезнее сырых десятичных значений, потому что нормализует разговор между парами с очень разными абсолютными уровнями цен.

Pips vs Pipettes vs Points

Современные брокеры и поставщики данных котируют курсы на один знак дальше стандартного пипса. Эта дополнительная цифра называется пипетта, дробный пипс или просто point. Одна пипетта равна одной десятой пипса.

ПараРазмер pipРазмер pipetteПример котировки
EUR/USD0.00010.000011.08507
GBP/USD0.00010.000011.26482
USD/JPY0.010.001154.215
EUR/JPY0.010.001167.482
Когда брокер показывает EUR/USD как 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/USD0.000110.00 USD
GBP/USD0.000110.00 USD
USD/CHF0.0001~11.05 USD
USD/JPY0.01~6.49 USD
EUR/JPY0.01~6.49 USD
AUD/USD0.000110.00 USD
EUR/GBP0.0001~12.61 USD
Два паттерна стоит запомнить как разработчику, работающему с FX: пары, котируемые в USD, всегда стоят ровно 10 долларов за пипс на стандартный лот, а пары, котируемые в JPY, держатся около половины этого, дрейфуя с USD/JPY.

Часто задаваемые вопросы

Что такое 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 мс, и обновляйтесь только когда понадобится. Ваш калькулятор пипсов заслуживает курсов, столь же точных, как математика за ним.

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 →