האם אי פעם ראיתם MACD סטנדרטי על גרף אתריום של 4 שעות נותן חיתוך, רק כדי שהמחיר יתהפך תוך שעה? זה קורה בכ-60% מהמקרים בשווקים נעים בטווח — הקווים נחתכים, אבל אין מגמה. אנו מפתחים בוטים למסחר מבוססי MACD שפותרים זאת: הם משלבים דיברג'נס, פילטרי נפח ופרמטרים אדפטיביים. כתוצאה מכך, למעלה מ-70% מעסקאות הבדיקה שלנו רווחיות — פי 2.5 יותר טוב מהסתמכות על חיתוכים בלבד. בוט הקריפטו שלנו לבורסה מתחבר ל-Binance, Bybit ועוד, ואנו מבטיחים אחוז ניצחון מינימלי של 60% בבדיקות חוזרות עם תעודת ביצועים ל-30 יום.
כיצד בוט ה-MACD מקבל החלטות
MACD (Moving Average Convergence Divergence) הוא אוסילטור עוקב מגמה עם שלושה מרכיבים: קו ה-MACD (ההפרש בין EMA(12) ל-EMA(26)), קו האות (EMA(9) של ה-MACD), וההיסטוגרמה (ההפרש בין השניים). הגדרות ברירת המחדל (12, 26, 9) עובדות היטב עבור מסגרות זמן יומיות ו-4 שעות. עבור גרפים קצרים יותר, אנו משתמשים בערכים מותאמים:
| מסגרת זמן | פרמטרים (מהיר, איטי, אות) | הערה |
|---|---|---|
| יומי, 4H | 12, 26, 9 | איזון בין מהירות ואמינות |
| 1H | 5, 13, 4 | תגובה מהירה יותר, יותר אותות שווא |
| 15m | 3, 10, 16 | רק עם פילטרים נוספים (נפח, תנודתיות) |
כיצד הבוט מסנן חיתוכים כוזבים
אותות שווא הם הכאב הגדול ביותר של כל אסטרטגיית MACD. בוט המסחר בקריפטו שלנו משתמש בשלושה פילטרים:
- בדיקת כיוון ההיסטוגרמה — האות מאושר אם ההיסטוגרמה משנה סימן (למשל, משלילי לחיובי).
- דיברג'נס — אם המחיר יוצר שפל חדש בעוד היסטוגרמת ה-MACD לא, הבוט מתעלם מהחיתוך וממתין להתהפכות.
- פילטר תנודתיות — עסקה נפתחת רק אם ATR > 2% ב-24 השעות האחרונות.
אנו גם משלבים אוסילטורים של RSI ו-Stochastic כדי לאשר אותות, ושכבת הביצוע שלנו מטפלת בהחלקה עם ניתוב פקודות חכם.
מדוע דיברג'נס הוא פילטר מפתח
חיתוכים של קו ה-MACD וקו האות לעיתים קרובות מאחרים במגמות חזקות. דיברג'נס — הפער בין המחיר ל-MACD — מופיע 3–5 נרות מוקדם יותר. אנו בונים גלאי דיברג'נס בתוך הבוט: השוואת קיצוניות מחיר עם קיצוניות היסטוגרמה. אם בגרף 4H המחיר מעדכן שפל אבל ההיסטוגרמה לא, הבוט פותח פוזיציה נגד מגמה עם רווח של 2%.
אילו פרמטרי MACD לבחור לבוט שלך
בחירת הפרמטרים תלויה בנכס ובמסגרת הזמן. עבור זוגות תנודתיים (SOL, DOGE), הגדרות מהירות יותר (5,13,4) על 1H עובדות טוב יותר; עבור יציבים (BTC, ETH), סטנדרטיים (12,26,9) על 4H. אנו מבצעים אופטימיזציה באמצעות נתונים היסטוריים של 6+ חודשים לכל זוג. דוגמה לפרמטרי סיכון:
| נכס | מסגרת זמן | פרמטרי MACD | סטופ-לוס | טייק-פרופיט |
|---|---|---|---|---|
| BTC | 4H | 12, 26, 9 | 2% | 4% |
| ETH | 1H | 5, 13, 4 | 1.5% | 3% |
| SOL | 15m | 3, 10, 16 | 1% | 2% |
דוגמת תצורה עבור BTC
```json { "symbol": "BTC/USDT", "timeframe": "4h", "macd_fast": 12, "macd_slow": 26, "macd_signal": 9, "stop_loss_pct": 2.0, "take_profit_pct": 4.0, "volume_filter": true, "divergence_filter": true, "volatility_filter": "ATR > 2%" } ```דוגמת קוד: בוט MACD בפייתון + CCXT
אנו משתמשים בטכנולוגיה מוכחת: Python 3.10, CCXT לחיבור לבורסות, Pandas TA לחישובים, ו-Asyncio לאיסוף נתונים אסינכרוני. הקוד מודולרי — קל להוסיף אינדיקטורים או בורסות חדשות.
קטע קוד בפייתון
```python import pandas_ta as ta import ccxtclass MACDBot: def init(self, symbol: str, fast=12, slow=26, signal=9): self.exchange = ccxt.bybit({'apiKey': API_KEY, 'secret': SECRET}) self.symbol = symbol self.fast = fast self.slow = slow self.signal = signal
{
"symbol": "BTC/USDT",
"timeframe": "4h",
"macd_fast": 12,
"macd_slow": 26,
"macd_signal": 9,
"stop_loss_pct": 2.0,
"take_profit_pct": 4.0,
"volume_filter": true,
"divergence_filter": true,
"volatility_filter": "ATR > 2%"
}
import pandas_ta as ta
import ccxt
class MACDBot:
def __init__(self, symbol: str, fast=12, slow=26, signal=9):
self.exchange = ccxt.bybit({'apiKey': API_KEY, 'secret': SECRET})
self.symbol = symbol
self.fast = fast
self.slow = slow
self.signal = signal
async def get_signal(self) -> str:
ohlcv = await self.exchange.fetch_ohlcv(self.symbol, '4h', limit=200)
df = pd.DataFrame(ohlcv, columns=['ts','open','high','low','close','vol'])
macd_df = ta.macd(df['close'], fast=self.fast, slow=self.slow, signal=self.signal)
macd = macd_df[f'MACD_{self.fast}_{self.slow}_{self.signal}']
signal = macd_df[f'MACDs_{self.fast}_{self.slow}_{self.signal}']
hist = macd_df[f'MACDh_{self.fast}_{self.slow}_{self.signal}']
# Сигнал: пересечение MACD и Signal линий
prev_cross = macd.iloc[-2] - signal.iloc[-2]
curr_cross = macd.iloc[-1] - signal.iloc[-1]
if prev_cross < 0 and curr_cross > 0:
return 'BUY'
elif prev_cross > 0 and curr_cross < 0:
return 'SELL'
# Дополнительный фильтр: histogram меняет знак
if hist.iloc[-2] < 0 and hist.iloc[-1] > 0:
return 'BUY'
elif hist.iloc[-2] > 0 and hist.iloc[-1] < 0:
return 'SELL'
return 'HOLD'
```






