פיתוח אלגוריתם ארביטראז' סטטיסטי למטבעות קריפטוגרפיים
מצאת שני מטבעות שנראה שזזים יחד — BTC ו-ETH. אבל כשאחד מזנק והשני מפגר, אתה רוצה להרוויח מזה. ארביטראז' סטטיסטי (סטט ארב) הוא בדיוק זה: סטיות זמניות מיחסים יציבים היסטורית. בניגוד לארביטראז' טהור (רווח נטול סיכון), סטט ארב נושא סיכון — הפער עלול להתרחב עוד לפני שיחזור. הסיכון הזה עצמו יוצר את ההזדמנות לרווח. הניסיון שלנו של 5+ שנים ועשרות פרויקטים שיושמו מאפשרים לנו להפוך רעיון זה לאלגוריתם עובד. עלות הפיתוח נעה בדרך כלל בין 5,000 ל-15,000 דולר, ולקוחותינו מחזירים השקעה זו לעיתים קרובות תוך מספר חודשים.
כיצד לבנות אלגוריתם ארביטראז' סטטיסטי למטבעות קריפטוגרפיים
שלב 1: זיהוי זוגות משולבים (Cointegrated)
מתאם (Correlation) מראה כיצד מחירים זזים יחד אך אינו מבטיח חזרה לממוצע. קו-אינטגרציה (Cointegration) היא יחס סטטיסטי שבו שילוב ליניארי של שתי סדרות הוא נייח. במילים פשוטות: נכסים עשויים לסטות אך בטווח הארוך לחזור זה לזה. תכונה זו חיונית לסטט ארב.
מבחן Engle-Granger לקו-אינטגרציה:
from statsmodels.tsa.stattools import coint
def find_cointegrated_pairs(prices_dict, p_threshold=0.05):
symbols = list(prices_dict.keys())
pairs = []
for i, sym1 in enumerate(symbols):
for sym2 in symbols[i+1:]:
score, p_value, _ = coint(
prices_dict[sym1],
prices_dict[sym2]
)
if p_value < p_threshold:
pairs.append((sym1, sym2, p_value))
return sorted(pairs, key=lambda x: x[2])מועמדים טובים בקריפטו: BTC/ETH, BTC-SPOT/BTC-PERP, טוקנים דומים משכבת 1 (Layer-1), ETH/LDO (נגזרת סטייקינג).
שלב 2: בניית מודל לפער (Spread) וציון Z
עבור זוג משולב (X, Y), אנו מוצאים את יחס הגידור β באמצעות OLS:
from sklearn.linear_model import LinearRegression
def calculate_hedge_ratio(price_x, price_y, window=60):
# Rolling OLS для динамического hedge ratio
hedge_ratios = []
for i in range(window, len(price_x)):
x = price_x[i-window:i].values.reshape(-1, 1)
y = price_y[i-window:i].values
model = LinearRegression().fit(x, y)
hedge_ratios.append(model.coef_[0])
return hedge_ratiosפער (Spread) = Y - β × X ציון Z מנרמל את הפער:
Z-score = (Spread - mean(Spread)) / std(Spread) אותות מסחר:
- ציון Z > +2: הפער רחב בצורה חריגה → מכור Y, קנה X (לונג על הפער)
- ציון Z < -2: הפער צר בצורה חריגה → קנה Y, מכור X (שורט על הפער)
- |ציון Z| < 0.5: סגור פוזיציה (חזרה לממוצע)
שלב 3: בחירת שיטת יחס הגידור
β סטטי באמצעות OLS הוא פשוט אך מתיישן. פילטר קלמן (Kalman Filter) מתאים את יחס הגידור בזמן אמת, ומייצר פי 2-3 פחות אותות שגויים בהשוואה ל-OLS סטטי. שיפור זה יכול להעלות את יחס שארפ (Sharpe) ב-0.5 או יותר. השוואת שיטות:
| פרמטר | OLS נע (Rolling OLS) | פילטר קלמן |
|---|---|---|
| יכולת התאמה | נמוכה | גבוהה |
| רגישות לחריגים | גבוהה | נמוכה |
| מספר אותות | בינוני | גבוה |
| שיעור אותות שגויים | פי 3 גבוה יותר | קו בסיס |
דוגמה ליישום פילטר קלמן:
from pykalman import KalmanFilter
kf = KalmanFilter(
transition_matrices=[1],
observation_matrices=price_x.values.reshape(-1, 1, 1),
initial_state_mean=0,
initial_state_covariance=1,
observation_covariance=1,
transition_covariance=0.05
)
state_means, state_covs = kf.filter(price_y.values)
hedge_ratio_dynamic = state_means.flatten()
מידע נוסף על פילטר קלמן
פילטר קלמן הוא אלגוריתם רקורסיבי המעריך את מצב המערכת ממדידות רועשות. במקרה שלנו, הוא מעדכן את יחס הגידור בכל טיק חדש, תוך שקלול ההערכה הקודמת והתצפית החדשה. זה שימושי במיוחד עבור זוגות שיחסם משתנה לאורך זמן (למשל, עקב חוצים (hard forks) או שינויים בנזילות).שלב 4: ניהול סיכון עם סטופ-לוס וקביעת גודל פוזיציה
סטופ-לוס לפי ציון Z: אם ציון Z מתרחב ל-3+ במקום להצטמצם, זה עשוי להצביע על שינוי מבני. צא מהפוזיציה.
מחצית חיים של חזרה לממוצע: הערכה באמצעות מודל AR(1):
from statsmodels.regression.linear_model import OLS
def calculate_half_life(spread):
spread_lag = spread.shift(1).dropna()
spread_diff = spread.diff().dropna()
result = OLS(spread_diff, spread_lag).fit()
half_life = -np.log(2) / result.params[0]
return half_life
מחצית חיים < 5 ימים — חזרה מהירה לממוצע, מתאים למסחר קצר טווח. > 30 ימים — איטית, דורש פוזיציות ארוכות יותר.
חלון מבט לאחור (Lookback window): תקופה לחישוב ממוצע וסטיית תקן של הפער. מותאם באמצעות walk-forward.
שלב 5: גיוון עם תיקי השקעות מרובי זוגות
במקום מסחר בזוגות, גישת תיק השקעות עם מספר זוגות משולבים:
- גיוון מפחית סיכון ספציפי לזוג
- מתאם בין זוגות צריך להיות מינימלי
- PCA למציאת גורמים משותפים
תיק וקטורים עצמיים (Eigenvector portfolio): מטבלת השונות (covariance matrix) של N נכסים, חלץ וקטורים עצמיים נייחים באמצעות PCA. מסחר בסטייה מהמצב הנייח.
שלב 6: התחשבות בעלויות עסקה
סטט ארב רווחי רק אם התשואות עולות על עלויות העסקה. חיסכון בהחלקה (slippage) יכול להגיע ל-30% עם ביצוע אופטימלי.
| פריט עלות | טווח אופייני |
|---|---|
| עמלות בורסה (taker) | 0.04–0.07% |
| עמלות יצרן (maker) | 0–0.02% |
| שיעור מימון (חוזה עתידי תמידי) | תלוי שוק |
| החלקה (Slippage) | 0.01–0.1% בהתאם לנזילות |
| עלות שאילה (שורט) | 0.01–0.03% ליום |
ציון Z מינימלי לכניסה נבחר תוך התחשבות בעלויות: אם כניסה ב-Z=1.5 אינה מכסה עלויות עם הסתברות החזרה, השתמש ב-Z=2.0.
שלב 7: בדיקת ביצועים (Backtest) עם אימות walk-forward
אימות walk-forward: אימון על 6-12 חודשים, בדיקה על 1-2 החודשים הבאים, חזרה עם הזזה. מדדים מרכזיים: יחס שארפ > 1.5, משיכה מקסימלית < 15%, משך פוזיציה ממוצע (האם מחצית החיים תואמת למציאות?).
בדיקת התאמת יתר (Overfitting): פרמטרים שאופטמו על תקופה אחת צריכים לעבוד על תקופה אחרת.
מה כלול בעבודה
- מחקר ובחירת זוגות משולבים
- פיתוח אלגוריתם עם פילטר קלמן או יחס גידור OLS
- בדיקת ביצועים על נתונים היסטוריים עם walk-forward
- אופטימיזציה של פרמטרים ואותות
- אינטגרציה עם הבורסה באמצעות CCXT
- ניטור ותמיכה לאחר ההשקה
אנו מבטיחים איכות קוד ותוצאות שקופות. אנו משתמשים ב-Python (pandas, numpy, statsmodels, sklearn, pykalman), PostgreSQL לאחסון נתונים, Celery לחישובים בזמן אמת, Grafana להדמיה. אנו פורסים על AWS/GCP עם זמן השהייה נמוך.
עלות הפיתוח מחושבת באופן אישי אך נעה בדרך כלל בין 5,000 ל-15,000 דולר ומוחזרת תוך מספר חודשים. צור קשר כדי לדון בפרויקט שלך ולקבל ייעוץ.
מקור: Engle & Granger (1987) — Co-Integration and Error Correction: Representation, Estimation, and Testing.







