למה אלגוריתם mean reversion נשבר בשוק החי
אלגוריתם mean reversion מבוסס על הנחה: המחיר נע סביב רמת שיווי משקל ובמוקדם או במאוחר חוזר אליה. כל עוד השוק נמצא בטווח, המודל עובד בצורה יציבה ומאומת על ידי ההיסטוריה.
הכול נשבר כאשר התכונות הסטטיסטיות של הסדרה משתנות: הממוצע, התנודתיות והאוטוקורלציה כבר אינם אלה שלפיהם חושבו הפרמטרים. זוהי אי-סטציונריות של המשטר — מגמה הופכת את אות החזרה לכניסה נגד התנועה, ורצף כניסות כאלה אוכל את התוצאה המצטברת.
אזור שני של ירידה הוא הביצוע. החלקה ומרווחים שמתרחבים אוכלים בדיוק את אותן נקודות בודדות שמהן מורכב הרווח של האסטרטגיה. בשוק עמוק ההשפעה אינה מורגשת, אבל כניסה ברגע של התרחבות תנודתיות יוצרת פער, והמחיר בפועל שונה מהמחיר המחושב. אם הנפח נצבר בחלקים, מתווספת שגיאה של ממוצע לפי הפוזיציה.
השהיית ציטוטים היא המקור השלישי. האות מחושב לפי תמונת מצב שכבר התיישנה עד להגעת הפקודה: המחיר מספיק לזוז, והכניסה מתבצעת גרוע מהמתוכנן. ככל שתדירות העסקאות גבוהה יותר, כך חלק גדול יותר מהרווח נשאר בפער הזה.
והרביעי — אותות שווא בטווח. בתנודתיות נמוכה הרעש פורץ את סף הכניסה, האסטרטגיה צוברת הרבה פוזיציות קטנות, ולאחר עמלות התוחלת שלהן נכנסת למינוס. בנפרד, פער בין ההיסטוריה לעסקאות אמיתיות: הרצת בדיקה מבצעת פקודות שבשוק החי לא מצאו צד שכנגד, ומציגה תשואה שלא הייתה. בהמשך נפרט כיצד מקטעים אלה נסגרים.
מה נותן קונטור מכויל: אפקט בגדלים מדידים
הקונטור מכויל לתוצאה מדידה: כל אחד מחמשת הגדלים שלמטה אנו מחשבים על ההיסטוריה ומאשרים על נתונים שהמודל לא ראה.
שיעור העסקאות הרווחיות
הכניסה נפתחת רק אם סטיית המחיר מהממוצע עולה על הסף ביחידות תנודתיות, ולא במחיר. סינון לפי נזילות חותך עסקאות שבהן העלויות אוכלות את היתרון.
עומק הדרודאון
גודל הפוזיציה מחושב מהתנודתיות וממגבלת הסיכון לעסקה, ולכן רצף הפסדים אינו הופך לדרודאון ללא מוצא. סטופ מוצב במקום שבו תרחיש החזרה לממוצע נשבר.
עלויות לעסקה
עמלה, מרווח והחלקה מופחתים מהמהלך הצפוי לפני ההחלטה על כניסה. אם היתרון קטן מעלות סבב, העסקה אינה נפתחת — הקונטור לא סוחר לשם פעילות ולא שוחק את התוצאה על עמלות.
זמן תגובה לשינוי משטר
שינוי מגמה וטווח מנוטר לפי הערכות נעות של תנודתיות ואוטוקורלציה. החשיפה מצטמצמת בתוך כמה נרות, ולא אחרי רצף הפסדים — הפיגור הזה אוכל רווח בפרמטרים שהותאמו למקטע היסטוריה קודם.
עמידות לתקלות בערוץ הנתונים
ניתוק הזרימה או פער בין הציטוטים לבין הביצוע אינם מובילים לסגירת פוזיציות בחירום. הקונטור מנהל ערוץ ראשי Binance וערוץ גיבוי, משווה נתונים, ועד לשחזור פועל במצב מוגבל: כניסות חדשות אינן נפתחות, והסיכון בפוזיציות פתוחות נמצא תחת שליטה.
מצבי עבודה: אותות זורמים, תיק, שליטה ידנית
מצב הביצוע הוא תוצאה של מבנה האסטרטגיה, ולא הגדרה «לפי הטעם». החזרה לממוצע רגישה לאופק: ככל שהחלון קצר יותר, כך האות מחושב מחדש לעתים קרובות יותר, וככל שהחמצה בנתונים יקרה יותר. למטה — שלושה קונטורים שביניהם באמת בוחרים בעת הטמעה.
| מצב | מתי מתאים | מגבלות |
|---|---|---|
| אותות זורמים, כלי אחד | זוג נזיל, מרווח צר, אופק קצר | חישוב מחדש בכל עדכון מחיר; רגיש להחמצות בזרימה ולהחלקה על ספר פקודות דק |
| מצב תיק, סל | כמה כלים מתואמים, שליטה כוללת בסיכון | חישוב מחדש לפי סגירת חלון הזמן: כניסות מהירות הולכות לאיבוד, אבל אין מרוץ אחר ביצוע בו-זמני |
| אישור ידני של עסקאות | הוצאת אסטרטגיה לקרב, כלים חדשים, רקע לא יציב | השהיה בין האות לעסקה: חלק מהכניסות יוצאות במחיר גרוע מהמתוכנן |
מגבלות לפי כלים מוגדרות בנפרד מהלוגיקה של הכניסה: חלק לכלי, מספר פוזיציות במקביל, גודל פקודה ביחס לנפח ספר הפקודות. תדירות חישוב האותות נשארת ניתנת לשליטה — מעדכון מחיר בזוג אחד ועד סגירת חלון זמן בסל — ומשתנה בלי לשכתב את המודל עצמו.
המעבר בין מצבים מתבצע בלי לשכתב את האסטרטגיה: תחילה קונטור חצי-ידני על סט מוגבל של כלים, אחר כך מצב תיק, ורק לאחר סטטיסטיקה יציבה — מצב זורם לפי זוגות בודדים.
כיצד אנו בונים אלגוריתם: מניתוח נתונים ועד הרצה
mean reversion נשען על הנחה שהמחיר סוטה מהממוצע וחוזר אליו. לכן כל המבנה נשען על איכות הנתונים ועל הערכה הוגנת של הסטייה: שגיאה בציטוטים או התאמת יתר של פרמטרים להיסטוריה הופכות את האסטרטגיה למחולל כניסות שווא. לכן אנו פועלים בשלבים, וכל שלב הבא מתחיל רק לאחר בדיקת הקודם.
- ביקורת נתונים ותשתיות. בודקים את עומק ההיסטוריה, החמצות וכפילויות, הסטות בתוויות זמן, חיבור חוזים בעת החלפת כלי, זמינות ממשקי הבורסה והשהיית הביצוע בפועל.
- סכימת אותות וסינונים. מגדירים מה נחשב סטייה מהממוצע, איזה חלון מיצוע ניקח, ואילו סינונים לפי תנודתיות ונזילות חותכים כניסות ברגעים שבהם החזרה אינה עובדת.
- אב-טיפוס. מרכיבים גרסה מינימלית של הלוגיקה ומחשבים תדירות אותות, עלויות והתפלגות התוצאה — לפני התאמת פרמטרים.
- בדיקה על היסטוריה ומחוץ למדגם. מכיילים על חלק אחד של הנתונים, בודקים על אחר שלא השתתף בכיול: בוחנים אם הפרמטרים נשמרים כאשר התקופה מוסטת.
- בקרת סיכונים וכללי סטופ. קובעים גודל פוזיציה, מגבלות לכלי ולתיק, סטופ לפי זמן החזקה ולפי גודל הסטייה, והגבלה על הדרודאון היומי.
- הרצה בנפח מוגבל. מוציאים את האסטרטגיה לנפחים מינימליים ומשווים ביצוע בפועל לביצוע המודלי: פער בהחלקה ובעמלות מראה היכן המודל סוטה מהשוק.
- מסירה. מוסרים קוד, קונפיגורציות, נוהל לבחינת פרמטרים מחדש, ניטור מדדים מרכזיים והוראות לעצירת האסטרטגיה.
ארטיפקטים של הפרויקט: קונפיגורציות, כללי סיכון, תיעוד
לאחר מסירת הפרויקט נשאר לצוות שלכם לא רק קונטור עובד, אלא גם סט מלא של תיעוד שלפיו אפשר לפתח ולתחזק את האסטרטגיה בלעדינו. כל ארטיפקט עונה על שאלה קונקרטית: כיצד לשחזר פרמטרים, מדוע האות הופעל, ומה יקרה בעת ניתוק החיבור לבורסה.
- קונפיגורציית עבודה של האסטרטגיה — הערכים הוצאו מהקוד לקובץ נפרד: חלון מיצוע, ספי כניסה ויציאה, גודל פוזיציה, צעד הצבת פקודות. החלפת מצב אינה דורשת בנייה מחדש, וכל שינוי מנוהל בגרסאות וניתן לחזרה.
- תיאור האותות — כלל מפורמל במילים ובנוסחאות: אילו סדרות ובאיזה אופק נחשבות, כיצד חותכים חריגים, איזו סטייה מהממוצע הנע נחשבת לכניסה, ובאיזה תנאי הפוזיציה נסגרת בחזרה לממוצע.
- נוהל בקרת סיכונים — מגבלות על פוזיציה ועל כלי, דרודאון מותר לסשן, סדר עצירת מסחר ברצף הפסדים, כללים להסרת מגבלות ידנית ומי רשאי לכך.
- סכימת זרימות נתונים — מקבלת ציטוטים ועד הצבת פקודה ורישום העסקה ביומן: היכן נמצא כל רכיב, איזו השהיה נחשבת מותרת, וכיצד המערכת מתנהגת בעת ניתוק הזרימה והתחברות מחדש.
- הוראות תחזוקה — הפעלה, עצירה מתוכננת, הפעלה מחדש לאחר תקלה, היכן לצפות ביומנים ובמדדים, כיצד לעדכן פרמטרים ולחזור לסט הקודם.
- פרוטוקול בדיקות — אילו תרחישים הורצו על נתונים היסטוריים ועל קונטור דמו, עם אילו הנחות לגבי עמלות והחלקה, ובאילו תנאים האסטרטגיה מחויבת לעצור.
- מפת תקלות — טבלת «סימפטום → סיבה → פעולה»: חוסר סנכרון של הפוזיציה עם הבורסה, כשל בממשק המסחר, חוסר במזומן למרג'ין.
הסט נמסר יחד עם הרשאות וניתוח בשיחת ועידה — המהנדסים שלכם יכולים לשחזר את חישוב האות ולשנות פרמטרים בלי לפנות אלינו.
מקרה בוחן: מדדים לפני ואחרי על תיק כלים חי
תיק של כעשרים כלים ב-Binance נוהל ידנית בידי סוחר: האות חושב לפי סטיית המחיר מהממוצע, אך הכניסה הייתה תלויה במהירות התגובה. את המדדים לפני ואחרי נמדד על אותו מקטע היסטוריה בדיוק — כך ההשוואה אינה נמרחת על ידי שינוי משטר שוק.
לפני: אותות ידניים ופער מצטבר
הפער בין מחיר העסקה המחושב למחיר בפועל הגיע עד לעשיריות האחוז: בזמן שהכניסה אושרה ידנית, הציטוט ברח, וחלק מהאותות אבדו כליל. דרודאונים קרו לעתים נדירות, אך כל אחד אכל כחמישית מהפיקדון — הפוזיציה מוצעה בלי מגבלה קשיחה.
עצירות כפויות תפסו רבע מימי המסחר, והסיבה לא הייתה השוק אלא טיפול בתקלות ועייפות; לאחר כל אחת מהן השחזור נמשך ימים.
אחרי: קונטור אחיד ועלויות צפויות
את הלוגיקה ריכזו לקונטור אחד: חישוב אות, בדיקת נזילות, מגבלה על פוזיציה, עצירה אוטומטית לפי דרודאון. הביצוע מתבצע בחלקים, ולכן הפער בין המחיר המחושב למחיר בפועל הצטמצם פי כמה והפסיק לכסות את התשואה הצפויה.
עומק הדרודאון מוגבל בסף — במקום חמישית מהפיקדון, כמה אחוזים; שיעור העצירות הכפויות ירד ליחידות אחוזים, וזמן השחזור לאחר תקלה — מימים לשעות.
כל החלטה נרשמת ביומן: פרמטרי האות, נפח, מחיר בפועל, סיבת היציאה. לפיו רואים היכן המודל טועה, והחזרה לסט הכללים הקודם אורכת דקות, ולא סשן מסחר חדש.
במה החזרה לממוצע שונה ממעקב אחר מגמה
החזרה לממוצע מרוויחה מסטיית המחיר מרמת שיווי המשקל ומההתכנסות לאחר מכן: בתשואות מופיעה אוטוקורלציה שלילית, והמרווח מתנהג בצורה סטציונרית. מעקב אחר מגמה הוא ההימור ההפוך: כניסה בפריצה והחזקת פוזיציה כל עוד התנועה המכוונת נמשכת.
משטר השוק קובע לאיזו גישה בכלל יש זכות לסחור. בטווח, כניסות מגמתיות אוספות פריצות שווא וסטופים קטנים, ובהאצה בלי תיקונים הקונטור החוזר מפסיד, כי רמת שיווי המשקל נעה יחד עם המחיר — אפקט זה מפורמל ב-Avellaneda–Lee.
| גישה | מצב עבודה | היכן מפסידה |
|---|---|---|
| החזרה לממוצע | טווח, מרווח סטציונרי | מגמה: הממוצע זז, סטופים מגיעים ברצף |
| מעקב אחר מגמה | פריצה לאחר התכווצות תנודתיות | ניסור ופריצות שווא |
| קונטור משולב | החלפת משטר לפי תנודתיות | שגיאת מסווג בגבול |
המשמעות של שילוב היא ביטול הדדי של שגיאות. הדרודאונים של הקונטורים מתרחשים בשלבים שונים של השוק, המתאם בין התשואות נמוך מאחת, ולכן העקומה הכוללת חלקה יותר ועומק הדרודאון קטן יותר מאשר בכל גישה בנפרד.
את המעבר בונים לפי תנודתיות וסטציונריות: מבחן סטציונריות למרווח, מדד הרסט, תנודתיות ממומשת והאחוזון שלה, זמן מחצית החיים של הסטייה.
כדי שהמסווג לא יתחלף בכל תנודה, מכניסים היסטרזיס ואישור לפי כמה נרות סגורים, וגודל הפוזיציה מותאם ביחס הפוך לתנודתיות — את הסיכון מחשב מודול אחד לשני הקונטורים.
ספקות טכניים: החלקה, נזילות, תקלות בערוץ
החלקה ונזילות נבדקות על פרוסות היסטוריות, אך סוג התקלות היקר ביותר הוא נתונים לא שלמים. כאשר זרם הציטוטים מגיע עם החמצות או השהיה, האלגוריתם ממשיך לחשב לפי מצב מיושן ומוציא אות במחיר שכבר אינו קיים.
לכן באלגוריתם mean reversion אנו מטמיעים שלושה קונטורי הגנה: בדיקת שלמות סדרת הקלט לפני כל חישוב, הגבלת תדירות עסקאות לכלי, ותיעוד החלטות — כל פעולה נרשמת יחד עם ערכי הקלט והסיבה להפעלה או לדחייה.
מה עושה האסטרטגיה בעת ניתוק ערוץ הנתונים?
הזרימה מסומנת כלא רלוונטית, והאלגוריתם עובר למצב התבוננות: פוזיציות פתוחות מוחזקות לפי כללי יציאה שהוגדרו מראש, עסקאות חדשות אינן נפתחות. לאחר שחזור הערוץ, החלון שהוחמץ נבדק מול מקור בלתי תלוי, ורק אז המסחר מתחדש.
כיצד בודקים עמידות לשינוי משטר שוק?
האסטרטגיה מורצת על מקטעים עם תנודתיות שונה ונזילות שונה, כולל קטעים של תנועות חדות. מסתכלים לא על התוצאה של תקופה מוצלחת אחת, אלא על פיזור התוצאות ועומק הדרודאונים: אם הפרמטרים הותאמו למשטר אחד, זה נראה מיד.
למה להגביל את תדירות העסקאות?
ההגבלה מגנה מפני רצף אותות שווא בשוק קרוע ומפני עליית עלויות בעמלות ובהחלקה. המגבלה נקבעת לכלי ולפרק זמן, והפעלתה נרשמת ביומן — לפיו רואים היכן האסטרטגיה נתקלה בתקרה והיכן עבדה כשורה.
מה נכנס ליומן ההחלטות?
ערכי הקלט ברגע החישוב, סימן שלמות הנתונים, גרסת הכללים, האות עצמו והסיבה לדחייתו אם העסקה לא נפתחה. זה מספיק כדי לשחזר את לוגיקת הפעולה בכל תקופה ולהבחין בין שגיאת אלגוריתם לשינוי בשוק.
נדון במשימה: כלים, אופק, כללי סיכון
כדי לחזור עם הערכה ותוכנית עבודה, ולא עם מילים כלליות, אנו צריכים נתוני פתיחה על המשימה שלכם. למטה — מה לשלוח: לפי נקודות אלה אנו מחשבים היקף, בוחרים חלון חישוב ומטמיעים את התנהגות האסטרטגיה בעלויות אמיתיות.
- כלים ופלטפורמות. היכן סוחרים — ספוט או שוק חוזים, אילו זוגות, דרך אילו ממשקי תוכנה מתבצעת הגישה והאם יש מגבלות על תדירות הפניות.
- נתונים. איזו היסטוריה נדרשת ומה כבר קיים: ייצוא או ערוץ זורם, אזור זמן של תוויות הזמן, עומק ושלמות הרשומות. אם ההיסטוריה חסרה, נציע מקור.
- אופק החזקה. זמן החיים האופייני של פוזיציה — דקות, שעות או ימים. מכך תלוי חלון חישוב הממוצע והשהיית הביצוע המותרת.
- מגבלות סיכון. גודל פוזיציה מקסימלי, דרודאון מקסימלי שבו האסטרטגיה נעצרת, מספר פוזיציות במקביל והתנהגות בעת ניתוק החיבור.
- עלויות ביצוע. עמלות הפלטפורמה, החלקה צפויה, צעד מחיר ונפח מינימלי — מטמיעים בבדיקה כדי שאותות לא «ייאכלו» על ידי הוצאות.
- נקודות חיבור לקונטור. כיצד האלגוריתם מקבל נתונים ושולח פקודות: חשבון נפרד, מפתחות עם הרשאות מוגבלות, והאם קיים קונטור בדיקה של הפלטפורמה.
- בקרה ודיווח. מה ברצונכם לראות ביומן: עסקאות, פקודות שנדחו, סיבת עצירת האסטרטגיה, ייצוא תוצאות לתקופה.
תארו את המשימה בצורה חופשית — אפילו בטיוטה. נבהיר את החסר, נחזור עם הערכה, תוכנית עבודה ורשימה של מה שנדרש מצדכם להרצה.







