توی این مقاله یه توضیحات مختصری در خصوص اندیکاتور RSI و کاربردش دادیم و در انتها هم تابع کمکی محاسبه این اندیکاتور برای استفاده در فیلترنویسی بورس ایران ارائه شده.
اندیکاتور RSI چیست؟
اندیکاتور RSI یا شاخص قدرت نسبی مخفف عبارت Relative Strength Index هست که مقدار اون بین دو عدد ۰ تا ۱۰۰ نوسان میکنه. کاربرد این اندیکاتور عموما برای تعیین نقاط قیمتی و سطوح بازگشتی بازار هست. یعنی این که این اندیکاتور تا حد زیادی نقاطی از بازار رو به ما نشون میده که به صورت افراطی دارن خرید یا فروش میزنن و برای همین احتمالا ایجاد حرکت عکس وجود داره.
برای این کار طبق بررسیهایی که تا الان روی این اندیکاتور انجام شده دو تا سطح ۳۰ و ۷۰ رو به ترتیب به عنوان سطوح اشباع فروش و اشباع خرید در نظر گرفتن. در عموم بررسیها به این نتیجه رسیدن که اگر مقدار این اندیکاتور به مقدار پایینتر از ۳۰ برسه به این معنی هست که احتمالا شاهد فروشهای افراطی توی بازار هستین و به همین خاطر این احتمال وجود داره که فشار فروش کاهش پیدا کنه و صعود قیمت به وجود بیاد. دقیقا عکس این مسئله هم روی سطح کلیدی ۷۰ وجود داره به این ترتیب که توی این سطح شاهد خریدهای افراطی توی بازار هستیم و این احتمال وجود داره که این خریدها به زودی به پایان برسن و شاهد کاهش قیمت توی بازار باشیم.
البته باید حواسمون باشه که استفاده تنها از این اندیکاتور احتمال خطاهای زیادی رو به وجود میاره و حتما باید همراه سایر شاخصهای دیگه نتایج اونو ارزیابی کرد؛ چرا که بعضی وقتا نوسانات به وجود اومده توی نواحی اشباع بدون تغییر کلی روند کلی مسیر قیمت باعث بروز اشتباه توی تحلیلهای ما میشن.
یه نکتهی جالب در خصوص اندیکاتور RSI هم اینه که درست مثل نمودارهای قیمت، توی نمودار این اندیکاتور هم میتونید از خطوط روند استفاده کنیم.
تابع محاسبه RSI در فیلترنویسی بورس
var CalculateRSI =function(period){
var len=20;
for (var i = 0; i < len ; i++) { var rec=[ih][len-1-i]; var change=rec.PClosing-rec.PriceYesterday; if (change> ۰) {
rec.gain=change;
rec.loss=0;
}
else
{
rec.gain=0;
rec.loss=-change;
}
}
var gainSum=0;
var lossSum=0;
for (var i = 0; i < period; i++) {
var rec=[ih][len-1-i];
gainSum += rec.gain;
lossSum += rec.loss;
}
var averageGain=gainSum /period;
var averageLoss=lossSum / period;
for (var i = period + 1; i < len; i++) {
var rec=[ih][len-1-i];
averageGain=(averageGain* (period – 1) + rec.gain) / period;
averageLoss=(averageLoss* (period – 1) + rec. loss)/ period;
rec.averageGain=averageGain;
rec.averageLoss=averageLoss;
}
var RS = 0;
var RSIndex = 0;
for (var i = period + 1; i < len; i++) { var rec=[ih][len-1-i]; RS = rec.averageGain/ rec.averageLoss; RSIndex = 100 – 100 / (1 + RS); rec.rsi=RSIndex; }
}