ביום שלישי, בשעה 08:00 UTC, זירת מסחר בקריפטו שינתה את גודל הטיק בחוזה תמידי שמחירו בינוני. אסטרטגיית הבסיס שלנו לא הבחינה בכך. האות שלה עדיין ראה את אותו מרווח בין ספוט לחוזים עתידיים, מגבלות הסיכון נותרו ללא שינוי, והבדיקה ההיסטורית המשיכה להציג את אותן תוצאות.
המסחר המדומה הבחין בכך במקומה. מתאם הפקודות עיגל פקודת קנייה לימיט כלפי מטה למחיר המותר הקרוב ביותר. כך הפקודה הוצבה טיק אחד מתחת לרמה שהבדיקה ההיסטורית דימתה. השוק נגע במחיר הישן, הפקודה המדומה נרשמה כמבוצעת, ואילו הפקודה במסחר המדומה נותרה ללא ביצוע. עד ארוחת הצהריים, המלאי של האסטרטגיה כבר היה לא מאוזן.
התקרית נראתה כמו באג קטן בעיגול. למעשה, זו הייתה בעיה בגבול שבין המודלים: האסטרטגיה הכירה את המחירים, אבל הבדיקה ההיסטורית לא הכירה את רשת המחירים של זירת המסחר.
סחרנו לפי אות בסיס פשוט: קנינו ספוט ומכרנו חוזה תמידי כשהפרמיה בחוזים העתידיים התרחבה מעבר לסף מסוים. הפקודות היו פסיביות, כי יתרון הבסיס הצפוי היה קטן. הפרש של כמה טיקים יכול היה לקבוע אם הכניסה תניב מספיק כדי לכסות את העמלות ואת היציאה העתידית.
מה השתנה כשגודל הטיק השתנה?
לפני העדכון, החוזה התמידי קיבל מחירים במרווחים של 0.01. אחריו הוא קיבל מחירים במרווחים של 0.05 בטווח המחירים הרלוונטי. האות חישב יעד מכירה של 42,318.03, מחיר תקף לפי הכלל הישן. לפי הכלל החדש, המחיר הזה לא היה תקף.
הבורסה דחתה מחירים לא תקפים, אבל למתאם שלנו הייתה ברירת מחדל: הוא עיגל את מחיר המכירה כלפי מטה ל־42,318.00. גם המחיר הזה לא היה תקף. ברירת מחדל שנייה עיגלה שוב, הפעם ל־42,318.05, מחיר תקף אך פחות אגרסיבי עבור מוכר. כבר אי אפשר היה למכור את הפקודה במחיר שהמודל הניח. נתיב הקוד נכתב עבור שוק אחר, והמיר בשקט דחייה לתמחור מחדש של הפקודה.
הפקודה האחת הזאת העלתה שתי שאלות שונות. ראשית, איזה מחיר זירת המסחר רשאית לקבל? שנית, איך האסטרטגיה צריכה להגיב כשהמחיר הרצוי שלה אינו נמצא על הרשת? הבורסה עונה על השאלה הראשונה. על השנייה צריכה לענות האסטרטגיה או מדיניות הביצוע.
| כוונת הפקודה | כלל הרשת | כיוון העיגול המקובל | מה עשוי להשתנות |
|---|---|---|---|
| פקודת קנייה לימיט | המחיר חייב להיות כפולה של גודל הטיק | כלפי מטה, כדי להישאר בגובה מגבלת המחיר או מתחתיה | סיכוי נמוך יותר לביצוע |
| פקודת מכירה לימיט | המחיר חייב להיות כפולה של גודל הטיק | כלפי מעלה, כדי להישאר בגובה מגבלת המחיר או מעליה | סיכוי נמוך יותר לביצוע |
| פקודת לימיט סחירה | חייבת לעמוד גם בגבולות המחיר | תלוי במחיר המרבי המתקבל | האם הפקודה חוצה את המרווח |
אין כלל עיגול שנכון תמיד. עיגול מחיר קנייה כלפי מטה שומר על מגבלת המחיר של הקונה, אך עשוי להקטין את הסיכוי לביצוע. עיגול כלפי מעלה עשוי להפוך את הפקודה לסחירה, ולשנות את העמלות ואת ההשפעה על השוק. עבור כניסת הבסיס הפסיבית שלנו, שינוי שקט של הפקודה היה התנהגות שגויה. האסטרטגיה בחרה יעד; המתאם שינה את הכלכלה שלו.
למה הבדיקה ההיסטורית עדיין נראתה תקינה?
סימולטור הפקודות ההיסטורי שלנו התייחס למחירי לימיט כמספרים רציפים. אם השפל של הנר הגיע למחיר הקנייה, או שהשיא הגיע למחיר המכירה, הוא ספר את הפקודה כמבוצעת. זו כבר קירוב נדיב לפקודה פסיבית, כי מחיר שנסחר בגבול הלימיט לא אומר דבר על המיקום בתור. אבל עדכון גודל הטיק חשף בעיה בסיסית יותר: הפקודה כלל לא הייתה יכולה להתקיים במחיר הזה.
שחזרנו את אותן החלטות כשהרשת החדשה נכנסת לתוקף במועד שנקבע לה. כמה ביצועים נעלמו. כמה פקודות עוגלו למחירים שחצו את המרווח, ולכן חויבו בעמלות taker במקום בעמלות maker. מסלול הפוזיציה שנוצר היה שונה, ולכן השתנו גם הגידורים והיציאות המאוחרים יותר. כלל שנראה כמו מטא־נתון שינה את רצף העסקאות כולו.
והעדכון לא היה הפתעה שהסתתרה בתרשים. זירת המסחר פרסמה שינוי בכללי המכשיר עם חותמת זמן לתחילת תוקף. שמרנו בקפידה את נתוני השוק, אבל המטא־נתונים של המכשירים חיו במטמון שהתעדכן בעת ההפעלה. הבדיקה ההיסטורית קראה את הכללים של היום לכל תאריך היסטורי; במסחר המדומה הכללים היו מיושנים עד להפעלה מחדש של התהליך. אף אחת מהסביבות לא ייצגה את מה שזירת המסחר התירה בכל רגע נתון.
איך צריך לדמות שינויי גודל טיק בבדיקה היסטורית?
נהלו גרסאות של כללי המכשיר עם מרווחי תוקף, כמו כל קלט אחר שתלוי בנקודת זמן. לכל הפחות, שמרו את מועד תחילת התוקף ואת ערכי הכללים הדרושים לאימות פקודה: גודל הטיק, מדרגת הכמות, הכמות המזערית וכל טווחי המחיר. הסימולטור צריך לטעון את קבוצת הכללים שהייתה זמינה בזמן ההחלטה המדומה.
לאחר מכן, הפכו את הטיפול בפקודות למפורש. אם מחיר יעד אינו תקף, דחו אותו, עגלו אותו לפי מדיניות מתועדת, או חשבו מחדש את היעד על הרשת. תעדו מה קרה. בדיקה היסטורית שמתקנת אוטומטית כל פקודה עשויה לעזור באמידת מדיניות ביצוע מסוימת, אבל אסור לה להסוות את המדיניות הזאת כאילו הייתה ביצוע בבורסה.
בפקודות פסיביות, מחיר תקף לפי גודל הטיק הוא רק התנאי הראשון לביצוע. עדיין צריך מודל שיבדוק אם השוק נסחר מעבר למחיר שלך, מה היה מיקום התור לפניך, אילו ביטולים התרחשו ומה הייתה מדרגת העמלות שהיית זכאי לה.
הוספנו שתי בדיקות. הראשונה מעבירה כל פקודה שנוצרת דרך כללי המכשיר שהיו תקפים באותה נקודת זמן, ונכשלת מיד כשמחיר או גודל אינם תקפים. השנייה משווה בין הפקודה הסופית לאחר נרמול במתאם של הבדיקה ההיסטורית ובמתאם של המסחר המדומה: צד, מחיר, כמות, תוקף הפקודה וכוונת העמלות. אם יש ביניהן הבדל, הריצה אינה נחשבת בת־השוואה.
אחר כך שחזרנו את שינוי יום שלישי. הבדיקה ההיסטורית כבר לא טענה שהיו ביצועים במחיר 42,318.03 אחרי עדכון הרשת. המסחר המדומה והסימולציה קיבלו אותה החלטה לגבי כל יעד לא תקף, גם כשההחלטה הייתה לדלג על הפקודה.
האות לא התקלקל. ההנחות שלו לגבי הנכס שאפשר לסחור בו כבר לא היו מעודכנות. אסטרטגיה יכולה להסתגל לגודל טיק חדש, אבל רק אם מערכת המחקר מתייחסת לכללי זירת המסחר כחלק מהשוק שהיא מדמה.
← כל הפוסטים


