العودة إلى المدونة

ما هي النقطة (Pip) في الفوركس؟ دليل المطور للنقاط والـPipettes ورياضيات FX (2026)

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

ما هي النقطة (Pip) في الفوركس؟ دليل المطور للنقاط والـPipettes ورياضيات FX (2026)

إذا كنت تبني روبوت تداول، أو حاسبة حجم مركز، أو لوحة مخاطر، أو أي منتج واعٍ بالعملات الأجنبية، فستصطدم سريعًا بالسؤال: ما هي النقطة (pip) في الفوركس وكيف أحسب قيمتها في الكود؟ الخطأ في ذلك يعني أرباح وخسائر غير دقيقة، وتفعيل وقف الخسارة عند مستويات خاطئة، ولن يكون مستخدموك صبورين.

يشرح هذا الدليل النقاط والـpipettes والصيغة الكاملة لقيمة النقطة من منظور المطور — مع أمثلة محلولة وأكواد قابلة للنسخ بـJavaScript وPython وPHP وcURL. في النهاية، ستحصل على حاسبة نقاط عاملة تسحب الأسعار في الوقت الفعلي من وثائق Finexly API وتتعامل مع كل حالة حافة تتجاهلها الكتب المدرسية.

ما هي النقطة؟ التعريف السريع

النقطة (pip) (اختصارًا لـ "percentage in point" أو "price interest point") هي أصغر زيادة سعرية معيارية لزوج عملات. لمعظم الأزواج، هذه هي المنزلة العشرية الرابعة من السعر — حركة قدرها 0.0001. للأزواج المسعَّرة بالين الياباني، هي المنزلة العشرية الثانية — حركة قدرها 0.01.

أمثلة محددة:

  • يتحرك EUR/USD من 1.0850 إلى 1.0851نقطة واحدة (تغيير 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 نقاط.

النقطة هي الوحدة العالمية لسوق الفوركس لـ"كم تحرك السعر؟" — أكثر فائدة بكثير من الكسور الخام لأنها تطبع المحادثة عبر أزواج بمستويات أسعار مطلقة مختلفة جدًا.

النقاط مقابل Pipettes مقابل Points

تسعِّر الوسطاء وموفرو البيانات الحديثون الأسعار بمنزلة عشرية إضافية بعد النقطة المعيارية. هذا الرقم الإضافي يُسمى pipette أو نقطة كسرية أو ببساطة point. يساوي pipette واحد عُشر النقطة.

الزوجحجم 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 — تُعرض عادةً بحجم أصغر أو كأسٍ علوي على منصة التداول. كمطور، تعامل مع هذا التمييز بحذر: إذا حسبت فروق الأسعار باستخدام حساب نصي على أسعار تتضمن pipettes، فستُبلغ عن حركات النقاط بأقل بمعامل 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 للقائمة الكاملة.

صيغة قيمة النقطة

السؤال المركزي لأي حساب أرباح وخسائر: لمركز من 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 إلى أي شيء.

بناء حاسبة نقاط مع Finexly API

دعنا نربط الصيغة أعلاه بـ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

إذا كنت تحتاج فقط إلى السعر الخام لتوصيله بحساب النقطة الخاص بك:

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، ونفس عائلة المشاكل تعضّك عند جمع أرباح وخسائر النقاط عبر العديد من الصفقات. لأي شيء يصل للإنتاج — خاصة الحسابات المالية — استخدم عدّادات نقاط صحيحة داخليًا (اضرب الأسعار في 10_000 للأزواج غير JPY و100 لأزواج JPY) أو مكتبة عشرية مثل decimal.js أو decimal.Decimal في Python.

2. ترميز 0.0001 كحجم نقطة. هذا يكسر كل زوج JPY في اللحظة التي يتداول فيها مستخدم واحدًا. ابحث دائمًا عن حجم النقطة من جدول لكل زوج.

3. الخلط بين النقاط وpipettes عند مقارنة الأسعار. سعر EUR/USD بـ5 منازل عشرية مثل 1.08502 يبدو وكأنه حركة 1.08502 نقطة من 1.08501، لكنه فقط 1 pipette = 0.1 نقطة. طبِّع إلى الفاصلة العائمة واقسم على حجم النقطة.

4. استخدام أسعار قديمة لتحويل عملة الحساب في الحالة 3. يجب أن يستخدم حساب قيمة نقطة لمركز مفتوح السعر الحالي، لا السعر عند فتح المركز. إذا قمت بتخزين الأسعار مؤقتًا، فاضبط TTL قصيرًا بما يكفي لإبقاء التحويل دقيقًا — راجع أفضل ممارسات التخزين المؤقت ومعالجة الأخطاء لـAPIs العملات للأنماط المُختبرة في الإنتاج.

5. نسيان عدم تماثل bid/ask. يقوم الوسطاء بتحويل الأرباح والخسائر باستخدام bid لإغلاق المراكز الطويلة وask لإغلاق المراكز القصيرة. لحاسبة موجهة للمستخدم النهائي تحتاج فقط إلى تقدير، يكفي السعر الوسطي. لنظام تنفيذ، استخدم الجانب المناسب.

لنظرة أعمق على تقسيم bid/ask، راجع مقالنا السعر الفوري مقابل السعر الآجل، ولتحويلات الأزواج المتقاطعة أسعار الصرف المتقاطعة موضحة.

قيمة النقطة في لمحة: الأزواج الشائعة

لحساب مقوم بالـUSD يتداول لوتًا قياسيًا واحدًا (100,000 وحدة)، فيما يلي قيم النقاط النموذجية بأسعار إرشادية لمايو 2026. تعامل معها كاختبار تحقق، لا كعقيدة — اسحب الأسعار الحية من محول عملات 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 تساوي دائمًا تمامًا 10 دولارات لكل نقطة لكل لوت قياسي، والأزواج المسعَّرة بالـJPY تحوم حول نصف ذلك، وتنجرف مع USD/JPY.

الأسئلة المتكررة

ما هي النقطة في الفوركس بكلمات بسيطة؟ النقطة هي أصغر حركة معيارية في سعر زوج عملات — عادةً المنزلة العشرية الرابعة لمعظم الأزواج (0.0001) والمنزلة العشرية الثانية لأزواج الين (0.01). إنها الوحدة العالمية لسوق الفوركس لقياس حركة السعر.

كيف أحسب قيمة النقطة في الكود؟ اضرب حجم النقطة في حجم المركز للحصول على قيمة النقطة بعملة التسعير، ثم قم بالتحويل إلى عملة حسابك باستخدام سعر الصرف الحالي. الحالات الثلاث (التسعير = الحساب، الأساسية = الحساب، متقاطع) موضحة في أمثلة JavaScript وPython وPHP أعلاه.

ما الفرق بين النقطة وpipette؟ Pipette هو عُشر النقطة — الرقم الكسري الذي يضيفه بعض الوسطاء وموجزات البيانات لفروقات أضيق. إذا كانت النقطة في EUR/USD 0.0001، فإن pipette هو 0.00001.

لماذا تساوي نقطة واحدة حوالي 10 دولارات في EUR/USD؟ لأن اللوت القياسي 100,000 وحدة وحجم النقطة للأزواج غير JPY هو 0.0001. 100,000 × 0.0001 = 10 وحدة من عملة التسعير. عندما تكون عملة التسعير USD، فهذا 10 دولارات مباشرة.

هل أحتاج إلى API مدفوع لبناء حاسبة نقاط؟ لا. الخطة المجانية لـFinexly تعطيك 1,000 طلب شهريًا وتغطي 170+ عملة — كافية لحاسبة نقاط شخصية أو مشروع جانبي بحركة منخفضة. لحجم أكبر، راجع خطط الأسعار.

هل تختلف أحجام النقاط في أزواج العملات المشفرة؟ لا تتبع أزواج العملات المشفرة الاتفاقية القياسية للنقاط في الفوركس. غالبًا ما يتم تسعير BTC/USD بمنزلتين أو أربع منازل عشرية حسب المنصة، و"1 نقطة" تُعرَّف من قبل المنصة. للأرباح والخسائر الخالصة من العملات المشفرة، اعمل بفروق الأسعار المطلقة بدلاً من النقاط.

مستعد للبناء؟

لديك الآن الصيغة، وثلاثة عينات أكواد عاملة، وقائمة بالأخطاء التي تعضّ معظم الناس. القطعة الأخيرة هي أسعار في الوقت الفعلي لن تنجرف عنك في منتصف الحساب.

احصل على مفتاح Finexly API المجاني — لا حاجة لبطاقة ائتمان. ابدأ بـ1,000 طلب مجاني شهريًا، 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 →