RSI ו-MACD — האינדיקטורים הכי נפוצים במסחר אלגוריתמי
RSI ו-MACD מוסברים: איך מחשבים כל אחד בפייתון, מה כל אינדיקטור מודד בפועל, ולמה שילוב ביניהם עדיף על שימוש באחד בלבד.
RSI (Relative Strength Index) מודד את קצב ועוצמת תנועות המחיר בטווח 0-100, ומזהה מצבי קניית/מכירת יתר. MACD (Moving Average Convergence Divergence) משווה בין שני ממוצעים נעים כדי לזהות שינויי מומנטום וטרנד. שני האינדיקטורים בין הנפוצים ביותר במסחר אלגוריתמי — לא כי הם "קסם", אלא כי הם פשוטים לחישוב, מתועדים היטב, ומודדים שני היבטים שונים ומשלימים של תנועת מחיר.
RSI — חישוב ופרשנות
import pandas as pd
def calculate_rsi(prices: pd.Series, period: int = 14) -> pd.Series:
delta = prices.diff()
gain = delta.where(delta > 0, 0).rolling(period).mean()
loss = -delta.where(delta < 0, 0).rolling(period).mean()
rs = gain / loss
return 100 - (100 / (1 + rs))
df["rsi"] = calculate_rsi(df["Close"])
RSI נע בין 0 ל-100. ערך מתחת ל-30 נחשב באופן מסורתי "מכירת יתר" (Oversold) — סימן אפשרי להיפוך כלפי מעלה. ערך מעל 70 נחשב "קניית יתר" (Overbought) — סימן אפשרי להיפוך כלפי מטה. חשוב: אלה לא קביעות מוחלטות — במניה עם מומנטום חזק, RSI יכול להישאר מעל 70 לתקופה ארוכה בלי היפוך.
MACD — חישוב ופרשנות
def calculate_macd(prices: pd.Series, fast=12, slow=26, signal=9):
ema_fast = prices.ewm(span=fast).mean()
ema_slow = prices.ewm(span=slow).mean()
macd_line = ema_fast - ema_slow
signal_line = macd_line.ewm(span=signal).mean()
histogram = macd_line - signal_line
return macd_line, signal_line, histogram
df["macd"], df["macd_signal"], df["macd_hist"] = calculate_macd(df["Close"])
קו ה-MACD (ההפרש בין שני הממוצעים הנעים) חוצה מעל קו האיתות (הממוצע הנע של קו ה-MACD עצמו) — נחשב איתות עלייה אפשרי (Bullish Crossover). חצייה מתחת נחשבת איתות ירידה אפשרי (Bearish Crossover). ה-Histogram (ההפרש בין שני הקווים) מציג את עוצמת המומנטום — היסטוגרמה שגדלה מעידה על מומנטום מתחזק.
RSI מול MACD — מה כל אחד תופס
| | RSI | MACD | |---|---|---| | מה נמדד | קצב ועוצמת תנועה (Oscillator) | קשר בין שני ממוצעים נעים (Trend + Momentum) | | טווח ערכים | 0-100, קבוע | ללא גבול עליון/תחתון קבוע | | מתאים במיוחד ל | זיהוי מצבי קיצון (Overbought/Oversold) | זיהוי שינויי כיוון מגמה | | מגבלה עיקרית | יכול להישאר בקיצון זמן רב בטרנד חזק | תגובה מאוחרת יחסית (Lagging Indicator) |
למה משלבים בין השניים
RSI טוב בזיהוי מצבי קיצון, אבל יכול לתת איתותי שווא בטרנד חזק. MACD טוב בזיהוי כיוון מגמה, אבל מגיב באיחור לתנועות מחיר. שילוב בין השניים — למשל, פועלים על איתות RSI רק כשהוא מתואם עם כיוון ה-MACD — מפחית איתותי שווא בהשוואה לשימוש באינדיקטור בודד:
buy_signal = (
(df["rsi"].shift(1) < 35) &
(df["macd"].shift(1) > df["macd_signal"].shift(1)) # MACD תומך בכיוון עולה
)
שאלות נפוצות
איזה אינדיקטור עדיף, RSI או MACD?
אין "עדיף" מוחלט — הם מודדים דברים שונים. RSI מתאים יותר לאסטרטגיות Mean Reversion (זיהוי קיצוני מחיר), ו-MACD מתאים יותר לאסטרטגיות Momentum (זיהוי כיוון מגמה). רבים משלבים ביניהם.
מה תקופת ה-RSI הנפוצה ביותר?
14 ימים היא ברירת המחדל ההיסטורית והנפוצה ביותר, אך תקופות קצרות יותר (7-9) נותנות איתותים תכופים יותר עם רעש רב יותר, ותקופות ארוכות יותר (21+) נותנות איתותים יציבים יותר אך פחות תכופים.
האם RSI ו-MACD מספיקים לבד לאסטרטגיה שלמה?
לרוב לא מספיקים לבד — הם כלים לזיהוי איתותים, לא אסטרטגיה מלאה. אסטרטגיה שלמה דורשת גם כללי Position Sizing, Stop Loss ו-Take Profit ברורים, ולא רק תנאי כניסה מבוסס אינדיקטור.
האם צריך לכתוב את הנוסחאות מאפס כמו בדוגמאות?
לא הכרחי — ספריות כמו pandas-ta מספקות פונקציות מוכנות לחישוב RSI, MACD ועשרות אינדיקטורים נוספים. הדוגמאות כאן מיועדות להבנת המנגנון, לא כהמלצה לממש הכל ידנית תמיד.