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







