מדוע מערכת הבקטסטינג של DeFi אינה תואמת למסחר בפועל
הפער בין ההרצה לשוק אינו שגיאת עיגול, אלא תוצאה של האופן שבו הנתונים נאספים ושל האופן שבו העסקה מבוצעת. במערכת הבקטסטינג של DeFi התמונה חוזרת על עצמה: עקומת הבדיקה חלקה, אך ברשת האסטרטגיה מאבדת חלק מהתשואה או נכנסת לירידה. הסיבות מדידות ומשוחזרות על אותה היסטוריה בדיוק.
היסטוריה חסרה: המאגר קיים שנתיים, ובדיוק על החלון הזה נבדקת האסטרטגיה. תקופות של תשואה חריגה נכנסות לנתונים, אך התכווצויות נזילות לא. בדיקת אסטרטגיות DeFi על מקטע כזה מעריכה יתר על המידה את היציבות: אירועים נדירים, שדווקא הם קובעים את התוצאה, חסרים במדגם.
החלפת מחירי סגירה: החישוב לוקח תמונת מצב של המאגר אחת לתקופה, בעוד שהעסקה מבוצעת מול העקומה בין הנקודות האלה. תזוזת מחיר בתוך התקופה אינה נלקחת בחשבון, וככל שהחלון תנודתי יותר, כך הפער גדול יותר.
עומק נזילות והחלקה בחישוב: בתזוזת מחיר קבועה המודל מתעלם מהירידה שההזמנה עצמה יוצרת. במאגר דליל עסקה גדולה מזיזה את המחיר, והעמלות והתייקרות הביצוע בתחרות על מקום בבלוק מצטמצמות לקבוע.
הטיית השורדים: הסינון נעשה לפי מאגרים וטוקנים ששרדו עד היום — סגורים ואלה שאופסו אינם נכנסים למדגם. המערכת נראית אמינה יותר משהייתה בזמן אמת, והתאמת פרמטרים לאותה היסטוריה מעלה את המטריקה ומורידה את יכולת ההכללה.
בהמשך — כיצד סוגרים זאת: אילו נתונים נדרשים, כיצד מחושב הביצוע ומה נבדק לפני יציאת האסטרטגיה לרשת.
אפקט מדיד: מהירות הרצות, התכנסות וניתוח ירידות
חישוב מחדש של סט פרמטרים על כל ההיסטוריה אורך דקות במקום יממה: ההרצה מחושבת על נתונים שנאספו ונורמלו מראש, ולא לפי בקשה לצומת בכל איטרציה. רשת הפרמטרים מחושבת במקביל ונשמרת במטמון לפי מקטעים — כשמשתנה מקדם אחד, מחושבת מחדש רק החלק המושפע. המהנדס מספיק להריץ עשרות תצורות במשמרת ולראות היכן תגובת האסטרטגיה נשברת.
התכנסות תוצאות ההרצה עם הביצוע בפועל — הקריטריון המרכזי לאמון בבדיקה. העסקאות משוחזרות מאירועים ברשת, עמלות, החלקה ועלות גז מחושבים כמו בעסקה בפועל, ולכן הפער נשאר בגבולות שגיאת המודל, אינו שונה בסדרי גודל ואינו הופך את המסקנה לגבי התשואה. דווקא על בסיס זה נבחרת התצורה, ולא לפי עקומה יפה.
מניעת הצצה לעתיד מובנית: האסטרטגיה רואה רק את הנתונים שהיו זמינים במועד ההחלטה. תקופת הבדיקה המושהית אינה משתתפת כלל בהתאמת הפרמטרים — היא נשארת ללא נגיעה עד להרצה הסופית. יציבות האסטרטגיה נמדדת במספר מצבי שוק: עלייה, דשדוש, צניחה חדה בנזילות במאגרים Uniswap.
הירידות מוסברות בנתונים, לא בניחושים. רואים איזה חלק מההפסד נבע ממחיר הנכס, איזה מהחלקה במאגר דליל, ואיזה מעיכוב בביצוע. במקום המסקנה «האסטרטגיה לא עבדה» מופיע ניתוח עם תרומת כל סיבה — והתיקון נעשה בצומת לוגי מסוים, ולא במודל כולו.
מצבי הרצה: וקטורי, אירועי ותיקי
מצב ההרצה קובע אילו השפעות בכלל ייכנסו לתוצאה. חישוב וקטורי מעבד את היסטוריית המחירים כולה במערכים, שחזור אירועי מריץ את שרשרת הבלוקים ואת תגובות החוזים, וסימולציית תיק מוסיפה יתרה כוללת, מגבלות ותור הזמנות. מהיר ומלא בו-זמנית לא קיים — המצב נבחר לפי השאלה שעליה צריך תשובה.
| מצב | מתי מתאים | מגבלות |
|---|---|---|
| חישוב וקטורי | סינון המוני של השערות, הערכה גסה על היסטוריה ארוכה | אינו רואה מצב בתוך הבלוק, החלקה וליקווידציות — הביצוע אידיאלי |
| שחזור אירועי | בדיקת מכניקת הפרוטוקול: עמלות, אורקלים, ליקווידציות, סדר ההזמנות בבלוק | איטי בסדרי גודל, דורש ארכיון מצבים, אי אפשר להריץ אלפי וריאציות |
| סימולציית תיק | כמה אסטרטגיות על יתרה משותפת: תחרות על הון, מגבלות סיכון | שגיאה במודל ההשפעה של עסקה על המחיר מעוותת את התוצאה מיד בכל האסטרטגיות |
מה שאי אפשר להשיג בדרך זולה
מצב בתוך הבלוק, השפעת עסקה גדולה על המחיר וסדר ההזמנות בעת עומס ברשת אינם משוחזרים במצב זול: או שממדלים אותם בקירוב, או שמקבלים אותם בהרצה אירועית עם מצבים מאורכבים.
סכמת העבודה — סינון השערות בצורה וקטורית, מועמדים סופיים דרך הרצה אירועית, והתיק כולו על הרכב אסטרטגיות מתואם. פער בין המצבים באסטרטגיה פשוטה מצביע על שגיאה במודל העמלות, האורקל או סדר ההזמנות — כל עוד הוא לא נפתר, אין לתת אמון בתוצאות.
איך אנחנו בונים את המערך: מביקורת נתונים ועד מסירת נוהל
המערך נבנה עבור אסטרטגיה מסוימת, ולא "באופן כללי": תחילה מקבעים אילו החלטות היא מקבלת ועל איזה נתונים, ואז בונים מעגל שמשחזר את ההחלטות האלה. סדר השלבים אינו מקרי — טעות בהכנת ההיסטוריה מבטלת את ערכם של כל הבדיקות שאחריה.
- ניתוח האסטרטגיה. לוגיקת כניסה ויציאה, סט האותות, ניהול פוזיציה ומה שנחשב בעינינו לביצוע — סגירת תקופה או שינוי במצב החוזה.
- ביקורת מקורות. עומק ההיסטוריה, חסרים, פערים בין ספקי מחירים בלתי תלויים, טיפול ב-reorgs: בלי בדיקה זו מתקבלות תוצאות יפות אך שגויות.
- סכמת נתונים. ממירים את התשקיפים לצורה אחידה עם הצמדה לזמן הבלוק, מוסיפים עמלות מאגר, החלקה ונזילות שהייתה זמינה במועד העסקה.
- הרכבת מעגל החישוב. הרצה משוחזרת: אותו קלט נותן אותה תוצאה, המצב נקבע שלב אחר שלב, יומן העסקאות והמטריקות נשמר.
- בדיקה על תקופה מושהית. חלק מההיסטוריה אינו משתתף בכיול — הוא מראה היכן האסטרטגיה הותאמה יתר על המידה לעבר.
- תרחישי קיצון. זינוק בתנודתיות, קריסת נזילות, עליית עלות הגז, עיכוב בביצוע, כשל מקור: בודקים היכן המעגל נשבר.
- מסירה ונוהל הרצות. מוסרים את המערך עם תיעוד, מתארים את סדר ההרצה, קריטריוני עצירה ועדכון נתונים, ומאמנים את הצוות.
בהמשך אתם מריצים את ההרצות בעצמכם — ורואים כיצד משתנה התנהגות האסטרטגיה כשמשתנים ההנחות.
חפצי מסירה: סכמות נתונים, סטים של פרמטרים, דוחות
המסירה אינה מסתיימת במאגר קוד, אלא בסט חפצים שלפיהם הצוות שלכם יכול לחזור על כל הרצה בלעדינו ולהסביר את התוצאה לביקורת חיצונית. להלן מה נשאר אצל הלקוח ולשם מה נחוץ כל רכיב.
- סכמת נתונים — טבלאות של עסקאות, מצבי מאגרים וציטוטים: סוגי שדות, מפתחות, קשרים, עומק ההיסטוריה וכללי טיפול בחסרים במקור.
- מדריך מקורות — מאין מגיעים הנתונים, תדירות העדכון, השהיה ביחס למועד העסקה והתנהגות בעת פער בין שני מקורות.
- סטים של פרמטרים — פרופילי הרצה מוכנים: עמלות מאגר, החלקה, אופק החזקה, צעד חישוב מחדש וכללי יציאה מפוזיציה.
- מילון שדות הדוח — מה משמעות כל מטריקה, כיצד מחושבת התשואה בהתחשב בעמלות ומה בדיוק אנחנו מכנים ירידה.
- תבניות דוחות — סיכום האסטרטגיה, פיזור התוצאות לפי תקופות, רשימת העסקאות הגרועות עם הסיבות להפעלה.
- הפרדת הרשאות — האנליסט משנה פרמטרים ומריץ הרצות, מנהל הסיכונים רואה היסטוריה, ותוצאה שנקבעה אי אפשר לשכתב בדיעבד.
- תיעוד הרצות — יומן הפעלות עם גרסת סט הפרמטרים, תמונת מצב של הנתונים ורשימת שינויים ביחס להרצה הקודמת.
- נוהל הרצה — סדר הפעולות: להקים סביבה, להריץ את האסטרטגיה, להשוות את התוצאה לזו שנקבעה ולהבין מאין הפער.
סט כזה מסיר את התלות בקבלן: כעבור חודשים אתם משחזרים את המספר מהדוח ורואים אילו פרמטרים שינו אותו.
מקרה בוחן: התכנסות המודל והשוק עלתה פי שלושה
הלקוח הגיע עם אסטרטגיית ארביטראז' על כמה מאגרי נזילות Uniswap: על נתונים היסטוריים הגרף עלה באופן יציב, אך במסחר בפועל התוצאה לא שוחזרה. את הפער בין המודל לשוק יצרו שני מוקדים — עמלות ההחלפה ורגע ביצוע העסקה ביחס לתנועת המחיר בתוך המאגר. בנינו מחדש את מקרה הבקטסטינג, וחילקנו את ההיסטוריה למקטע אימון ומקטע מושהיה.
מה שינינו במודל
בחישוב הוספנו השהיה בין האות לבין כניסת העסקה לבלוק, החלקה בכל שלב ותעריפי עמלות בפועל במקום קבוע ממוצע. בנפרד תיארנו תקופת קיצון: כאשר הנזילות עוברת בחדות בין מאגרים, המחיר בתוך אחד מתרחק מהמחיר בשני.
המודל מתייחס לכך כעת לא כאנומליה אלא כתרחיש עבודה — ובודק אם הארביטראז' מספיק להיסגר לפני ההתיישרות.
מטריקות לפני ואחרי
ההתכנסות של התשואה המחושבת עם התשואה בפועל בתקופה המושהית עלתה פי שלושה, ושיעור הסטיות מעל הסף המותר ירד מ-21% ל-7%. השגיאה בהערכת התוצאה של עסקה בודדת ירדה מ-0.9% ל-0.3% — החישוב הפסיק להראות רווח במקום שאין כזה.
הבדיקה על נתונים היסטוריים נעשית בהרצה על כמה מקטעים בלתי תלויים, כולל אפיזודות של העברות נזילות חדות. אם האסטרטגיה לא עוברת לפחות אחד מהם, היא נדחית או עוברת לתיקון עם גבול ישימות ברור — הלקוח רואה היכן המודל נשבר, לפני משיכת כספים.
במה שונה בקטסטינג על היסטוריה מבדיקה בזמן אמת?
הרצה היסטורית ותצפית בזמן אמת עונות על שאלות שונות. הראשון מראה כיצד האסטרטגיה עוברת עשרות אלפי עסקאות באופק ארוך, והשני — האם האות שורד עד לביצוע בפועל. במערכת הבקטסטינג של DeFi הם הולכים זה אחר זה, משום שהם אינם מחליפים זה את זה.
הרצה על היסטוריה נותנת סטטיסטיקה על מחזורי שוק שלמים: החלפת מגמות, ירידות ממושכות, התנהגות בנזילות דלילה. היא משוחזרת — אותה תצורה מריצים מחדש עם ספי סיכון אחרים ומשווים תוצאות.
נקודת התורפה — תנאים אידיאליים: העסקה נחשבת מבוצעת לפי מחיר מהבלוק, בלי תור הזמנות, החלקה ותחרות על נזילות. הפער מורגש במקומות שבהם התשואה תלויה בריביות ובעומק המאגרים — למשל ב-Aave.
מצב צל מכסה בדיוק את הפער הזה. האסטרטגיה מתחברת לזרם חי ומייצרת אותות, אך אינה שולחת עסקאות: רואים את ההשהיה בפועל בין האות לבלוק, את בניית השרשרת מחדש, ואת הרגעים שבהם הנזילות יוצאת מהמאגר. המחיר של הדיוק הוא זמן: מדגם מובהק נאסף במשך שבועות, ותרחישים נדירים נכנסים אליו בודדים.
בדיקה על נפח קטן — הצעד הבא, שבו נכנסים לפעולה כספים אמיתיים. היא מאשרת מחירי ביצוע בפועל, הוצאות על עמלות רשת, והתנהגות האסטרטגיה בעת כשלים ומילוי חלקי. הסיכון מוגבל לגודל הפוזיציה, ולכן הרצה כזו בטוחה לניפוי פרטים תפעוליים.
שורה תחתונה: ההיסטוריה עונה אם לאסטרטגיה יש יתרון; מצב הצל — האם האות מגיע לבלוק; נפח קטן — האם החישוב מתכנס עם המציאות. אנחנו מסדרים את השלבים האלה למחזור בדיקה אחד, כדי שהאסטרטגיה תעבור לנפח מלא עם סטטיסטיקה מובנת.
ספקות לגבי נתונים, נזילות ושחזור הרצות
לפני ההרצה הראשונה הלקוח רוצה להשתכנע שהמספרים בפלט בכלל אומרים משהו. לכן השאלות בדרך כלל אותן שאלות: מאין ההיסטוריה, כיצד נלקח בחשבון הביצוע והאם התוצאה תחזור מחר. להלן תשובות בלי מילים כלליות.
מאין מגיעה היסטוריית העסקאות וכיצד נבדקת איכותה?
אוספים נתונים מכמה מקורות בלתי תלויים ומשווים ביניהם: פערים בנפח ובמחיר לבלוק מסומנים, ולא ממוצעים בשקט. בנפרד מטפלים בבניות מחדש של השרשרת וב«חורים» בנזילות — אחרת בקטע חסר האסטרטגיה תציג עסקה שלא הייתה במציאות. עבור כל נכס נשמר דגל איכות, וההרצה יכולה להיעצר אם שיעור הנרות החשודים גבוה מהסף שהוגדר.
האם נלקחות בחשבון עלויות הביצוע ועומק המאגרים?
כן, וזה ההבדל המרכזי בין תוצאה יפה לתוצאה אמיתית. עמלות המאגר, מחיר הגז במועד העסקה וההחלקה מחושבים לפי העומק בפועל של המאגר המסוים, ולא לפי אחוז ממוצע בשוק. אם נפח העסקה עולה על הנזילות הזמינה לבלוק הזה, היא או מתפצלת לחלקים, או מסומנת כבלתי ניתנת לביצוע — היא לא נכנסת לדוח.
אפשר להריץ את המערכת על אסטרטגיה שכבר עובדת?
כן. אנחנו משחזרים את מצב הפוזיציות לתאריך הרצוי ומחשבים הלאה רק לפי נתונים חדשים, בלי לחשב מחדש את ההיסטוריה בדיעבד. כך רואים היכן העסקאות בפועל חורגות מהמחושבות, והפער הזה הוא האות המועיל ביותר בעת כיוונון כללים.
האם המספרים יחזרו אם מריצים את ההרצה מחדש?
ההרצה משויכת לתמונת מצב של הנתונים ולגרסת כללי הביצוע — כשהם תואמים, התוצאה זהה עד העסקה האחרונה. אם המספרים חורגים, סימן שאחד משלושת השכבות השתנה: נתונים, כללים או מקור האקראיות. אנחנו מקבעים את שלושתם, ולכן הפער תמיד ניתן להסבר, ולא מיוחס ל«השוק היה אחר».
נדון במשימה ונחזור עם הערכה ותוכנית הרצות
כדי שהערכת הפרויקט תישען על המערך שלכם, ולא על הנחות ממוצעות, אנחנו צריכים מינימום נתוני פתיחה. להלן מה שאנחנו מבקשים בהתחלה: לפי הסעיפים האלה אנחנו מחשבים את עומס העבודה והרכב הפרויקט, ולאחר מכן חוזרים עם תוכנית הרצות ומסירת המערך.
- גישה לנתונים. תצפיות עסקאות, תמונות מצב של מאגרים, היסטוריית ציטוטים — בצורת המקור ובתיאור השדות: מטבע החישוב, אזור זמן, יחידות מידה. כל פורמט קריא מתאים: קבצים עמודתיים, ייצוא ממסד נתונים, זרם מצומת.
- היקף ההיסטוריה. איזה אופק נדרש ואילו תקופות חובה — שוק שקט, התרסקויות, רגעים של נזילות נמוכה. מזה תלוי כמה תרחישים נכסה והיכן יופיעו חסרים בנתונים.
- לוגיקת האסטרטגיות. כללי כניסה ויציאה, חישוב גודל הפוזיציה, מועדי איזון מחדש, תנאי עצירה. ככל שהתיאור פורמלי יותר, כך נכניס פחות הנחות למודל.
- התחשבנות בעלויות. עמלות מאגרים, החלקה, עלות עסקאות, עיכוב ביצוע. בלי זה ההרצה מציגה תוצאה שלא הייתה בשוק האמיתי.
- תשתית והרשאות. היכן פורסים את המערך, אילו הרשאות נדרשות, האם יש מגבלות על הוצאת נתונים החוצה.
- קריטריוני קבלה. אילו מטריקות נחשבות מהימנות ומול מה משווים את החישוב — מול ההרצות הידניות שלכם או מול מקור בלתי תלוי.
- מסירת המערך. מה צריך להישאר אצלכם: תצורות הרצה, סכמת נתונים, הוראות שחזור וסדר הפעלה בלי השתתפותנו.
תארו את המשימה בצורה חופשית וצרפו את מה שכבר קיים אצלכם בנתונים. נחזור עם הערכת הפרויקט ותוכנית עבודה — לפי שלבים, לוחות זמנים והרכב המערך.







