בשעה 10:14 UTC, אסטרטגיית פריצה פשוטה קנתה חוזה perpetual בקריפטו לאחר שהמחיר חצה את השיא של 20 הדקות האחרונות. הבקטסט הציג ביצוע במחיר $64,210. המספר הזה הופיע בנתונים, אות המסחר קיבל חותמת זמן נכונה, והפקודה המדומה הגיעה בנר הבא. כמעט קראנו לזה תוצאה נקייה.
ואז השווינו את מזהי המכשירים. האות הגיע מחוזה perpetual של BTCUSDT. הביצוע הגיע מחוזה הפוך של BTCUSD. שניהם נסחרו בסביבות $64,210, ושניהם היו שווקים נזילים. אבל אלה עדיין היו ספרי פקודות שונים, עם מחירים, גדלי טיק, עומק ולוחות עמלות שונים. הבקטסט חיבר יחד שוק שאף סוחר לא יכול היה לגשת אליו.
האסטרטגיה עצמה הייתה שגרתית: להיכנס בסגירה מעל השיא המתגלגל, לצאת בסגירה מתחת לשפל המתגלגל, ולקבוע את גודל כל פוזיציה לפי סיכון כספי קבוע. הבעיה התגלתה רק כששאלנו שאלה מדויקת יותר מ״כמה היה שווה BTC?״ שאלנו: ״מה הפקודה הזאת הייתה יכולה לקנות בחוזה הספציפי הזה, באותו זמן?״
הגרף כבר היה מורכב ממקורות שונים עוד לפני שהאסטרטגיה רצה
פיד המחקר שלנו הקל על השוואה בין זירות מסחר. הוא האחיד סמלים והציג סדרת מחירים מצרפית. זה היה נוח להתבוננות בשוק, אבל לא התאים לשמש כאסמכתה לביצוע. סדרה מצרפית יכולה להציג את המחיר הטוב ביותר בין בורסות, אף שהאסטרטגיה יכולה לשלוח פקודה לזירה אחת בלבד.
בזמן הפריצה, השיא של הנר בסדרה המצרפית היה $64,205. העסקה האחרונה בחוזה שנבחר כבר התבצעה במחיר $64,218. בינתיים, ציטוט שמור במטמון של החוזה ההפוך עדיין הציג מחיר מכירה של $64,210. הסימולטור השתמש בפריצה מסדרה אחת ובמחיר המכירה האטרקטיבי מסדרה אחרת. כל אחד מהנתונים היה אמיתי. השילוב ביניהם היה בדוי.
| קלט | במה השתמש הבקטסט | מה הפקודה דרשה |
|---|---|---|
| שיא הפריצה | מחיר BTC מצרפי | היסטוריית המחירים של החוזה שנבחר |
| אסמכתה לכניסה | מחיר המכירה השמור במטמון של החוזה ההפוך | מחיר מכירה עדכני של המכשיר שבו בוצעה העסקה |
| כמות הביצוע | גודל הפוזיציה המבוקש | הכמות הזמינה בכל רמת מחיר |
שורה אחת בטבלת נתוני שוק יכולה להיראות שלמה, אף שהשדות בה מתארים שווקים שונים. כינוי של סמל אינו מוכיח שלשני מכשירים יש ספר פקודות משותף. מזהה החוזה, הזירה, מטבע הציטוט וחותמת הזמן צריכים להישמר יחד לאורך יצירת האות וביצוע העסקה.
הרצנו מחדש את הפקודה מול ספר הפקודות
הרצנו מחדש את הכניסה באמצעות מחיר המכירה הטוב ביותר של חוזה ה-perpetual שנבחר ועדכוני ספר הפקודות שהיו זמינים בזמן קבלת ההחלטה. הציטוט היה עדכני, אבל ברמה העליונה היו רק 0.18 BTC. הפקודה המדומה שלנו הייתה על 0.50 BTC. יתרת 0.32 BTC הייתה חוצה לרמות מחיר מכירה גבוהות יותר.
מחיר הכניסה המתוקן היה גרוע ב-$21 לכל BTC מהמחיר שהוצג בבקטסט, עוד לפני עמלות. בעסקה בודדת זה פער קטן. אבל לאורך הבדיקה, האסטרטגיה הפיקה את רוב הרווח הגולמי שלה מקומץ פריצות מהירות. שחזור הכניסות מול ספרי הפקודות הנכונים צמצם את התוצאה הגולמית ב-31%; עמלות taker והשפעת המחיר צמצמו אותה עוד יותר.
מצאנו גם שני מקרים שבהם ציטוט המחיר העליון בספר הפקודות הגיע אחרי מועד ההחלטה של האות. בקטסט שמחבר לפי חותמת הזמן הקרובה ביותר עלול לבחור בשקט עדכון עתידי. כעת אנחנו מחברים לאחור: הציטוט חייב להיות כזה שנצפה עד למועד שליחת הפקודה, ואנחנו מתעדים את גילו. אם הציטוט העדכני ביותר שניתן להשתמש בו ישן מדי, הסימולטור מסמן שלא ניתן למלא את הפקודה או מפעיל כלל מפורש לטיפול בנתונים מיושנים.
מה נדרש כדי שמחיר יהיה בר־מסחר
מחיר סגירה של נר שימושי לחישוב אות. הוא לא מוכיח שפקודה מסוימת הייתה יכולה להתבצע במחיר הזה. לשם כך, המחיר חייב להשתייך למכשיר ולזירה המדויקים, להיות זמין בזמן הגעת הפקודה, ולהציע כמות מספקת בצד הנגדי לגודל המבוקש. כשהנתונים לא מאפשרים לענות על השאלות האלה, התוצאה ההוגנת היא טווח או היעדר ביצוע, ולא מחיר מדויק מומצא.
השארנו את הסדרה המצרפית לצורך הקשר שוק, והסרנו אותה ממסלול הביצוע. האותות מתבססים כעת על ההיסטוריה של החוזה שנבחר; הפקודות משוחזרות מול ספר הפקודות של אותו חוזה, והעמלות והכמות מובאות בחשבון לאחר חישוב הביצוע. נדרשו עוד כמה חיבורים, ועקומת ההון מחמיאה לנו הרבה פחות.
הפריצה הזאת אכן התרחשה. הבקטסט פשוט נתן לה שוק טוב יותר מזה שהאסטרטגיה בחרה.
← כל הפוסטים


