בקטסטינג מול מסחר חי: למה התוצאות בפועל שונות
למה תוצאות מסחר חי שונות מבקטסט: מילויים, החלקה, עמלות, השהיה, איכות נתונים, הטיית מבט קדימה ושינויי משטר שוק - ואיך לבדוק נכון לפני שעולים לחי.
כמעט כל סוחר שבנה אסטרטגיה חווה את הרגע הזה: הבקטסט נראה מצוין, ואחרי כמה שבועות במסחר חי התמונה נראית אחרת לגמרי. זה לא בהכרח אומר שהאסטרטגיה גרועה. זה אומר שבקטסט הוא מודל של המציאות, ולכל מודל יש הנחות. במאמר הזה נעבור על המקורות העיקריים לפער ועל הדרך להקטין אותו.
מה בקטסט באמת מודד
בקטסט מריץ את כללי האסטרטגיה על נתוני מחיר היסטוריים ומחשב מה היה קורה אילו הייתם סוחרים לפיהם. ב-TradingView, למשל, ה-Strategy Tester עושה את זה עבור אסטרטגיות שנכתבו ב-Pine Script. התוצאה היא הערכה, לא הקלטה של העבר.
הבעיה היא שבקטסט "יודע" רק את מה שיש בנתונים שלו. אם הנתונים הם נרות של חמש דקות, הוא לא יודע מה קרה בתוך הנר. אם לא הגדרתם עמלות, הוא מניח שהמסחר חינם. אם לא הגדרתם החלקה, הוא מניח שכל פקודה מתמלאת בדיוק במחיר שביקשתם. כל הנחה כזו מטה את התוצאה לטובה.
מילויים והחלקה
זה המקור הגדול ביותר לפער אצל רוב הסוחרים.
- פקודות שוק מתמלאות במחיר הזמין הבא, לא במחיר שהיה על הגרף ברגע ההחלטה. ברגעי תנודתיות, כמו פרסום נתוני תעסוקה, ההפרש יכול להיות כמה טיקים.
- פקודות לימיט מבטיחות מחיר אבל לא מבטיחות מילוי. בקטסט רבים מניחים שאם המחיר נגע ברמה, הפקודה מולאה. בפועל, ייתכן שהייתם בסוף התור ולא קיבלתם מילוי - ודווקא בעסקאות שהיו הכי טובות.
- פקודות סטופ הופכות לפקודת שוק כשהן מופעלות, ולכן יכולות להתמלא רחוק מהרמה.
דוגמה היפותטית: אסטרטגיה שמבצעת 400 עסקאות בשנה על MNQ. אם כל עסקה סובלת בממוצע מטיק אחד של החלקה בכניסה וטיק אחד ביציאה, זה מצטבר ל-800 טיקים בשנה שלא הופיעו בבקטסט. על אסטרטגיה עם יתרון קטן, זה יכול להיות כל ההבדל. הרחבה במאמר החלקה ועלויות ביצוע.
עמלות, עמלות בורסה ודמי נתונים
כל עסקה בחוזים עתידיים נושאת עלויות: עמלת ברוקר, עמלות בורסה ורגולציה, ולפעמים גם דמי פלטפורמה. אסטרטגיות בתדירות גבוהה יחסית רגישות במיוחד. כלל אצבע פשוט: הגדירו בבקטסט עלויות שמרניות, גבוהות מעט ממה שאתם חושבים שתשלמו.
השהיה (Latency)
בין הרגע שהתנאי מתקיים לבין הרגע שהפקודה מגיעה לבורסה עובר זמן: הנר צריך להיסגר, ההתראה נשלחת, ה-webhook מתקבל ומעובד, והפקודה עוברת לברוקר. בדרך כלל זה עניין של שניות בודדות או פחות, אבל בשוק מהיר גם זה משמעותי. אסטרטגיה שמבוססת על כניסה בדיוק בסגירת נר תמיד תקבל בפועל מחיר שונה מעט.
איכות נתונים והטיות
- הטיית מבט קדימה (look-ahead bias): הקוד משתמש במידע שלא היה זמין ברגע ההחלטה. דוגמה קלאסית: החלטה על בסיס סגירת הנר, אבל כניסה במחיר הפתיחה של אותו נר. גם שימוש לא זהיר בנתונים מטיימפריים גבוה יותר יכול לגרום לזה.
- ציור מחדש (repainting): אינדיקטורים שמשנים את הערכים ההיסטוריים שלהם בדיעבד. על הגרף הסיגנל נראה מושלם; בזמן אמת הוא הופיע ונעלם.
- הטיית שורדים (survivorship bias): רלוונטית בעיקר למניות - בדיקה רק על נכסים ששרדו עד היום. בחוזים עתידיים הבעיה המקבילה היא גרפים רציפים (כמו NQ1!) שמחברים חוזים שונים ויכולים ליצור קפיצות מלאכותיות בימי גלגול.
- נתונים חסרים או שגויים: נרות חסרים, שעות מסחר שגויות או אזור זמן לא נכון.
שינויי משטר שוק
גם בקטסט מושלם מבחינה טכנית מתאר את העבר. שווקים עוברים תקופות של תנודתיות גבוהה ונמוכה, מגמה ודשדוש. אסטרטגיה שנבדקה בעיקר על שנה אחת עם אופי מסוים עלולה להתנהג אחרת לגמרי בתקופה הבאה. ככל שתקופת הבדיקה ארוכה ומגוונת יותר, כך התמונה אמינה יותר - אבל אף פעם לא מובטחת. בעיה קרובה היא התאמת יתר, שעליה כתבנו במאמר התאמת יתר באסטרטגיות מסחר.
בדיקה קדימה וסימולציה
הדרך הטובה ביותר לגשר על הפער היא שלב ביניים: הרצת האסטרטגיה בזמן אמת על חשבון סימולציה, עם אותו מנגנון ביצוע שתשתמשו בו בחי. זה נקרא forward testing או paper trading.
מה לבדוק בשלב הזה:
- האם ההתראות מגיעות בזמן ובפורמט הנכון?
- מה המרחק הממוצע בין מחיר הסיגנל למחיר המילוי?
- האם מספר העסקאות דומה למה שהבקטסט ציפה לו?
- האם יש עסקאות כפולות, חסרות או פוזיציות "יתומות"?
- האם ההתנהגות סביב פתיחת שוק, סגירה ופרסומי נתונים סבירה?
רשמו כל עסקה ביומן והשוו לבקטסט על אותה תקופה. הפער שתמדדו הוא נתון חשוב: אפשר להכניס אותו בחזרה לבקטסט כהנחת החלקה ריאלית.
דוגמה: טבלת השוואה בסוף שבוע סימולציה
דרך פשוטה לסכם את הבדיקה היא טבלה שמשווה את הבקטסט לסימולציה על אותה תקופה בדיוק. המספרים הבאים היפותטיים:
| מדד | בקטסט | סימולציה בזמן אמת |
|---|---|---|
| מספר עסקאות | 22 | 20 |
| עסקאות לימיט שלא מולאו | 0 | 3 |
| החלקה ממוצעת לעסקה | 0 טיקים | 1.5 טיקים |
| עסקאות שלא הופיעו בבקטסט | - | 1 |
כל שורה כאן מספרת סיפור. שתי עסקאות חסרות ושלוש פקודות לימיט שלא מולאו מרמזות שהבקטסט מניח מילוי אופטימי. עסקה שהופיעה רק בזמן אמת עשויה להעיד על אינדיקטור שמצייר מחדש, או על הבדל בנתונים. ההחלקה הממוצעת היא המספר שכדאי להכניס חזרה לבקטסט.
לבנות בקטסט שמרני יותר מראש
חלק מהפער אפשר לצמצם עוד לפני שלב הסימולציה, בהגדרות הבקטסט עצמו:
- הגדירו החלקה של לפחות טיק אחד לכל צד, ויותר באסטרטגיות שנכנסות סביב פרסומים.
- הגדירו עמלה לחוזה לפי הערכה שמרנית של העלויות שלכם.
- החמירו במילוי לימיט - אם הכלי מאפשר, דרשו שהמחיר יעבור את הרמה ולא רק יגע בה.
- בדקו על נתוני חוזה בודד בנוסף לגרף רציף, כדי לראות אם ימי גלגול משפיעים על התוצאות.
- ודאו שהחלטות מתקבלות רק על נרות סגורים, ושאין שימוש בנתונים מטיימפריים גבוה יותר לפני שהנר שלו נסגר.
בקטסט שמרני נראה פחות מרשים, אבל הוא מקטין את ההפתעה כשעוברים לזמן אמת.
ציפיות סבירות
- הניחו שהתוצאות החיות יהיו חלשות מהבקטסט, ותכננו לפי זה.
- אם האסטרטגיה רווחית רק בלי עמלות והחלקה, אין לה יתרון אמיתי.
- תקופת סימולציה קצרה לא מוכיחה כלום לכאן או לכאן; היא בעיקר בודקת את המנגנון.
- גודל הפוזיציה בתחילת המסחר החי צריך להיות קטן, ולגדול רק אחרי שהביצוע מתנהג כצפוי.
עיקרי הדברים
- בקטסט הוא מודל עם הנחות, וכמעט כל ההנחות מטות את התוצאה לטובה.
- החלקה, מילויי לימיט ועמלות הם המקורות הגדולים לפער.
- הטיית מבט קדימה וציור מחדש יכולים לייצר תוצאות שלא היו אפשריות בזמן אמת.
- בדיקה קדימה בסימולציה, עם אותו מנגנון ביצוע, היא שלב חובה.
- מדדו את הפער בפועל והכניסו אותו חזרה לבדיקות.
אם אתם מפעילים התראות מ-TradingView, WeCore מאפשרת לחבר אותן לחשבון שלכם ולהריץ אותן קודם במצב סימולציה, כדי לבדוק מילויים, תזמון וכללי סיכון לפני מעבר לחשבון חי. מידע נוסף על המושגים הבסיסיים במאמר מה זה מסחר אלגוריתמי.