مؤشر RSI: الصيغة والإعدادات وطريقة القراءة

يقارن مؤشر RSI (مؤشر القوة النسبية) متوسط حجم الإغلاقات الصاعدة بمتوسط حجم الإغلاقات الهابطة على نافذة رجوع، ويعرض التوازن بينهما على مقياس من 0 إلى 100. يحسبه Senzoukria بتنعيم Wilder الأصلي على إغلاقات الشموع، بفترة افتراضية قدرها 14.

Senzoukria · المؤشرات · Updated September 2026


RSI الزخم, في لوحة مستقلة أسفل الرسم.

ما الذي يقيسه RSI

يعبّر الرقم عن النسبة بين متوسط الربح ومتوسط الخسارة داخل النافذة المنعَّمة، لا عن المسافة التي قطعها السعر. تُهيَّأ السلسلة بالمتوسط البسيط لأول أربعة عشر تغيرًا بين إغلاق وإغلاق، فلا يُرسم شيء قبل استهلاك هذه التغيرات الأربعة عشر؛ وبعدها تحدّث كل شمعة المتوسطين بصيغة Wilder التكرارية، التي تحتفظ بكل تغير سابق في الذاكرة بوزن متناقص. ثلاث حالات حدّية معرّفة صراحةً: نافذة من الأرباح فقط تُرجع 100، ونافذة من الخسائر فقط تُرجع 0، ونافذة مسطحة تمامًا يكون فيها المتوسطان صفرًا لا تُرجع أي قيمة بدلًا من 100، لأن سوقًا لم يتحرك لا يحمل أي معلومة عن الاتجاه. يجري الحساب بلا انقطاع ولا يُصفَّر أبدًا عند حدود الجلسة.

الصيغة كما هي منفَّذة في الكود

هذا ليس التعريف الشائع في مصادر أخرى، بل ما يحسبه الكود المنشور فعليًا، موثَّقًا بجانب التنفيذ:

Période entière ≥ `min` depuis les params (garde-fou UI). */ function intParam( params: Record<string, unknown>, key: string, fallback: number, min = 1, ): number { return Math.max(min, Math.floor(numParam(params, key, fallback))); } function toPoints( bars: readonly FootprintBar[], values: ReadonlyArray<number | null>, ): SeriesPoint[] { return bars.map((b, i) => ({ time: b.bucketTsNs, value: values[i] ?? null })); } /** SMA N sur série à trous : null dès qu'UNE valeur de la fenêtre est null — moyenner autour d'un trou mentirait sur la période effective. */ function smaNullable( values: ReadonlyArray<number | null>, period: number, ): Array<number | null> { const n = Math.max(1, Math.floor(period)); const out: Array<number | null> = new Array<number | null>(values.length).fill(null); for (let i = n - 1; i < values.length; i++) { let sum = 0; let ok = true; for (let j = i - n + 1; j <= i; j++) { const v = values[j]; if (v === null) { ok = false; break; } sum += v; } if (ok) out[i] = sum / n; } return out; } /** EMA N sur une série dont les valeurs définies forment un SUFFIXE contigu (sortie d'un lissage précédent) : l'EMA tourne sur le suffixe, le préfixe reste null. Série toute-null (ou trou interne — impossible dans nos usages) → tout-null, on ne devine pas. */ function suffixEma( values: ReadonlyArray<number | null>, period: number, ): Array<number | null> { const out: Array<number | null> = new Array<number | null>(values.length).fill(null); const start = values.findIndex((v) => v !== null); if (start < 0) return out; const defined: number[] = []; for (let i = start; i < values.length; i++) { const v = values[i]; if (v === null) return out; // pas un suffixe contigu → dégradation propre defined.push(v); } const ema = emaSeries(defined, period); for (let j = 0; j < ema.length; j++) out[start + j] = ema[j]; return out; } /** Égalités RSI (documentées) : marché PLAT (les deux moyennes nulles) → null — pas d'information directionnelle (déviation assumée du Pine `down==0 → 100`, qui afficherait 100 sur du plat) ; que des gains → 100 ; que des pertes → 0. */ function rsiValue(avgGain: number, avgLoss: number): number | null { if (avgLoss === 0 && avgGain === 0) return null; if (avgLoss === 0) return 100; if (avgGain === 0) return 0; return 100 - 100 / (1 + avgGain / avgLoss); } /** RSI de Wilder sur une série de valeurs (closes ici, série RSI pour le StochRSI). Graine = moyenne SIMPLE des N premières variations, puis lissage Wilder ; premier point à l'indice N (N variations consommées). */ function wilderRsiSeries( values: readonly number[], period: number, ): Array<number | null> { const n = Math.max(1, Math.floor(period)); const out: Array<number | null> = new Array<number | null>(values.length).fill(null); if (values.length < n + 1) return out; let avgGain = 0; let avgLoss = 0; for (let i = 1; i <= n; i++) { const ch = values[i] - values[i - 1]; if (ch > 0) avgGain += ch; else avgLoss -= ch; } avgGain /= n; avgLoss /= n; out[n] = rsiValue(avgGain, avgLoss); for (let i = n + 1; i < values.length; i++) { const ch = values[i] - values[i - 1]; avgGain = (avgGain * (n - 1) + Math.max(0, ch)) / n; avgLoss = (avgLoss * (n - 1) + Math.max(0, -ch)) / n; out[i] = rsiValue(avgGain, avgLoss); } return out; } /** %K brut : 100·(close − LL_N)/(HH_N − LL_N) sur high/low des barres. Fenêtre PLATE (HH == LL) → null : 0/0 = pas d'information (même règle que delta-percent). */ function rawStochK( bars: readonly FootprintBar[], period: number, ): Array<number | null> { const n = Math.max(1, Math.floor(period)); const out: Array<number | null> = new Array<number | null>(bars.length).fill(null); for (let i = n - 1; i < bars.length; i++) { let hh = Number.NEGATIVE_INFINITY; let ll = Number.POSITIVE_INFINITY; for (let j = i - n + 1; j <= i; j++) { if (bars[j].high > hh) hh = bars[j].high; if (bars[j].low < ll) ll = bars[j].low; } const range = hh - ll; out[i] = range > 0 ? (100 * (bars[i].close - ll)) / range : null; } return out; } function typicalPrice(b: FootprintBar): number { return (b.high + b.low + b.close) / 3; } /** True range de la barre i — TR[0] = high − low (pas de close précédent), même définition que `atrSeries` (averages.ts). */ function trueRangeAt(bars: readonly FootprintBar[], i: number): number { const b = bars[i]; if (i === 0) return b.high - b.low; const pc = bars[i - 1].close; return Math.max(b.high - b.low, Math.abs(b.high - pc), Math.abs(b.low - pc)); } // ── Defs ──────────────────────────────────────────────────────────────────── /** RSI (Wilder, 1978) — lissage WILDER : gain = max(0, close − closeₚ) ; loss = max(0, closeₚ − close) graine = moyenne simple des N premiers gains/losses (à l'indice N) ; puis avg = (avg·(N−1) + x)/N ; RSI = 100 − 100/(1 + avgGain/avgLoss) Égalités : cf. `rsiValue` (plat → null, tout-gain → 100, tout-perte → 0). CONTINU — pas de reset session. Défaut N=14 (Wilder).

كيف تقرأه

  • تعني القراءة فوق 70 أن الإغلاقات الصاعدة هيمنت على النافذة المنعَّمة. في اتجاه مستمر قد يبقى RSI هناك مدة طويلة، فاقرأه وصفًا لما حدث بالفعل لا إشارةً إلى انعكاس.
  • تصف القراءة تحت 30 الحالة المعاكسة: هيمنت الإغلاقات الهابطة على النافذة.
  • يفصل خط 50 بين النوافذ التي يفوق فيها متوسط الربح متوسط الخسارة والنوافذ التي يحدث فيها العكس. عبوره يغيّر هذا التوازن، لكنه لا يثبت وحده وجود اتجاه.
  • التباعد، حين يسجل السعر قمة أعلى بينما يسجل RSI قمة أدنى، يقول إن الموجة الثانية بُنيت من إغلاقات صاعدة أصغر من الأولى. قارنه ببصمة الموجتين قبل أن تستنتج شيئًا.
  • الانقطاع في الخط يعني أن النافذة كانت مسطحة ولم تُعرَّف أي قيمة. الفجوة ليست قيمة صفر.

المعاملات والقيم الافتراضية

الفترة 14 افتراضيًا، وهو اختيار Wilder نفسه، وتقبل من 2 إلى 200. الفترة الأقصر تتفاعل بقوة أكبر مع كل إغلاق جديد وتلامس منطقتي 30 و70 أكثر بكثير؛ والأطول تسطّح المنحنى وتجعل القيم القصوى نادرة. إعداد اللون لا يغيّر إلا طريقة رسم الخط في لوحته.

RSI — المعاملات المتاحة في التطبيق مع قيمها الافتراضية.
المعاملالنوعالقيمة الافتراضيةالمدى
Periodnumber142 – 200

ما لا يُظهره

لا يقرأ RSI إلا الإغلاقات. أما إن كانت الموجة من صنع مشترين يرفعون العروض أو بائعين ينسحبون، فهذا تمييز موجود في أعمدة Bid × Ask لشمعة البصمة، ولا تستعيده أي قراءة لهذا الخط. ولأن السلسلة متصلة عبر الجلسات، تدخل فجوة الليل الحساب كتغير كبير واحد بين إغلاقين ثم تظل تؤثر في المتوسطين لشموع كثيرة. ولتنعيم Wilder ذاكرة طويلة عن قصد، فتبقى شمعة استثنائية واحدة ظاهرة في القيمة بعد طباعتها بوقت طويل. والفترات المسطحة تُنتج فجوات حقيقية في الخط لا قراءة افتراضية.

تصفح جميع المؤشرات

هذه الصفحة بلغات أخرى

Frequently asked questions

ماذا يعني RSI عند 70؟
يعني RSI عند 70 أن متوسط الإغلاق الصاعد على نافذة الرجوع كان نحو 2.33 مرة من متوسط الإغلاق الهابط. إنه يصف فترة هيمنت فيها الإغلاقات الشرائية، وليس قياسًا للمسافة التي ما زال السعر قادرًا على قطعها، وفي سوق متجه قد تبقى القيمة فوق 70 لشموع متتالية كثيرة.
هل RSI هنا هو نفسه على منصات الرسم البياني الأخرى؟
التنعيم هو صيغة Wilder التكرارية القياسية المهيّأة بمتوسط بسيط لأول N تغيرًا، وهو ما يطابق التطبيقات المعتادة. حالة واحدة تختلف عن قصد: حين يكون متوسط الربح ومتوسط الخسارة صفرًا معًا، أي أن السوق كان مسطحًا تمامًا، لا يُرجع Senzoukria أي قيمة، بينما تُرجع بعض النسخ المشتقة من Pine القيمة 100 في هذه الحالة.
هل يُصفَّر RSI في بداية كل جلسة تداول؟
لا. سلسلة RSI هنا متصلة: تنتقل المتوسطات المنعَّمة من جلسة إلى التي تليها. لذلك يكون أول تغير في الجلسة الجديدة هو الفجوة بين الإغلاق السابق والإغلاق الجديد، وقد تكون كبيرة على العقود الآجلة التي تُتداول في جلسات منفصلة.

Keep reading