בדיקה היסטורית יכולה לדווח על ביצוע במחיר שהשוק מעולם לא הציג. בדרך כלל הסימולטור הסיק ביצוע שנראה סביר מתוך נתונים חלקיים: השיא והשפל של נר, מחיר אמצע, או מחיר לימיט שבו עסקה אחת נגעה. כך יומן העסקאות נראה מדויק, אבל מסתיר מה השוק באמת הציע.
כדאי להתחיל בשאלה באיזה מחיר הפקודה שלכם הייתה יכולה להתבצע. נר של עסקאות אחרונות מראה אילו מחירים נסחרו במהלך פרק זמן. הוא לא אומר מה היו מחירי הקנייה והמכירה כשהפקודה הגיעה, כמה נזילות הייתה זמינה שם, או אם הפקודה שלכם הייתה יכולה להגיע לראש התור.
למה הבק-טסט שלי מציג ביצוע מחוץ למחיר השוק?
ראשית, חשוב להגדיר במדויק למה הכוונה ב״מחוץ״. ביצוע קנייה מתחת לשפל הנר או ביצוע מכירה מעל לשיא שלו הם טעות ברורה בחישוב או בתזמון. אבל גם ביצוע בתוך הטווח שבין השיא לשפל יכול להיות בדוי: ייתכן שהמחיר נסחר לפני שהפקודה נוצרה, בצד השני של המרווח, או בכמות קטנה מכדי למלא את הפקודה שלכם.
נניח שיש לנו נר של 1-minute עם פתיחה ב-100.00, שפל של 99.80 וסגירה ב-100.10. האסטרטגיה שלנו מזהה את הנר לאחר השלמתו, שולחת פקודת קנייה, והסימולטור מבצע אותה ב-99.80. ייתכן שהשפל הזה נרשם בתחילת הדקה, חמישים שניות לפני האות. הנר לא מוכיח שהמחיר 99.80 היה זמין אחרי קבלת ההחלטה.
| הנתונים שבידיכם | מה הם מוכיחים | מה הם לא מוכיחים |
|---|---|---|
| נר OHLCV | טווח מחירי העסקאות והנפח שנצפו במהלך פרק זמן | רצף המחירים, מחירי הקנייה והמכירה, או זמינות המחיר כשהפקודה מגיעה |
| דיווחי עסקאות | ביצועים שדווחו, עם חותמות זמן ומחירים | נזילות ממתינה בספר הפקודות או המיקום שלכם בתור |
| ציטוטים בראש ספר הפקודות | הצעת הקנייה והצעת המכירה הטובות ביותר שהוצגו בזמני הדגימה | עומק מעבר לרמה הטובה ביותר, או אם הציטוט נשאר זמין בין הדגימות |
| אירועים בספר הפקודות | שינויים בעומק המוצג ואירועים בתור, בכפוף לכיסוי של זרם הנתונים | נזילות מוסתרת, גישה לזירת המסחר או קדימות מובטחת |
סיבה שכיחה נוספת היא בלבול בין מחיר האמצע למחיר שניתן לבצע בו עסקה. אם הציטוט הוא 99.99 לקנייה ו-100.01 למכירה, קנייה במחיר האמצע של 100.00 נראית מסודרת בדוח. קנייה אגרסיבית תשלם בדרך כלל את מחיר המכירה, בתוספת השפעה אפשרית של גודל הפקודה. כשמכנים את מחיר האמצע מחיר ביצוע, מעלימים בשקט מחצית מהמרווח.
האם פקודת לימיט יכולה להתבצע רק מפני שהשוק נגע במחיר שלה?
נגיעה במחיר היא ראיה לכך שדווחה עסקה במחיר הלימיט. היא לא מוכיחה שהפקודה הממתינה שלכם הייתה מתבצעת. אם היו פקודות אחרות לפניכם, ייתכן שנפח העסקאות במחיר הזה לא הספיק כדי להגיע למיקום שלכם בתור. ייתכן גם שהעסקה דווחה בזירת מסחר אחרת, בזמן שהפקודה שלכם המתינה במקום אחר.
נניח שפקודת הקנייה שלנו בלימיט היא 50.00, והשוק סוחר ב-200 מניות במחיר הזה אחרי שאנחנו מציבים אותה. סימולטור שמסתמך על נגיעה ממלא את כל 500 המניות. מודל זהיר יותר בודק כמה נסחר במחיר 50.00 או במחיר טוב ממנו אחרי הגעת הפקודה, ואז מביא בחשבון את הכמות המשוערת שממתינה לפנינו בתור. בלי נתוני ספר פקודות ברמת הפקודה הבודדת, מיקום התור הוא הנחה. צריך להציג אותה בתוצאות, לא להגניב אותה פנימה כאילו הייתה ודאות.
במערכת מחקר קטנה, עדיף בעיניי להצהיר על ההנחה במפורש ולבדוק טווח אפשרויות, במקום להעמיד פנים שנתוני נרות חושפים את הקדימות בתור. הטווח המתאים תלוי בזירת המסחר, בגודל הפקודה ובתדירות המסחר של האסטרטגיה. מניה שקטה בפתיחה וחוזה קריפטו דליל בשעה 03:00 UTC מציבים בעיות ביצוע שונות.
איך לבחור מודל ביצוע לנתוני נרות?
התאימו את המודל לנתונים וגם לטענה של האסטרטגיה. בדיקה היסטורית שמבוססת על נרות עדיין יכולה לעזור באסטרטגיות איטיות, אבל הביצועים המדומים צריכים להתחשב במה שהנרות באמת מגלים.
- קבעו זמני החלטה והגעה. אם האות משתמש במחיר הסגירה של הנר, שלחו את הפקודה אחרי הסגירה. דמו את הביצוע על סמך פרק הזמן או הציטוט הזמין הבא, ולא לפי השפל הקודם שהופיע בנר שהושלם.
- השתמשו בצד הנכון של המרווח. בקניות אגרסיביות התחילו במחיר המכירה; במכירות, במחיר הקנייה. אם יש לכם רק נרות עסקאות, העריכו את המרווח ממקור נפרד או ציינו שהמודל מתעלם ממנו.
- הגבילו ביצועים לנזילות סבירה. החילו מגבלת השתתפות על נפח העסקאות שנצפה, וכללו עמלות והשפעת שוק. הנפח הכולל של נר לא אומר שכולו היה זמין במחיר שבחרתם.
- בדקו את ההנחות בתנאים מחמירים. השוו ביצועים בפתיחה הבאה עם החלקה שמרנית, ובדקו אם התוצאה מחזיקה מעמד גם בביצוע גרוע יותר. אל תכווננו את מודל הביצוע עד שהאסטרטגיה מנצחת.
אלה בחירות מידול, לא מתכון לשחזור הביצוע האמיתי היחיד מתוך נתונים חלקיים. אם האסטרטגיה תלויה בהשגת כמה נקודות בסיס, ייתכן שנתוני נרות אינם ראיות מספקות לטענה הזאת.
איך אפשר למצוא היכן הביצוע הבלתי אפשרי נכנס לבק-טסט?
עקבו אחר עסקה חשודה אחת מהאות ועד ליומן העסקאות. שמרו את חותמת הזמן של ההחלטה, את חותמת הזמן של שליחת הפקודה, את זמן ההגעה המדומה, את תצפית השוק שנבחרה, את מחיר הביצוע, את כמות הביצוע ואת העמלה כשדות נפרדים. אחר כך בדקו לפי הסדר:
- האם התכונה חושבה בעזרת נתונים מנר שעדיין לא הושלם בזמן קבלת ההחלטה?
- האם הביצוע השתמש בשיא, בשפל או בסגירה של הנר, אף שהמחיר הזה נרשם לפני שהפקודה הגיעה?
- האם פקודת קנייה הותאמה למחיר הקנייה, או פקודת מכירה למחיר המכירה?
- האם הכמות המדומה חרגה מגודל הציטוט הזמין או ממגבלת ההשתתפות של המודל?
- האם עיגול המחיר, גודל הטיק של החוזה והעמלות הוחלו אחרי בחירת מחיר הביצוע?
אם אי אפשר לענות על השאלות האלה מתוך רשומת העסקה, חסרות לבק-טסט ראיות על הביצוע. הוסיפו את השדות, שחזרו ידנית כמה עסקאות מול הנתונים הגולמיים, ובדקו שהביצוע המדווח היה אפשרי לפי המודל שהתכוונתם אליו. עקומת הון חלקה לא תחשוף מחיר שהיה קיים רק בתוך הסימולטור.
← כל הפוסטים


