שווקי חיזוי נראים כמו הדבר הקל ביותר בעולם לעשות לו בק-טסט. המחיר נע בין [0, 1]. התמורה היא דולר או כלום. אין מינוף, אין מימון, אין בסיס, ואין מוזרויות של סוואפ תמידי ב-00:00 UTC. כבר היה לנו בק-טסטר שטיפל בחוזים תמידיים בקריפטו, כולל עמלות, מימון והשפעת שוק, והתוכנית הייתה להשקיע יומיים בהתאמות ואז להתחיל לייצר אסטרטגיות.
זה לקח שמונה ימים. הנה יומן העבודה, פחות או יותר לפי הסדר, כולל היום שבו עקומת ההון נראתה מדהימה — והיא אכן הייתה מדהימה.
יום 1: המתאם שהיה אמור להיות פשוט
המיפוי הראשוני היה אחד לאחד ונראה נקי. שוק הוא מכשיר. מחיר YES הוא המחיר. קניית YES היא פוזיציית לונג, קניית NO היא שורט. ההכרעה היא סגירה כפויה במחיר 1.00 או 0.00. מזינים את סדרת המחירים השעתית לאותו לולאת אירועים, וזהו.
המיפוי הזה מחזיק מעמד בערך תשעים דקות במגע עם נתונים אמיתיים. הדבר הראשון שנשבר היה סדרת התשואות. כל שכבת הסיכון שלנו — גודל הפוזיציה, יעד תנודתיות, דיווח Sharpe — הניחה תשואות לוגריתמיות של מכשיר מתמשך. לשוק שיורד מ-0.04 ל-0.00 יש תשואה לוגריתמית לא מוגדרת, אבל הפסד כולל מוגדר היטב. ושוק שעומד על 0.04 שלושה ימים לפני ההכרעה הוא אובייקט שונה מהותית משוק שעומד על 0.04 ארבע דקות לפני כן, אף שבשתי השורות כתוב 0.04.
בסופו של דבר פרמטרזנו מחדש את כל הסדרה לפי הזמן שנותר עד להכרעה במקום לפי שעון הקיר, והתייחסנו ל-PnL כסופי ולא כמשוערך לשוק. זו הייתה ההחלטה הנכונה, והיא פסלה כל פיסת קוד דיווח שבאה אחריה.
יום 2: נוסחת העמלות היא האסטרטגיה
ב-Kalshi עמלת המסחר אינה קיצוץ של מספר נקודות בסיס. היא ריבועית ביחס למחיר: בערך 0.07 × contracts × P × (1−P), עם עיגול כלפי מעלה לסנט ברמת הפקודה. כלומר העמלה מגיעה לשיאה בדיוק במקום שבו שוק של הטלת מטבע הכי מעניין, וכמעט נעלמת בקצוות.
| מחיר | עמלה לחוזה | יתרון נדרש (נקודות הסתברות) | עמלה כאחוז מההשקעה |
|---|---|---|---|
| 5¢ | 0.33¢ | 0.33 | 6.7% |
| 10¢ | 0.63¢ | 0.63 | 6.3% |
| 25¢ | 1.31¢ | 1.31 | 5.3% |
| 50¢ | 1.75¢ | 1.75 | 3.5% |
| 75¢ | 1.31¢ | 1.31 | 1.8% |
| 90¢ | 0.63¢ | 0.63 | 0.7% |
| 95¢ | 0.33¢ | 0.33 | 0.35% |
חשוב לקרוא את העמודה השלישית: כדי להגיע לאיזון בקנייה במחיר 50¢ והחזקה עד להכרעה, הערכת ההסתברות שלכם צריכה לעלות על זו של השוק ב-1.75 נקודות. לא 1.75 אחוזים יחסיים. נקודות אחוז מוחלטות. אם יוצאים לפני ההכרעה במקום להחזיק, משלמים את העמלה פעמיים, נוסף על המרווח.
ה-CLOB של Polymarket התאפיין היסטורית בפרופיל עמלות שונה מאוד, קרוב לאפס על העסקה עצמה, כך שמלוא העלות עוברת למרווח ולעומק. לכן לאותה לוגיקת אסטרטגיה יש כלכלה שונה לחלוטין בכל זירה, וכל השוואה בין זירות שמשתמשת במודל עמלות אחד היא בדיה. עכשיו יש לנו פונקציית עמלה נפרדת לכל זירה, ולא ערך יחיד.
אם קוראים רק שורה אחת בדוח בק-טסט של שוק חיזוי, כדאי שזו תהיה שורת העמלות בנקודות הסתברות. אסטרטגיה שמתיימרת להשיג יתרון חיזוי של 1.2 נקודות בשווקים שמחירם 50¢ מפסידה ב-Kalshi עוד לפני כל עלות אחרת. העובדה הזאת צריכה להופיע בעמוד הראשון, בלי שהקורא יצטרך לגזור אותה בעצמו.
יום 3: ספר הפקודות הוא מדרגות, והוא קצר
מודל השפעת השוק שלנו היה פונקציית שורש ריבועי, מכוילת לספרי פקודות של חוזים תמידיים על BTC. הצורה הזאת שגויה. עם טיק של 1¢ במכשיר של $1, יש בספר רק 99 רמות מחיר אפשריות, ובשוק עם נזילות בינונית עשויים להמתין כמה מאות חוזים ברמה העליונה, ואז מגיע פער.
הנה תמונת מצב משוק נתונים כלכליים שדגמנו, בצד YES, כ-30 שעות לפני ההכרעה:
| רמה | גודל (חוזים) | עלות קנייה מצטברת |
|---|---|---|
| 42¢ | 310 | 310 @ ממוצע 42.0¢ |
| 43¢ | 85 | 395 @ ממוצע 42.2¢ |
| 45¢ | 140 | 535 @ ממוצע 42.9¢ |
| 49¢ | 600 | 1,135 @ ממוצע 46.1¢ |
פקודה של 1,000 חוזים — סיכון של חמש מאות דולר, טעות עיגול בקריפטו — מזיזה את המחיר האפקטיבי בארבעה סנטים. ארבעה סנטים הם יותר מפי שניים מהעמלה. אין כאן פונקציה חלקה שאפשר להתאים; צריך לעבור בספר רמה אחר רמה, אחרת ממציאים מספרים. מחקנו את מודל השורש עבור סוג הנכס הזה וכתבנו סורק ספר פקודות ישיר, שהוא איטי יותר ונכון.
באיזשהו שלב תפסתי את עצמי מתעצבן על כך שהשווקים האלה "קטנים מדי מכדי לעניין". הם קטנים כי מתמחרים בהם שאלה אחת מהעולם האמיתי, עם מועד אחרון, ויש רק מספר מוגבל של אנשים עם דעה על תביעות ראשוניות לדמי אבטלה בארה"ב ביום רביעי. הגודל הוא השוק. להתלונן על זה דומה להתלונן שבשולחן פוקר יש מקום רק לתשעה.
יום 4: היום שבו עקומת ההון הייתה יפהפייה
Sharpe של 4.1 על 1,400 שווקים. חלקה. כל חוקר אמור להרגיש שהבטן שלו צונחת למראה כזה, וכך קרה גם לי — בסוף, בערך ארבעים דקות אחרי שכבר צילמתי את המסך.
הבאג היה בדוגם מחדש. היסטוריית המחירים בשווקים לא נזילים חוזרת עם חותמות זמן לא סדירות, ולכן מיפינו אותה לרשת שעתית אחידה. הנקודה האחרונה בכל סדרה שמורה היא ערך הסליקה, 1.00 או 0.00. פעולת המיפוי מחדש השתמשה במילוי לפי השכן הקרוב בלי הגבלה על כיוון, ולכן בכל שוק שהעסקה האחרונה בו התרחשה שעות לפני ההכרעה, ערך הסליקה זלג לאחור לאורך הפער. המודל קרא את התשובה של מחר בשורה של היום, דווקא בשווקים הלא נזילים שבהם יכול היה להגדיל את הפוזיציה בלי להיתקל במגבלות עומק.
מילוי לפי השכן הקרוב מתאים למכשיר רציף. במכשיר שבו התצפית האחרונה היא האמת עצמה, הוא הופך למכונת הצצה לעתיד. עכשיו אנחנו מוודאים שכל מילוי נעשה קדימה בלבד, וששורת הסליקה מסומנת ומוחרגת מכל חישוב של תכונות. הבדיקה הזאת כוללת תשע שורות, והיא הקוד בעל הערך הגבוה ביותר שכתבנו כל השבוע.
ימים 5–6: 1,412 שווקים, בערך 180 הימורים
גודל המדגם בשווקי חיזוי הוא מלכודת עם חזות ידידותית. מגיעים להכרעה ב-1,412 שווקים, מרגישים שיש 1,412 תצפיות, ומחשבים בהתאם סטטיסטי t. אבל ארבעה עשר משחקי NFL באותו יום ראשון חולקים מערכת מזג אוויר, פרסום דוחות פציעות וזרם משותף של מהמרים. חמישים ואחד שווקי בחירות ברמת המדינה חולקים תנודה לאומית אחת. "האם X יקרה עד 31 במרץ" ו"האם X יקרה עד 30 ביוני" הם אותו הימור עם מועדי פקיעה שונים, וההכרעה בהם מתרחשת יחד.
קיבצנו שווקים לפי מקור האירוע הבסיסי ותאריך ההכרעה, ומצאנו מספר אפקטיבי של תצפיות בלתי תלויות באזור 180. זה לא מספיק כדי להבחין בין יתרון אמיתי לרעש בגדלי האפקט שבדקנו, ושום כמות של Bootstrap לכל שוק לא מתקנת זאת, כי הדגימה מחדש צריכה להתבצע באשכולות ולא בשורות. טעות כזאת מנפחת בשקט את המובהקות פי שניים או שלושה.
יום 7: גם להכרעה יש התפלגות הסתברותית
הדברים שלא מידלנו כלל, וגילינו בדרך הקשה:
- הכרעה מוקדמת. שוק בנוסח "עד 31 בדצמבר" יכול להגיע להכרעה כבר ב-4 באוגוסט, כשהאירוע אכן מתרחש. ההון משתחרר מוקדם יותר, ותקופת ההחזקה מעולם לא הייתה כפי שהשתמע משם החוזה.
- מחלוקות. בשווקים שמוכרעים על ידי אורקל יש חלון לערעור. פוזיציה יכולה להישאר תלויה באוויר ימים לאחר האירוע, ובמקרים מעטים התוצאה מתהפכת בניגוד לקריאה המתבקשת.
- ביטולים. נתוני מקור עמומים מובילים לביטול השוק ולהחזר כספי לכולם. במדגם שלנו מדובר בפחות מ-1% מהשווקים, אבל הביטולים מתרכזים בדיוק בשאלות העמומות שמודל מזהה כמתומחרות באופן שגוי.
- נעילת הון. יתרון של 3 נקודות שממומש במשך 90 ימים ויתרון של 3 נקודות שממומש במשך 6 שעות אינם בני השוואה, ובק-טסט שמדווח על היתרון הכולל בלי מכנה של זמן-הון תמיד יעדיף את האפשרות האיטית.
הוספנו לסימולטור רכיב של עלות החזקה והטיה אקראית של תאריך ההכרעה. אף אחד מהם אינו מדויק. שניהם עדיפים על ההנחה הסמויה שההכרעה מתרחשת בדיוק בתאריך הנקוב ובוודאות.
יום 8: על מה היינו מדלגים ומה היינו עושים קודם
- דלגו לגמרי על התשתית המבוססת על תשואות. אל תתאימו שכבת סיכון שמכוונת תנודתיות למכשיר עם תמורה סופית. כתבו שכבת קביעת גודל הימור שמדברת בהסתברויות ובסכומי השקעה. איבדנו יומיים בניסיון להתאים את השכבה הישנה.
- בנו את פונקציית העמלות לפני האסטרטגיה. הציגו את עקומת היתרון הדרוש לאיזון בכל זירה שבה אתם מתכוונים לסחור, ותלו אותה מעל שולחן העבודה. כך נפסלות כמחצית מהרעינות עוד לפני שהם עולים לכם בהרצת בק-טסט.
- עברו על ספר הפקודות מהיום הראשון. כל מודל פרמטרי להשפעת שוק שיובא משוק רציף יהיה שגוי באופן שמחמיא לתוצאות שלכם.
- קבצו לפני שאתם סופרים. החליטו מה יהיה מפתח הקיבוץ לחישוב גודל המדגם האפקטיבי במקביל להחלטה על יקום הנכסים, ולא אחרי שמצאתם ערך Sharpe שאתם אוהבים.
- בדקו את כיוון המילוי. שורה אחת לכל פעולת צירוף. אם סדרה מסתיימת באמת ידועה, התייחסו למילוי לאחור כבאג מעצם הגדרתו, במקום לקוות שתבחינו בו בבדיקה.
שמונת הימים היו שווים את זה, בעיקר כי שווקי חיזוי מסירים את העמימות שהופכת בק-טסטים בקריפטו לכל כך קלים להטעיה עצמית. אין שיעור מימון שאפשר לנפנף בו, ואין מוסכמת מחיר סימון שאפשר להתווכח עליה. יש רק שאלה, מועד אחרון ותשובה. כשהבק-טסט שגוי כאן, אפשר להצביע בדיוק על הטעות.
← כל הפוסטים


