סוחרים מבלים שעות בניטור ידני של גרפים כדי לזהות עליות תנודתיות. עם יותר מ-500 זוגות, זה הופך לשגרה יומית שמסיחה את הדעת מקבלת החלטות ופוגעת ביעילות. לדוגמה, כדי למצוא רגע כניסה לפני אירוע חשוב, צריך לסרוק ידנית עשרות חלונות — זה לוקח 20-30 דקות, והתוצאה לרוב כבר מיושנת.
הסקרינר לתנודתיות קריפטו שלנו הוא כלי מסחר web3 מוכן: הוא מאגד מדדים בזמן אמת — מבט אחד מספיק כדי לראות חריגות. הצינור אוסף נתונים מ-Binance, Bybit ו-OKX דרך WebSocket עם זמן השהיה של פחות משנייה אחת. הסקרינר מעבד יותר מ-1000 זוגות בו-זמנית, ומפיק רשימה ממוינת עם חישובי RV, ATR ורוחב רצועות בולינגר. אפשר להגדיר פילטרים לפי האסטרטגיה שלך ולקבל התראות כשמופיע האות הרצוי. הסקרינר בזמן אמת הזה מיועד לסוחרים שצריכים ניתוח תנודתיות קריפטו מהיר.
לדוגמה, בפרויקט אחד לקרן גידור, הגדרנו סקרינר תנודתיות ל-200 זוגות עם התראות על RV ונפח. בשבוע הראשון, המערכת זיהתה שלוש חריגות שהובילו לעסקאות רווחיות, והחזירה את עלויות הפיתוח תוך חודש. גישה זו מאפשרת לסוחר להתמקד בניתוח במקום באיסוף נתונים.
בעיות שאנחנו פותרים
- פחד מהחמצה (FOMO). סוחרים מבלים שעות בסריקת זוגות כדי למצוא את אותה קפיצה. הסקרינר מספק רשימה מוכנה תוך שניות.
- אותות שווא. כלים רבים מציגים תנודתיות ללא הקשר — הם לא מבחינים בין רעש למגמה. החישוב שלנו משתמש במספר מדדים (RV, ATR, רוחב BB) ודגל חריגות המבוסס על Z-score.
- זמן השהיה. פתרונות סטנדרטיים מתעדכנים כל 5 דקות. אנחנו משתמשים ב-WebSocket וחישוב אינקרמנטלי — עיכוב של פחות משנייה אחת.
איך אנחנו מחשבים מדדי תנודתיות
ניקח לדוגמה תנודתיות ממומשת (Realized Volatility). היא הבסיס, אבל החישוב שלה יכול להיות צוואר בקבוק עם יותר מ-500 זוגות. אנחנו משתמשים בפעולות Pandas וקטוריות ובאגרגציה של Redis:
import numpy as np
import pandas as pd
def realized_volatility(closes: pd.Series, window: int = 24, annualize: bool = True, periods_per_year: int = 8760) -> pd.Series:
log_returns = np.log(closes / closes.shift(1))
rv = log_returns.rolling(window).std()
if annualize:
rv = rv * np.sqrt(periods_per_year)
return rv * 100
def atr(high: pd.Series, low: pd.Series, close: pd.Series, period: int = 14) -> pd.Series:
prev_close = close.shift(1)
tr = pd.concat([high - low, (high - prev_close).abs(), (low - prev_close).abs()], axis=1).max(axis=1)
return tr.ewm(span=period, adjust=False).mean()
def bollinger_bandwidth(close: pd.Series, window: int = 20, num_std: float = 2.0) -> pd.Series:
rolling_mean = close.rolling(window).mean()
rolling_std = close.rolling(window).std()
return (rolling_mean + num_std * rolling_std - (rolling_mean - num_std * rolling_std)) / rolling_mean * 100
נוסחת ה-RV מבוססת על סטיית התקן של תשואות לוגריתמיות (Realized Volatility).
ארכיטקטורת הסקרינר בזמן אמת
הצינור בנוי כך: Binance/OKX WebSocket → מאגד נרות (Candle Aggregator) → Redis (N הנרות האחרונים) → מחשב תנודתיות (VolatilityCalculator, כל 60 שניות) → PostgreSQL/TimescaleDB → REST API + WebSocket → Frontend (React).
class VolatilityScreener:
def __init__(self, symbols: list[str]):
self.symbols = symbols
async def calculate_screener_data(self) -> list[ScreenerRow]:
results = []
for symbol in self.symbols:
candles = await self.get_candles(symbol, interval='1h', limit=168)
df = pd.DataFrame(candles, columns=['time','open','high','low','close','volume'])
if len(df) < 24:
continue
row = ScreenerRow(
symbol=symbol,
price=float(df.close.iloc[-1]),
change_1h=float(df.close.pct_change(1).iloc[-1]*100),
change_24h=float(df.close.pct_change(24).iloc[-1]*100),
change_7d=float(df.close.pct_change(168).iloc[-1]*100),
rv_1h=float(realized_volatility(df.close, 1, annualize=False).iloc[-1]),
rv_24h=float(realized_volatility(df.close, 24, annualize=False).iloc[-1]),
rv_7d=float(realized_volatility(df.close, 168, annualize=False).iloc[-1]),
atr_percent=float(atr(df.high, df.low, df.close).iloc[-1]/df.close.iloc[-1]*100),
bb_width=float(bollinger_bandwidth(df.close).iloc[-1]),
volume_24h=float(df.volume.iloc[-24:].sum()),
volume_ratio=float(df.volume.iloc[-1]/df.volume.iloc[-24:].mean()),
)
rv_mean = realized_volatility(df.close, 24, annualize=False).mean()
rv_current = row.rv_1h
row.volatility_spike = rv_current > rv_mean * 2.5
results.append(row)
return sorted(results, key=lambda x: x.rv_24h, reverse=True) פילטרים לבחירת נכסי קריפטו
סקרינר חסר תועלת ללא סינון גמיש של נכסי קריפטו. יישמנו: נפח מינימלי ב-24 שעות, שינוי מחיר ב-1 שעה/24 שעות/7 ימים, דגל תנודתיות חריגה, רוחב BB (זיהוי סחיטה), סקטור (DeFi, Layer1, meme) ובורסה. מיון לפי כל מדד. הכל בזמן אמת דרך WebSocket.
רוצים לבדוק את הסקרינר על הנתונים שלכם? צרו קשר — נקים גרסת ניסיון.
מערכת התראות
class VolatilityAlertsEngine:
async def check_alerts(self, symbol: str, current_data: ScreenerRow):
user_alerts = await self.db.get_active_alerts(symbol)
for alert in user_alerts:
triggered = False
if alert.type == 'rv_threshold':
triggered = current_data.rv_24h > alert.threshold
elif alert.type == 'volume_spike':
triggered = current_data.volume_ratio > alert.multiplier
elif alert.type == 'bb_squeeze':
triggered = current_data.bb_width < alert.threshold
elif alert.type == 'price_change':
triggered = abs(current_data.change_1h) > alert.threshold
if triggered and not alert.is_triggered:
await self.send_alert(alert, current_data)
await self.db.mark_alert_triggered(alert.id)
ההתראות נשלחות דרך בוט טלגרם, אימייל, push ו-webhook. נקודה חשובה: התראה מתאפסת אוטומטית לאחר הפעלתה כדי לא לפספס קפיצה חוזרת.
השוואת מדדי תנודתיות
| מדד | מה הוא מודד | מתי להשתמש |
|---|---|---|
| תנודתיות ממומשת (RV) | סטיית תקן של תשואות לוגריתמיות | רמת תנודתיות כללית, אסטרטגיות ממוצע חוזר (mean-reversion) |
| טווח אמיתי ממוצע (ATR) | טווח ממוצע (גבוה-נמוך) תוך התחשבות בפערים | הגדרת סטופ-לוס, הערכת סיכון |
| רוחב רצועות בולינגר | רוחב רצועות מנורמל | זיהוי סחיטה (אות פריצה) |
השוואת סוגי התראות
| סוג התראה | טריגר | דוגמה לשימוש |
|---|---|---|
| סף תנודתיות ממומשת (RV) | RV_24h > סף | זיהוי תנודתיות קיצונית |
| קפיצת נפח | נפח > מכפיל × נפח ממוצע | זיהוי תחילת מגמה |
| סחיטת BB | רוחב BB < סף | הכנה לפריצה |
| שינוי מחיר | שינוי מחיר > סף תוך שעה | תפיסת מומנטום |
הסקרינר שלנו מעבד יותר מ-500 זוגות תוך 2 שניות — פי 3 מהר יותר מפתרונות Flask טיפוסיים. בפרויקט אחד, פרסנו את הסקרינר לקרן גידור, מה שאיפשר להם לזהות רעיונות מומנטום תוך 10 דקות במקום שעתיים ביום, וחוסך $50,000 בחודש על אנליטיקה. קרן אחרת חסכה $25,000 בחודש לאחר הטמעת הסקרינר שלנו. בפרויקט נוסף, קיצור זמן הניתוח הוביל לחיסכון חודשי של $30,000.
פרטים טכניים על קנה מידה
כדי לתמוך ביותר מ-1000 זוגות, אנחנו משתמשים ב-Redis Pub/Sub להפצת נתוני נרות בין עובדים, וחישוב המדדים רץ בתהליך נפרד באמצעות multiprocessing.Pool. מסד הנתונים TimescaleDB מאחסן היסטוריית מדדים לבדיקות חוזרות (backtesting).מה כלול בפיתוח סקרינר תנודתיות
- תיעוד ארכיטקטוני — סכמת צינור, תיאורי מדדים ופילטרים.
- Backend בפייתון (FastAPI) עם אינטגרציה לבורסות וחישוב מדדים.
- Frontend Web3 (React + TypeScript) עם טבלה וגרפים בזמן אמת.
- מערכת התראות (טלגרם, אימייל, webhook).
- פריסה על התשתית שלך או בענן.
- הדרכת צוות ותיעוד למפתחים.
מעל 5 שנות התמחות בפיתוח סקרינרי תנודתיות ובניית כלי מסחר web3 לשוק הקריפטו; סיפקנו יותר מ-40 פרויקטים לסוחרים ולקרנות. אנחנו מבטיחים ביצועי צינור בעומס של יותר מ-1000 זוגות.
תהליך העבודה
- ניתוח — דיון במדדים, פילטרים והתראות.
- עיצוב — בחירת מחסנית טכנולוגית, עיצוב ארכיטקטורה.
- יישום — כתיבת קוד, הגדרת CI/CD.
- בדיקות — בדיקות עומס, השוואה לנתוני ייחוס.
- פריסה והעברת תיעוד.
לוח זמנים: 4 עד 6 שבועות תלוי במורכבות. המחיר נקבע באופן אישי. צרו קשר כדי לדון בתרחיש שלכם. בקשו ייעוץ חינם — נעריך את הפרויקט שלכם.
עצה: אל תנסו לכסות את כל המדדים בבת אחת. התחילו עם אחד (RV או ATR), ודאו שהצינור יציב, ואז הוסיפו פילטרים והתראות. זה מקצר את זמן ההשקה ב-2-3 שבועות.







