블로그로 돌아가기

외환에서 Pip이란? 개발자를 위한 Pip, Pipette 및 FX 수학 가이드 (2026)

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

외환에서 Pip이란? 개발자를 위한 Pip, Pipette 및 FX 수학 가이드 (2026)

트레이딩 봇, 포지션 사이즈 계산기, 리스크 대시보드 또는 모든 FX 인지 제품을 만들고 있다면 곧바로 이 질문에 부딪힐 것입니다. 외환에서 pip이란 무엇이며 코드에서 그 가치를 어떻게 계산해야 하나? 이를 잘못하면 P&L이 틀어지고, 스톱로스가 잘못된 레벨에서 발동하며, 사용자는 인내심을 가지지 않을 것입니다.

이 가이드는 개발자의 관점에서 pip, pipette 및 완전한 pip 가치 공식을 설명합니다 — JavaScript, Python, PHP, cURL의 풀이된 예제와 복사 가능한 코드와 함께. 끝에 이르면, Finexly API 문서에서 실시간 환율을 가져오고 교과서에서 얼버무리는 모든 엣지 케이스를 처리하는 작동하는 pip 계산기를 갖게 됩니다.

Pip이란? 빠른 정의

Pip("percentage in point" 또는 "price interest point"의 줄임말)은 통화쌍의 가장 작은 표준화된 가격 증분입니다. 대부분의 쌍에서는 호가의 소수점 넷째 자리0.0001의 움직임입니다. 일본 엔으로 호가되는 쌍에서는 소수점 둘째 자리0.01의 움직임입니다.

구체적인 예시:

  • EUR/USD가 1.0850에서 1.0851로 이동 → 1 pip (EUR당 0.0001 USD 변화).
  • GBP/USD가 1.2640에서 1.2655로 이동 → 15 pip.
  • USD/JPY가 154.20에서 154.30으로 이동 → 10 pip (USD당 0.10 JPY 변화).
  • AUD/JPY가 99.45에서 99.40으로 이동 → −5 pip.

Pip은 "가격이 얼마나 움직였나?"를 표현하는 FX 시장의 보편적인 단위입니다 — 절대 가격 수준이 매우 다른 쌍 간에 대화를 정규화해주기 때문에 원시 소수점보다 훨씬 유용합니다.

Pip vs Pipette vs Point

현대의 브로커와 데이터 제공자는 표준 pip을 넘어 한 자리 더 작은 호가를 제공합니다. 이 추가 자릿수는 pipette, 분수 pip 또는 단순히 point라고 불립니다. 하나의 pipette는 pip의 10분의 1과 같습니다.

페어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이 pipette입니다 — 트레이딩 플랫폼에서는 보통 더 작거나 위첨자로 표시됩니다. 개발자로서 이 구분을 신중히 다루십시오. pipette를 포함하는 호가에 대해 문자열 산술로 가격 차이를 계산하면, 올바르게 스케일링하지 않는 한 pip 움직임을 10배 과소 보고하게 됩니다.

안전한 규칙: 항상 숫자 타입으로 정규화한 다음, 그 페어의 pip 크기 상수로 곱하거나 나눈다.

왜 통화쌍마다 Pip 크기가 다른가

JPY 페어의 두 자리 소수점 pip은 임의의 선택이 아닙니다. 일본 엔은 대부분의 준비 통화에 비해 단위 가치가 작습니다 — 2026년에 1 USD ≈ 154 JPY 정도 — 따라서 네 자리 소수점으로 호가하면 외형적으로 사소한 가격 움직임과 트레이딩 화면의 읽을 수 없는 사다리가 만들어집니다. 두 자리 소수점으로 잘라내면 가격 액션이 다른 주요 페어와 시각적으로 비례하게 유지됩니다.

같은 논리가 다른 "낮은 단위 가치" 호가 통화(한국 원, 헝가리 포린트 등)의 한 줌에도 적용됩니다 — 이들은 종종 0.01 또는 1의 pip 크기로 호가됩니다. 멀티 페어 시스템을 구축할 때 0.0001을 pip 크기 상수로 절대 하드코딩하지 마십시오. 항상 페어별로 조회하십시오.

대부분의 페어에서 작동하는 실용적인 감지 규칙:

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 통화 코드로 키가 지정된 완전한 pip 크기 테이블이 필요합니다 — 전체 목록은 ISO 4217 통화 코드 완전 개발자 가이드를 참조하십시오.

Pip 가치 공식

모든 P&L 계산의 핵심 질문: 기본 통화 N 단위의 포지션에 대해, 페어가 1 pip 움직일 때 내 계좌 잔고는 얼마나 변하는가?

일반 공식:

pip_value_in_quote_currency = pip_size × position_size
pip_value_in_account_currency = pip_value_in_quote_currency × (quote_to_account_rate)

계좌 통화가 거래 중인 페어와 어떻게 관련되는지에 따라 세 가지 경우가 있습니다.

케이스 1: 계좌 통화 = 호가 통화

가장 간단한 경우. USD 계좌에서 EUR/USD를 거래한다면, 각 pip은 추가 변환 없이 고정된 달러 금액의 가치를 갖습니다.

pip_value = pip_size × position_size

USD 계좌에서 EUR/USD 100,000 단위(한 표준 랏)의 경우:

0.0001 × 100,000 = pip당 10 USD

이것이 어디에서나 인용되는 교과서의 "표준 랏당 pip당 10달러"입니다 — 호가 통화가 계좌 통화와 일치할 때만 성립합니다.

케이스 2: 계좌 통화 = 기본 통화

USD 계좌에서 USD/CHF를 거래한다면, pip 움직임은 CHF로 표시되며 페어의 현재 ask 환율을 사용해 USD로 다시 변환해야 합니다.

pip_value_in_quote = pip_size × position_size
pip_value_in_account = pip_value_in_quote / current_rate

USD/CHF = 0.9050일 때, USD/CHF 100,000 단위의 경우:

0.0001 × 100,000 = 10 CHF
10 CHF / 0.9050 = pip당 11.05 USD

케이스 3: 크로스 페어 (어느 쪽도 계좌 통화가 아님)

가장 까다로운 경우. USD 계좌에서 EUR/JPY를 거래합니다. pip 움직임은 JPY이며, USD로 표현하려면 JPY와 USD 사이의 변환 환율이 필요합니다.

pip_value_in_quote = pip_size × position_size
pip_value_in_account = pip_value_in_quote × (account_per_quote_rate)

USD/JPY = 154.20일 때, EUR/JPY 100,000 단위의 경우:

0.01 × 100,000 = 1,000 JPY
1,000 JPY / 154.20 = pip당 6.49 USD

EUR/JPY 환율이 아닌 USD/JPY 환율을 사용했음을 주목하십시오. JPY에서 USD로 변환하는 것이지 EUR에서 무언가로 변환하는 것이 아니기 때문입니다.

Finexly API로 Pip 계산기 만들기

위의 공식을 실제 라이브 환율 API에 연결해 시장이 움직여도 계산기가 정확하게 유지되도록 합시다. Finexly에 가입해 무료 API 키를 받으세요 — 카드 불필요, 월 1,000회 요청, 이런 계산기에 충분합니다. 전체 요청 레퍼런스는 Finexly API 문서에 있습니다.

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

자체 pip 계산에 연결하기 위해 원시 환율만 필요한 경우:

curl "https://finexly.com/api/latest?base=USD&symbols=JPY&api_key=YOUR_KEY"
# {"base":"USD","rates":{"JPY":154.20},"timestamp":1746...}

이 단일 환율로 위 공식을 사용해 JPY pip 움직임을 USD로 변환하기에 충분합니다.

개발자가 빠지는 일반적인 Pip 수학 함정

Pip은 단순해 보입니다. 버그는 미묘합니다. 주의해야 할 다섯 가지:

1. Pip 산술의 부동 소수점 드리프트. JavaScript에서 0.1 + 0.2 !== 0.3이며, 같은 종류의 문제가 많은 거래에 걸쳐 pip P&L을 합산할 때 물어뜯습니다. 프로덕션에 도달하는 모든 것 — 특히 금융 계산 — 에는 내부적으로 정수 pip 카운터를 사용하거나(비-JPY 페어는 가격에 10_000을, JPY 페어는 100을 곱함) decimal.js 또는 Python의 decimal.Decimal과 같은 십진수 라이브러리를 사용하십시오.

2. 0.0001을 pip 크기로 하드코딩. 사용자가 JPY 페어를 거래하는 순간 모든 JPY 페어가 깨집니다. 항상 페어별 테이블에서 pip 크기를 조회하십시오.

3. 가격 비교 시 pip과 pipette 혼동. 1.08502와 같은 5소수 EUR/USD 호가는 1.08501로부터 1.08502 pip의 움직임처럼 보이지만, 실제로는 1 pipette = 0.1 pip입니다. 부동 소수점으로 정규화하고 pip 크기로 나누십시오.

4. 케이스 3에서 계좌 통화 변환에 오래된 환율 사용. 열린 포지션의 pip 가치 계산은 포지션이 열렸을 때의 환율이 아닌 현재 환율을 사용해야 합니다. 환율을 캐시하는 경우 변환이 정확하게 유지되도록 TTL을 충분히 짧게 설정하십시오 — 프로덕션 검증된 패턴은 통화 API 캐싱 및 오류 처리 모범 사례를 참조하십시오.

5. Bid/ask 비대칭 망각. 브로커는 롱 청산에 bid를, 숏 청산에 ask를 사용해 P&L을 변환합니다. 추정만 필요한 최종 사용자 대상 계산기에는 미드 환율로 충분합니다. 실행 시스템의 경우 적절한 쪽을 사용하십시오.

Bid/ask 분할에 대한 더 깊은 시각은 스팟 환율 vs 포워드 환율 글을, 크로스 페어 변환은 크로스 환율 설명을 참조하십시오.

한눈에 보는 Pip 가치: 일반적인 페어

USD 표시 계좌에서 한 표준 랏(100,000 단위)을 거래할 때, 2026년 5월 지표 환율에서의 일반적인 pip 가치입니다. 이를 도그마가 아닌 정상성 점검으로 다루십시오 — 실제 계좌에 영향을 주는 모든 것은 Finexly 통화 변환기 또는 API에서 라이브 환율을 가져오십시오.

페어Pip 크기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 호가 페어는 표준 랏당 pip당 항상 정확히 10달러, 그리고 JPY 호가 페어는 그 절반 정도에서 맴돌며 USD/JPY와 함께 표류합니다.

자주 묻는 질문

외환에서 pip이란 간단히 말해 무엇입니까? Pip은 통화쌍 가격의 가장 작은 표준화된 움직임입니다 — 일반적으로 대부분의 페어에서 소수점 넷째 자리(0.0001), 엔 페어에서 소수점 둘째 자리(0.01)입니다. 가격 움직임을 측정하는 FX 시장의 보편적 단위입니다.

코드에서 pip 가치를 어떻게 계산합니까? Pip 크기를 포지션 크기로 곱해 호가 통화에서 pip 가치를 얻은 다음, 현재 환율을 사용해 계좌 통화로 변환하십시오. 세 가지 경우(호가 = 계좌, 기본 = 계좌, 크로스)는 위의 JavaScript, Python, PHP 예제에 표시되어 있습니다.

Pip과 pipette의 차이는 무엇입니까? Pipette는 pip의 10분의 1입니다 — 일부 브로커와 데이터 피드가 더 좁은 스프레드를 위해 추가하는 분수 자릿수. EUR/USD에서 pip이 0.0001이라면 pipette는 0.00001입니다.

왜 EUR/USD에서 1 pip이 약 10달러와 같습니까? 표준 랏이 100,000 단위이고 비-JPY 페어의 pip 크기가 0.0001이기 때문입니다. 100,000 × 0.0001 = 10 호가 통화 단위. 호가 통화가 USD일 때 그것은 직접 10달러입니다.

Pip 계산기를 만들기 위해 유료 API가 필요합니까? 아니요. Finexly의 무료 플랜은 월 1,000 요청을 제공하고 170+ 통화를 커버합니다 — 개인 pip 계산기나 저트래픽 사이드 프로젝트에 충분합니다. 더 큰 볼륨은 가격 플랜을 참조하십시오.

암호화폐 페어에서 pip 크기가 다릅니까? 암호화폐 페어는 표준 FX pip 관습을 따르지 않습니다. BTC/USD는 거래소에 따라 종종 2 또는 4 소수로 호가되며 "1 pip"은 거래소 정의입니다. 순수 암호 P&L의 경우 pip 대신 절대 가격 차이로 작업하십시오.

만들 준비가 되셨나요?

이제 공식, 세 가지 작동하는 코드 샘플, 그리고 대부분의 사람이 빠지는 버그 목록이 있습니다. 마지막 조각은 계산 도중에 표류하지 않을 실시간 환율입니다.

무료 Finexly API 키 받기 — 신용카드 필요 없음. 월 1,000 무료 요청, 170+ 통화, 50ms 미만 지연으로 시작하고 필요할 때만 업그레이드하십시오. 당신의 pip 계산기는 그 뒤의 수학만큼 정확한 환율을 받을 자격이 있습니다.

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 →

이 기사 공유하기