פיתוח מערכת בקרת דרודאון מקסימלי (max drawdown control)

דרודאון אוכל רווחים כאשר מקבלים החלטות בעיניים עצומות. אנו מפתחים מערכות בקרת דרודאון מקסימלי מפתח ביד: מגדירים ספים, עצירה אוטומטית והתראות, כך שהסיכון נראה לפני שהוא הופך להפסד. ההגבלות מופעלות אוטומטית, וההחלטות מתקבלות על נתונים חיים.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1376
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1350
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    798
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1093
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1035
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1132

היכן נשבר הפיקוח על הנסיגה המקסימלית

פוזיציות פתוחות במספר מכשירים, מגבלת הסיכון לנסיגה של התיק מוגדרת, ואז השוק יוצא בתנועה אחת — בתוך דקות, בלי ריבאונדים ביניים.

ההגנה במקרה הזה מופעלת לא כשצריך: מחיר האורקל מגיע באיחור, מודול הסיכון מחשב את הנסיגה לפי תמונת המצב האחרונה שנשמרה, ופקודת סגירה בכפייה נכנסת לתור ומבוצעת כבר מעבר לגבול המגבלה. התוצאה — לא נסגרת פוזיציה אחת, אלא כל הסל, ולא לפי ההחלטה שלנו, אלא לפי זו של מישהו אחר.

השורש הוא שפיקוח על הנסיגה המקסימלית מוחזק מחוץ למחזור הביצוע: מוניטור נפרד סוקר את המצב במרווחי זמן, המגבלה נבדקת לפני העסקה אבל לא אחריה, ובין החישוב לביצוע אין אטומיות.

מספיקה תנועה חדה בשוק — וכל שלוש ההנחות נשברות בו-זמנית: האות מאחר, המגבלה מחושבת לפי נתונים מיושנים, ולמערכת המסחר אין מצב «השהיה» שאליו אפשר לעבור בבטחה. ב-Ethereum זה מחמיר מכיוון שסדר העסקאות והעמלות משתנים מהר יותר מהקצב שבו תמונת החישוב מספיקה להתעדכן.

עוד נקודת כשל שקטה — עיגולים וסליפג': המגבלה פורמלית לא נפרצה, אבל הנסיגה בפועל של התיק כבר מעבר לסף, מכיוון שבבדיקה לא נכלל מרווח לביצוע. הגרוע מכל הוא שתקלה כזאת לא משתחזרת בשוק רגוע ולא נראית בלוגים של מסחר שגרתי.

אנחנו מפרקים איך זה נסגר: מגבלת הנסיגה הופכת לאינווריאנט שנבדק לפני ואחרי כל שינוי בפוזיציה, עם מצב חירום נפרד ונוהל יציאה מוגדר מראש.

מה נותן פיקוח רציף על סיכון: האפקט במדדים

את הנסיגה מחשבים לא לפי תוצאות יום המסחר, אלא בכל עדכון של זרם העסקאות והציטוטים: התוצאה הממומשת מתווספת ללא-ממומשת, נלקחים בחשבון עומק ספר הפקודות וסליפג' צפוי. לכן זמן התגובה לסיכון מתקצר מדקות לשניות — הסף נבדק לפני שהפוזיציה תמשיך הלאה, ולא אחרי סגירת הנר.

שיעור ההפעלות השגויות של מגבלות יורד, מכיוון שהסף מחושב לפי הערכה מלאה של הפוזיציה, ולא לפי המחיר האחרון. בשוק דליל אנחנו מוסיפים החלקה לפי חלון ודרישת אישור: חריגה בודדת של ציטוט כבר לא עוצרת את האסטרטגיה, אבל פריצה אמיתית של המגבלה — עוצרת.

נעלם סוג שלם של כשלים — הפער בין החישוב לביצוע. קודם הנסיגה נפרצה בזמן שלוקח לתורן לשים לב לסטייה ולהציב פקודה ידנית; עכשיו הכלל מופעל באותו מחזור שבו הגיע העדכון, ולא נשארת פוזיציה לא סגורה ברגע הפריצה.

אוטומציה של פיקוח הסיכון מסירה מהמשמרת התורנית בדיקות שגרתיות: הכללים עצמם מביאים את הפוזיציה אל המגבלה, כותבים אירוע ליומן ושולחים התראה. האדם נשאר לאנומליות ולחקירת אירועים — שיעור המסלולים המכוסים בבדיקות עולה, ולא נשען על הזיכרון של תורן מסוים.

פורמטים לפיקוח על הנסיגה המקסימלית: ספים ועצירה אוטומטית

מגבלת הנסיגה היא לא מספר אחד, אלא מערכת של ספים שמשויכים לחלון מדידה. ספים רכים נותנים מרווח לתגובה, מגבלות קשיחות מכסות תרחיש שבו התגובה לא הספיקה. אם משאירים רק את הסף העליון, הוא מופעל או מאוחר מדי, או בתנודה רגילה של השוק.

האפשרויות נבדלות במי שמקבל את ההחלטה — מפעיל או קוד. תצפית והתראה משאירות את הבחירה לאדם, הגבלת נפח ועצירת מסחר אוטומטית מבוצעות דטרמיניסטית: הבדיקה נעשית לפי מחיר מהאורקל בכל צעד, וההפעלה לא תלויה בכך אם מישהו הספיק ללחוץ על כפתור.

מצב מתי מתאים מגבלות
תצפית כיול ספים על היסטוריה, איסוף סטטיסטיקה על האסטרטגיה לא חוסם דבר: ההפסד ממשיך להצטבר
התראה (סף רך) שלב מוקדם, תנודתיות גבוהה, צריך גמישות עובד עם משמעת של המפעיל, קל להתעלם ממנו
הגבלת נפח צמצום הדרגתי של הפוזיציה כשמתקרבים למגבלה מורכב יותר להגדרה, ייתכנו יציאות חלקיות לא משתלמות
עצירה מלאה קו קשיח במקום שבו מחיר הטעות גבוה מהרווח שהוחמץ נדרש אישור ידני לחזרה, מגיב להבזק קצר

בפועל את המצבים מגדירים כשילוב: תצפית לכיול, סף רך כהתראה, עצירה מלאה כקו קשיח. הספים נשמרים בקונפיגורציה של האסטרטגיה — משנים אותם בלי לבנות מחדש את הלוגיקה.

שלבי הטמעה: מביקורת זרמי נתונים ועד מסירה

העבודה מתבצעת ברצף: קודם מתעדים איך מעגל הסיכון בנוי כעת, אחר כך מעצבים את כללי הפיקוח על הנסיגה המקסימלית, ורק לאחר מכן כותבים קוד. סדר כזה מונע עבודות מחדש — כל החלטה הבאה נשענת על סכימה מאומתת של זרמי נתונים, ולא על הנחות לגביה.

ניתוח ותכנון

  1. ביקורת מעגל הסיכון. מפרקים מאיפה מגיעים המחירים, באיזו תדירות הם מתעדכנים, איפה בדיוק נקבעת כעת הנסיגה ואילו ספים הוגדרו ידנית.
  2. סכימת זרמי נתונים. מאחדים מקורות, מודולי חישוב ונקודות עצירה לתרשים אחד: רואים באיזה קטע נוצר עיכוב ואיפה הפיקוח מאבד עדכניות.
  3. תכנון כללים. מנסחים מה נחשב לשיא ההון, איך מחשבים את הנסיגה ומה קורה לאחר הפעלת הסף — השהיה, הקטנת פוזיציה או עצירה מלאה.

בדיקה ומסירה

  • כיול ותרחישי לחץ. מריצים צניחות חדות, ירידות ממושכות והדרגתיות וקרעים בנזילות: הכללים לא אמורים להגיב באופן כאוטי לכל תנודה.
  • בדיקה על היסטוריה. מחשבים מדדים על תקופות קודמות — כמה פעמים הופעל המעגל, מה שיעור העצירות השגויות, ועד כמה עמוק הצליחו להישאר בתוך הגבול שהוגדר.
  • מסירת המערכת. מוסרים נוהל ספים, יומני הפעלות והוראות לשינוי פרמטרים, ומלמדים את הצוות לשנות אותם בלי עריכות בקוד.

קונפיגורציות, מדיניות מגבלות ונוהלים במסירה

אנחנו מוסרים לא רק מעגל פיקוח עובד, אלא גם חבילת מסמכים שלפיה המערכת מתנהלת אחרי ההשקה. בלעדיה ספים של נסיגה מקסימלית משתנים «לפי הזיכרון», והפעלת ההגנה תלויה במי שנמצא היום במשמרת.

  • קבצי קונפיגורציה — ערכי סף לנסיגה לכל אסטרטגיה ומכשיר, קו בסיס לחישוב וחלון ממוצע. מקור אמת אחד במקום עריכות בקוד.
  • מדיניות מגבלות — שלוש רמות תגובה: התראה, הקטנה חלקית של הפוזיציה, עצירה מלאה. הרמות משויכות לעומק ולמהירות הנסיגה, ולא לספרה אחת.
  • מטריצת תפקידים — מי מגדיר ספים, מי מאשר שינוי בחתימה שנייה, מי רואה טלמטריה לקריאה בלבד. ההרשאות מופרדות בין מעגל הבדיקות למעגל העבודה.
  • סכימות זרמי נתונים — באיזו נקודה נלקח המדד, באיזה רגע מחשבת הנסיגה, באיזה ערוץ יוצא האות ומי מקבל אותו.
  • נוהל פעולות בעת הפעלה — תרחיש שלב-אחר-שלב למשמרת התורנית: מה לבדוק בדקות הראשונות, מי מקבל החלטה על עצירה ידנית, נקודת הסלמה ותקן זמן לתגובה.
  • סדר שינוי ספים — בקשה, בדיקת הערך החדש על נתונים היסטוריים, פריסה על מעגל מוגבל, רישום ביומן עם שם המחבר וההנמקה.
  • יומן ביקורת — נרשמים בו כל ההפעלות, ההתערבויות הידניות והעריכות של המגבלות. את ציר הזמן של האירוע משחזרים בלי לתשאל את המשתתפים.

מקרה בוחן: איך הסרנו סדרה של כשלי סיכון בשוק תנודתי

נקודת התחלה: הפיקוח היה קיים, אבל הגיב אחרי השוק

מעגל הסיכון חישב נסיגה מקסימלית לפי מחיר אחד מהמטמון הפנימי, שהתעדכן פעם בדקה. בתנועות חדות זה יצר השהיה: הסף הופעל אחרי השוק, ובדיקה ידנית של המהנדס התורן ארכה עד 15 דקות.

במהלך הרבעון הצטברו יותר מ-40 הפעלות, ו-6 מתוך 10 היו שגויות — המחיר הספיק לחזור, אבל הפוזיציות כבר נסגרו לפי מחיר השוק.

מה ארגנו מחדש

את המחיר אנחנו מרכיבים כחציון ממספר מקורות בלתי תלויים, ואת המגבלות מחשבים מחדש בכל בלוק, ולא לפי טיימר. מקור שסטה ביותר מהסף שהוגדר נופל מהחציון — חריגה בודדת כבר לא גוררת סגירה של התיק.

הספים והרכב המקורות מועברים לקונפיגורציה, ולכן המצב משתנה בלי עריכת קוד; יומן ההפעלות והסטיות לפי כל מקור נאספים ב-Grafana.

מדדים לפני ואחרי

שיעור ההפעלות השגויות ירד מ-6 מתוך 10 ל-1 מתוך 20. זמן התגובה: קודם עד 15 דקות של בדיקה ידנית, עכשיו החלטה אוטומטית תוך שניות. פוזיציות עדיין נסגרות בפריצה אמיתית של המגבלה — המנגנון לא כבוי, הוא просто הפסיק להגיב לרעש. סוג הכשל שכבר לא משתחזר — סגירה בשרשרת של התיק לפי מחיר מיושן של מקור אחד.

מה לעשות אם המגבלות מוגדרות אבל מופעלות מאוחר מדי?

לרוב הבעיה היא לא בכללים עצמם, אלא בצינור הנתונים: המגבלה מחושבת לפי תמונת מצב של הפוזיציה שמספיקה להתיישן. אם מצב התיק מגיע למנוע הסיכון דרך סקירה תקופתית, תור ביניים ואגרגציה מושהית, אז עד רגע החישוב השיא שנרשם כבר לא תואם את השוק. מכאן גם התגובה המאוחרת של המערכת — הסף פורמלית מוגדר נכון, אבל הכניסה אליו מאחרת.

הצעד הראשון — למדוד את ההשהיה לאורך כל השרשרת ולפרק אותה לשלבים: אישורים, קריאת מצב, אגרגציה של אירועים, חישוב מחדש של המדד. צוואר הבקבוק בנתונים הוא כמעט תמיד אחד ומקומי — רואים אותו בפער בין זמן האירוע לזמן שבו המדד התעדכן.

בשלב הבא מעבירים את הזרם לעיבוד רציף עם חותמת זמן של האירוע, ולא של רגע העיבוד. זה נותן סדר חישוב נכון כשמגיעים מנות מדביקות ומשלוחים חוזרים: שיא הנסיגה לא מונמך ולא מנופח בגלל כפילויות. מספיק רישום אידמפוטנטי וסינון כפילויות לפי מזהה העסקה — אין צורך לכתוב את המערכת מחדש כולה.

ורק אחרי זה יש טעם לכייל ספים. הסף משויך לחלון החישוב ולהשהיה בפועל של הזרם: מכניסים רמה מקדימה שמגבילה את עליית הסיכון, ורמה מאשרת שמופעלת בחריגה מתמשכת. היסטרזיס וזמן החזקה מסירים את הרעידה, והסלמה לפי רמות — מהתראה ועד צמצום כפוי של פוזיציות — הופכת את התגובה לצפויה.

ספקות טכניים: השהיות, הפעלות שגויות, כשלים

הדבר הראשון שבודקים לפני הפעלה — התנהגות המעגל בהשהיית נתונים. המחיר נלקח ממספר מקורות בלתי תלויים, ביניהם מחשבים פער, ולכל טיק יש חותמת זמן. אם הזרם באחד הערוצים נעלם או שהנתונים התיישנו יותר מהסף שהוגדר, ההחלטה מתקבלת לפי מקור גיבוי, ועצם הפער נרשם ביומן.

הפעלות שגויות נולדות לא מהלוגיקה, אלא מרעש בחלון קצר. לכן סף הנסיגה מחושב לפי ערך מאושר — עם חלון ממוצע ודרישה להחזיק את התנאי כמה דגימות ברצף.

לכל אסטרטגיה מוגדרת מערכת משל עצמה של ספים, חלונות וסיכון מותר, ועמידות המעגל בכשלים בנויה כך שנפילת המבצע לא משאירה את הפוזיציה בלי פיקוח.

מה יקרה אם זרם הציטוטים ייעלם לכמה דקות?

המעגל עובר למקור גיבוי, ואם גם הוא וגם המקור הראשי אינם זמינים — מעביר את האסטרטגיה למצב הגנתי: כניסות חדשות נחסמות, וליווי הפוזיציות הפתוחות ממשיך לפי הערך המאושר האחרון. החמצת הנתונים נרשמת עם זמן מדויק, כדי שאחרי שחזור הזרם אפשר יהיה לשחזר את ההחלטה ולנתח אותה.

איך מגדירים ספים שונים לאסטרטגיות?

סף, חלון אישור וכללים לצמצום חלקי של פוזיציה מתוארים בפרופיל נפרד לכל אסטרטגיה. הפרופילים מנוהלים בגרסאות: שינוי סף עובר בדיקה על נתונים היסטוריים ורק אחר כך נכנס לעבודה, והגרסה הקודמת נשארת זמינה לחזרה לאחור.

האם הפעלה שגויה יכולה לסגור פוזיציה לשווא?

קודם המעגל מופעל במצב תצפית — התנאים מחושבים, ההחלטות נרשמות ביומן, פקודות לא נשלחות. לפיו רואים כמה פעמים הסף היה מופעל ועל איזה רעש. אחר כך מכיילים חלון אישור שבו ההפעלות חלות על תנועות אמיתיות, ולא על רעש שוק.

מה עם כשלי חומרה, תקשורת והפעלות מחדש?

מצב האסטרטגיה וכל ההחלטות נשמרים ביומן, הפעולות אידמפוטנטיות — חזרה אחרי ניתוק לא תשלח פקודה שנייה. כשל של המבצע לא מכבה את פיקוח הנסיגה: המעגל עולה, משווה את הפוזיציה בפועל לזו המחושבת וממשיך מאותה נקודה. תורנות והתראות מוגדרות בנפרד, עם חקירת אירועים אחרי ההפעלה.

נדבר על המשימה: מה נדרש מכם ומאיפה נתחיל

כדי שאומדן הנסיגה המקסימלית יהיה מעשי ולא תיאורטי, אנחנו צריכים מינימום של נתוני מקור. אספו את מה שיש בהישג יד: לניתוח ראשוני מספיק תיאור גולמי — פרטים משלימים נשלים במהלך הדיון.

  • לוגיקת האסטרטגיה וכללי כניסה/יציאה: איך נפתחת פוזיציה ולפי איזה אירוע היא נסגרת.
  • רשימת נכסים, זירות וסגמנטים שבהם מתבצע המסחר — כולל החלפה ומשיכת כספים בין מעגלים.
  • כללי ניהול הסיכון הנוכחיים: מגבלות על פוזיציה, סף עצירה, מי משנה אותו ואיך.
  • מקורות נתונים: סדרות היסטוריות של עסקאות וציטוטים, עומק המדגם, תדירות, קיום חסרים וקרעים.
  • הרשאות לגישה ואינטגרציה: מפתחות לממשקי בורסה, לצמתי רשת ולמקורות נתונים חיצוניים — עם הפרדת הרשאות לפי סביבות.
  • דרישות מהמעגל: איפה אנחנו ממקמים את המערכת, האם נדרש בידוד, ואילו השהיות תגובה הן קריטיות.
  • קריטריוני קבלה: איזו התנהגות של המערכת אתם מחשיבים תקינה בתנועה חדה בשוק ובקרע בתקשורת עם הזירה.

נאסוף את זה יחד, נאמת את ההנחות לגבי הנתונים, ונחזור עם אומדן ותוכנית עבודה: סדר השלבים, מה אנחנו עושים, מה נשאר בצד שלכם, ואיפה נקודות בקרת התוצאה. תארו את המשימה — את השאר נדייק בניתוח.