אסטרטגיה לרוב מתפקדת מצוין על חשבון דמו של $10K, אך כאשר עוברים לחשבון אמיתי של $1M, התוצאות מתדרדרות בחדות. לדוגמה, עסקה של $500K ב-Uniswap עלולה להחליק ב-0.5%, בעוד שעסקה של $5M מחליקה ב-2%. הסיבה? התעלמות מנזילות. בדיקת חוזר (Backtesting) ריאלית המשלבת נזילות היא ההיבט המורכב ביותר אך גם הקריטי ביותר. בלעדיה, אתה מסתכן בתוצאות לא ריאליות. הצוות שלנו, עם ניסיון של 10+ שנים, בונה מנועי בדיקת חוזר המתחשבים בנזילות השוק ובהשפעת הזמנות על המחיר. עזרנו לעשרות פרויקטים להימנע מהפסדים כתוצאה מהחלקה שלא נלקחה בחשבון. מודלים מדויקים חוסכים עד $15,000 בחודש בעלויות החלקה לסוחר ממוצע.
מהי בדיקת חוזר ריאלית עם ספר הזמנות, VWAP ו-Almgren-Chriss?
בדיקת חוזר ריאלית המדמה נזילות היא שיטה להערכת אסטרטגיות מסחר תוך התחשבות בהשפעת הזמנות גדולות על מחיר השוק. ללא מודלים כאלה, התוצאות עלולות להיות מוגזמות פי 2-3. הגישה שלנו משתמשת בתמונות ספר הזמנות, מודלי VWAP, ו-מסגרת Almgren–Chriss לחיזוי מדויק של החלקה והשפעת שוק. כל עסקה נושאת עלויות מסחר שמוערכות בחסר ללא בדיקת חוזר מודעת נזילות.
בעיות שנפתרות על ידי מודל נזילות
טעות אופיינית: בדיקת חוזר מראה תוצאות מצוינות עם הון קטן, אך כאשר מגדילים את ההיקף, האסטרטגיה מפסיקה לעבוד. לדוגמה, על $10K, עסקה היא 0.01% מהנפח היומי; על $1M, היא 1%, מה שמשפיע באופן ניכר על המחיר. הכלל: הזמנה העולה על 0.5–1% מהנפח היומי מתחילה להזיז את השוק. ללא מודלים, זה מוביל לתשואות מוגזמות.
בעיה נוספת היא הערכה שגויה של החלקה. ללא מודל נזילות, ההחלקה מונחת כאפס או קבועה, דבר שאינו ריאלי. אנו משתמשים בשלוש גישות:
- סימולציית ספר הזמנות — שחזור מדויק של ספר ההזמנות
- מודל VWAP — קירוב באמצעות נפח נרות
- מסגרת Almgren–Chriss — ביצוע אופטימלי של הזמנות גדולות
מדוע בדיקת חוזר ריאלית עם נזילות היא קריטית?
ללא מודלים מדויקים, אינך יכול להעריך את הקיבולת האמיתית של אסטרטגיה. קיבולת היא ההון המקסימלי שבו האסטרטגיה נשארת אפקטיבית. כאשר חורגים מהסף, השפעת שוק מבטלת את היתרונות. באחד הפרויקטים שלנו: אסטרטגיה הראתה Sharpe של 2.5 על $100K אך ירדה ל-1.1 על $5M — בדיוק בגלל החלקה שלא נלקחה בחשבון. מודלים נכונים מאפשרים גילוי מוקדם של סף זה והתאמת האסטרטגיה. הלקוחות שלנו חוסכים עד $30,000 בחודש בעלויות מסחר לאחר יישום מודלים נכונים.
מתי להשתמש במסגרת Almgren–Chriss?
Almgren–Chriss מתאים לפוזיציות גדולות שבהן סיכון זמן משמעותי. אם אתה סוחר ב-1% או יותר מהנפח היומי, מודל זה נותן לוח זמנים אופטימלי לביצוע. לעסקאות קטנות, מודל VWAP מספיק. קרא עוד על המודל ב-מסגרת Almgren–Chriss.
איך אנחנו עושים את זה: פרטי יישום
סימולציית ספר הזמנות
למודלים מדויקים, אנו זקוקים לתמונות ספר הזמנות. אנו משחזרים כמה נפח זמין בכל רמת מחיר:
import numpy as np
from dataclasses import dataclass
@dataclass
class OrderBookLevel:
price: float
quantity: float
@dataclass
class SimulatedOrderBook:
symbol: str
timestamp: int
bids: list[OrderBookLevel]
asks: list[OrderBookLevel]
def simulate_market_buy(self, quantity: float) -> tuple[float, float]:
remaining = quantity
total_cost = 0.0
filled = 0.0
for level in self.asks:
if remaining <= 0:
break
fill_qty = min(remaining, level.quantity)
total_cost += fill_qty * level.price
filled += fill_qty
remaining -= fill_qty
if filled == 0:
return 0.0, 0.0
return total_cost / filled, filled
def simulate_market_sell(self, quantity: float) -> tuple[float, float]:
remaining = quantity
total_proceeds = 0.0
filled = 0.0
for level in self.bids:
if remaining <= 0:
break
fill_qty = min(remaining, level.quantity)
total_proceeds += fill_qty * level.price
filled += fill_qty
remaining -= fill_qty
if filled == 0:
return 0.0, 0.0
return total_proceeds / filled, filled
מודל השפעת שוק VWAP
אם נתוני ספר הזמנות מלאים אינם זמינים, אנו מקריבים באמצעות נפח נרות:
class VWAPLiquidityModel:
def __init__(
self,
participation_rate: float = 0.05,
market_impact_coefficient: float = 0.1,
):
self.participation_rate = participation_rate
self.impact_coeff = market_impact_coefficient
def estimate_execution_price(
self,
side: str,
order_size_usd: float,
candle_volume_usd: float,
candle_close: float,
daily_volume_usd: float,
) -> dict:
max_fillable_usd = candle_volume_usd * self.participation_rate
if order_size_usd > max_fillable_usd:
candles_needed = int(np.ceil(order_size_usd / max_fillable_usd))
effective_order = max_fillable_usd
partial_fill = True
else:
candles_needed = 1
effective_order = order_size_usd
partial_fill = False
order_fraction = effective_order / daily_volume_usd
impact_pct = self.impact_coeff * np.sqrt(order_fraction)
if side == 'BUY':
execution_price = candle_close * (1 + impact_pct)
else:
execution_price = candle_close * (1 - impact_pct)
return {
'execution_price': execution_price,
'filled_usd': effective_order,
'partial_fill': partial_fill,
'candles_to_complete': candles_needed,
'slippage_pct': impact_pct * 100,
}
פרטי כיול מודל VWAP
מקדם השפעת השוק ברירת המחדל הוא 0.1, אך עבור שוק ספציפי, יש לכייל אותו בהתבסס על עסקאות היסטוריות. עבור זוגות נזילים מאוד (BTC/USD), המקדם עשוי להיות 0.05; עבור נזילות נמוכה, 0.2. כיול מדויק משפר את דיוק חיזוי ההחלקה ב-15%.
מסגרת Almgren–Chriss
מודל מורכב יותר אך גם מדויק יותר להערכת עלויות מסחר של פוזיציות גדולות:
class AlmgrenChrissModel:
def __init__(
self,
daily_volume: float,
price_volatility: float,
bid_ask_spread: float,
market_depth: float,
permanent_impact: float,
):
self.V = daily_volume
self.sigma = price_volatility
self.epsilon = bid_ask_spread / 2
self.eta = market_depth
self.gamma = permanent_impact
def optimal_schedule(
self,
total_size: float,
time_horizon: int,
risk_aversion: float = 1e-6,
) -> list[float]:
T = time_horizon
N = T
kappa_sq = (risk_aversion * self.sigma**2) / (self.eta / self.V)
kappa = np.sqrt(max(kappa_sq, 0))
schedule = []
for j in range(N):
t = j / N
x_j = total_size * np.sinh(kappa * (1 - t)) / np.sinh(kappa)
if j > 0:
trade_j = schedule[-1] - x_j
else:
trade_j = total_size - x_j
schedule.append(trade_j)
return schedule
השוואת מודלים
| פרמטר | מודל VWAP | Almgren–Chriss |
|---|---|---|
| דיוק | בינוני | גבוה |
| נתונים | נפח נרות בלבד | ספר הזמנות מלא, תנודתיות, מרווח |
| מהירות | גבוהה | בינונית |
| סיכון זמן נחשב | לא | כן |
| יישום | הערכות מהירות, הזמנות קטנות | פוזיציות גדולות, ביצוע אופטימלי |
מודל VWAP רץ פי 5 מהר יותר מ-Almgren–Chriss, אך דיוק ההחלקה נמוך ב-10%. יש לשקול את הפשרה הזו בעת הבחירה.
איך להגדיל אסטרטגיה מבלי לאבד רווחיות?
אנליטיקה חשובה להחלטות השקעה:
def analyze_capacity(
strategy_backtest: BacktestResult,
volume_data: pd.DataFrame,
participation_rate: float = 0.05,
) -> pd.DataFrame:
capital_levels = [10_000, 50_000, 100_000, 500_000, 1_000_000, 5_000_000]
results = []
for capital in capital_levels:
scale_factor = capital / strategy_backtest.initial_capital
adjusted_returns = []
for trade in strategy_backtest.trades:
order_size = trade['size_usd'] * scale_factor
avg_daily_vol = volume_data.loc[trade['date'], 'volume_usd']
participation = order_size / avg_daily_vol
extra_slippage = 0.1 * np.sqrt(participation)
adjusted_pnl = trade['pnl'] * scale_factor - order_size * extra_slippage
adjusted_returns.append(adjusted_pnl / capital)
adjusted_sharpe = np.mean(adjusted_returns) / np.std(adjusted_returns) * np.sqrt(252)
results.append({
'capital': capital,
'sharpe': adjusted_sharpe,
'annual_return_pct': np.mean(adjusted_returns) * 252 * 100,
})
return pd.DataFrame(results)
התוצאה היא עקומת הון מול תשואה. האסטרטגיה נשארת אפקטיבית עד לסף מסוים, שלאחריו השפעת השוק מבטלת את היתרון. סף זה הוא הקיבולת המקסימלית של האסטרטגיה. הלקוחות שלנו חוסכים עד $15,000 בחודש בעלויות מסחר בזכות מודלים נכונים.
תהליך
| שלב | פעולות |
|---|---|
| אנליזה | בחינת האסטרטגיה שלך, נתוני מסחר ומטרות |
| עיצוב | בחירת מודלי נזילות, עיצוב ארכיטקטורה |
| יישום | כתיבת קוד ב-Python עם Foundry/Hardhat לסימולציית חוזים חכמים |
| בדיקות | אימות על נתונים היסטוריים, השוואה עם עסקאות אמיתיות |
| פריסה | מסירת קוד, תיעוד והדרכת הצוות שלך |
איך להגדיר בדיקת חוזר ריאלית עם נזילות
- איסוף נתוני ספר הזמנות היסטוריים (תמונות מבורסות).
- בחירת מודל נזילות בהתבסס על כמות הנתונים והדיוק.
- כיול פרמטרי המודל (מקדם השפעת שוק, שיעור השתתפות).
- שילוב המודל במנוע בדיקת החוזר.
- הרצת בדיקות חוזר עם סימולציית ביצוע הזמנות.
- ניתוח קיבולת וסקלביליות.
מה כלול
- קוד מודולרי התומך בסימולציית ספר הזמנות, VWAP ו-Almgren–Chriss
- אינטגרציה עם מערכת בדיקת החוזר הקיימת שלך
- תיעוד ודוגמאות שימוש
- הדרכת צוות (שעתיים אונליין)
- תמיכה ל-30 יום לאחר מסירה
לוח זמנים ועלות
לוח פיתוח: בין 3 ל-6 שבועות בהתאם למורכבות. העלות מוערכת באופן אישי לאחר ניתוח הפרויקט שלך. קבל ייעוץ: ננתח את האסטרטגיה שלך ונציע את מודל הנזילות האופטימלי. ניסיון: מעל 50 פרויקטים מוצלחים במסחר קריפטו וב-DeFi. אנו מבטיחים איכות קוד ועמידה בלוחות זמנים. בקש ייעוץ כדי ללמוד כיצד נוכל לעזור לאסטרטגיה שלך.







