פיתוח סימולציית מונטה קרלו לתיק השקעות
תיק קריפטו יכול להפסיד 30% בשנה — מדדים סטנדרטיים כמו תנודתיות, ביטא ויחס שארפ אינם מספקים הערכה הסתברותית. סימולציית מונטה קרלו מייצרת אלפי תרחישים ומציגה את התפלגות התוצאות המלאה. אנחנו, מהנדסים עם 8+ שנות ניסיון בפיתוח בלוקצ'יין ו-30+ פרויקטים של ניתוח סיכונים, בונים מערכות כאלה במפתח מלא: החל מבחירת מודל (GBM, התפלגות t, GARCH) ועד ללוח מחוונים אינטראקטיבי.
ההשקעה במערכת משתלמת: חיסכון טיפוסי באיזון מחדש מסתכם ב-20–40% בשנה. התשואה הממוצעת של התיק לאחר היישום עולה ב-5–10% בשנה.
כיצד סימולציית מונטה קרלו מסייעת בהערכת סיכון תיק קריפטו?
במקום "התיק יגדל ב-X%", אנחנו מקבלים: "בהסתברות של 70% התיק יגדל ב-20–80%, בהסתברות של 15% הוא יפסיד 10–30%". זה מושג על ידי מודל של מסלולי מחיר המבוססים על תכונות סטטיסטיות של נתוני שוק. הבסיס הוא תנועה בראונית גאומטרית (GBM), אך עבור קריפטו נדרשים שינויים בשל זנבות עבים והתקבצות תנודתיות.
import numpy as np
def simulate_gbm(initial_price, mu, sigma, days, n_simulations=10000):
"""
mu: среднедневная доходность
sigma: среднедневная волатильность
"""
dt = 1
random_returns = np.random.normal(
mu * dt,
sigma * np.sqrt(dt),
(n_simulations, days)
)
cumulative = np.cumprod(1 + random_returns, axis=1)
price_paths = initial_price * cumulative
return price_paths
סימולציה מרובת נכסים עם מתאמים
עבור תיק השקעות, מתאמים בין נכסים הם קריטיים:
from numpy.linalg import cholesky
def simulate_correlated_portfolio(initial_prices, means, cov_matrix, days=365, n_sims=10000):
n_assets = len(initial_prices)
symbols = list(initial_prices.keys())
L = cholesky(cov_matrix)
portfolio_paths = []
for _ in range(n_sims):
z = np.random.standard_normal((days, n_assets))
correlated_returns = z @ L.T
daily_means = np.array([means[s] for s in symbols])
actual_returns = correlated_returns + daily_means
prices = np.zeros((days + 1, n_assets))
prices[0] = [initial_prices[s] for s in symbols]
for t in range(1, days + 1):
prices[t] = prices[t-1] * (1 + actual_returns[t-1])
weights = np.ones(n_assets) / n_assets
portfolio_value = (prices * weights).sum(axis=1)
portfolio_paths.append(portfolio_value)
return np.array(portfolio_paths) מודלי תשואה משופרים
GBM מניח התפלגות נורמלית של תשואות. עבור קריפטו, זה שגוי — יש זנבות עבים והתקבצות תנודתיות.
| מודל | הנחות | התאמה לקריפטו | דיוק חיזוי |
|---|---|---|---|
| GBM | התפלגות נורמלית, תנודתיות קבועה | נמוכה בשל זנבות עבים | מספק רק בחלונות קצרים |
| התפלגות t של סטודנט | זנבות עבים, תנודתיות קבועה | בינונית, טובה יותר מ-GBM | גבוהה יותר מ-GBM אך מתעלמת מדינמיקת התנודתיות |
| GARCH(1,1) | מותנה נורמלית, תנודתיות משתנה בזמן | גבוהה | הטוב ביותר בין המודלים הקלאסיים לקריפטו |
מודל GARCH עם התפלגות t של סטודנט לזנבות עבים:
from scipy.stats import t as t_dist
def simulate_fat_tail(mu, sigma, df, n_sims, days):
returns = t_dist.rvs(df=df, loc=mu, scale=sigma, size=(n_sims, days))
return np.cumprod(1 + returns, axis=1)תנודתיות מותנית של GARCH(1,1):
from arch import arch_model
def fit_garch_and_simulate(returns_history, n_sims=10000, horizon=252):
model = arch_model(returns_history * 100, vol='GARCH', p=1, q=1)
result = model.fit(disp='off')
simulations = result.forecast(horizon=horizon, method='simulation', simulations=n_sims)
return simulations.simulations.values מדוע מודל GARCH מדויק יותר מ-GBM עבור קריפטו?
GBM מניח תנודתיות קבועה, אך שוקי הקריפטו חווים התקבצות תנודתיות. GARCH מתאים את עצמו דינמית, וזה קריטי להערכת VaR 95% וירידות. אנו משתמשים ב-GARCH(1,1) כבסיס, ולזנבות קיצוניים יותר, משלבים GARCH עם התפלגות t.
דוגמה לחישוב VaR
```python def analyze_simulation_results(portfolio_paths, initial_value, confidence_levels=[0.05, 0.25, 0.50, 0.75, 0.95]): final_values = portfolio_paths[:, -1] percentiles = {f'p{int(c*100)}': np.percentile(final_values, c*100) for c in confidence_levels} prob_loss = (final_values < initial_value).mean() returns = (final_values - initial_value) / initial_value var_95 = np.percentile(final_values - initial_value, 5) cvar_95 = (final_values - initial_value)[ final_values - initial_value <= var_95 ].mean() max_drawdowns = [] for path in portfolio_paths: peaks = np.maximum.accumulate(path) drawdowns = (peaks - path) / peaks max_drawdowns.append(drawdowns.max()) return { 'percentiles': percentiles, 'prob_loss': prob_loss, 'expected_return': returns.mean(), 'return_std': returns.std(), 'var_95': var_95, 'cvar_95': cvar_95, 'avg_max_drawdown': np.mean(max_drawdowns), 'worst_max_drawdown': np.max(max_drawdowns) } ```מדדי הפלט כוללים אחוזונים, הסתברות הפסד, תשואה צפויה, VaR 95%, CVaR 95% והתפלגות הירידה המקסימלית. לדוגמה, עם 10,000 סימולציות על פני 252 ימים, VaR 95% עשוי להיות -15% מההון הראשוני.
| מדד | תיאור | דוגמה |
|---|---|---|
| VaR 95% | 5% התרחישים הגרועים ביותר | -15.2% |
| CVaR 95% | הפסד ממוצע ב-5% הגרועים | -22.1% |
| הסתברות הפסד | הסתברות להפסד | 34.5% |
| ירידה מקסימלית ממוצעת | ירידה מקסימלית ממוצעת | -28.3% |
ויזואליזציה של תוצאות
תרשים מניפה מציג את טווח מסלולי התיק האפשריים. הקו המרכזי הוא החציון (אחוזון 50). אזורים כהים מציינים טווחים סבירים (25–75%), אזורים בהירים מציינים טווחים נדירים (5–95%). היסטוגרמת התפלגות התשואות והתפלגות הירידות משלימות את הניתוח.
יישומים בניהול תיק השקעות
- הסתברות להשגת יעד: חישוב הסבירות שהתיק יגדל ב-50% בשנה תחת האסטרטגיה הנוכחית.
- השוואת אסטרטגיות: הרצת סימולציה לשתי אסטרטגיות והשוואת התפלגויות התוצאות.
- תדירות איזון מחדש אופטימלית: סימולציית תיק עם תדירויות איזון שונות כדי לבחור את הטובה ביותר.
- הקצאת הון: החלטה כמה להקצות לאסטרטגיות סיכון לעומת שמרניות כדי להגיע ליעד בהינתן סיכון מקובל.
ערימת טכנולוגיות
Python (numpy, scipy, arch עבור GARCH), Numba להאצת סימולציה (JIT נותן האצה של 10–50x), pandas לעיבוד נתונים, matplotlib/plotly לויזואליזציית תרשים מניפה. 10,000 סימולציות על פני 252 ימים לוקחות < 1 שנייה עם Numba.
תהליך עבודה
- איסוף נתונים היסטוריים ל-2–3 שנים (OHLCV) באמצעות CCXT או CoinGecko API.
- כיול מודל: הערכת פרמטרים עבור GBM, התפלגות t או GARCH(1,1) מתשואות יומיות.
- סימולציה של 10,000–50,000 מסלולים עם מטריצת מתאם של נכסים.
- חישוב מדדי סיכון: VaR, CVaR, ירידה מקסימלית, הסתברות הפסד.
- בניית לוח מחוונים אינטראקטיבי באמצעות Plotly/Dash עם תרשים מניפה והיסטוגרמות.
- אינטגרציה עם הקצה האחורי שלך באמצעות REST API או WebSocket לעדכונים יומיים.
מה כלול
- קוד Python עם הערות ותיעוד
- בחירת מודל וכיול (GBM, t-student, GARCH) המותאם לתיק שלך
- בדיקת ביצועים היסטורית
- אינטגרציה עם הקצה האחורי שלך (REST API או WebSocket)
- לוח מחוונים אינטראקטיבי על Plotly/Dash
- הדרכת צוות ותיעוד
צור קשר כדי לדון במקרה שלך. קבל ייעוץ על בחירת מודל והערכת עלות תוך יום אחד. הזמן פיתוח מערכת במפתח מלא — אנו מבטיחים דיוק ופריסה אמינה.







