Smart order routing: היכן הזמנות מאבדות בגלל פיצול הנזילות
הזמנה גדולה כמעט לעולם אינה מוצאת את כל הנפח בספר הזמנות אחד. הנזילות מפוזרת: חלק עומד בבורסות מרכזיות, חלק בבריכות נזילות של פלטפורמות מבוזרות, וחלק מוצב על ידי מרקט-מייקרים. לכל מקור יש עומק משלו, ספרד משלו וכללי ביצוע משלו.
פיצול הנזילות כשלעצמו אינו הבעיה — הבעיה היא שהמסלול נבחר אחד: מתוך הרגל, לפי הציטוט העליון הטוב ביותר או לפי הפלטפורמה המוכרת ביותר. המערכת רואה רק את הנפח שמונח במקור הנבחר, ושולחת לשם את ההזמנה כולה.
מכאן שני סוגי הפסדים. החלקת מחיר: כל רמה עוקבת בספר ההזמנות יקרה יותר מהקודמת, ומחיר העסקה הממוצע סוטה מזה שנראה ברגע קבלת ההחלטה. ביצוע חלקי: העומק של הפלטפורמה נגמר לפני הנפח, והשארית שלא הושלמה או מוחזרת, או יוצאת לשאילתה חוזרת כבר בשוק שהשתנה.
מכאן האפקט מצטבר. הזמנות חוזרות מתחרות זו בזו וגם באלגוריתמים זרים, ואובדן הנפח של ההזמנה גדל באופן לא-ליניארי: ככל שהגודל גדול יותר, כך גרוע יותר התוצאה של בחירה בפלטפורמה אחת.
Smart order routing סוגר בדיוק את הפער הזה — המסלול נבנה באופן דינמי, ממספר מקורות, בהתאם לנפח מסוים ולמצב הנוכחי של ספרי ההזמנות. להלן נפרט כיצד זה בנוי וממה תלוי איכות הביצוע.
מה משתנה לאחר הטמעת ניתוב הזמנות
הדבר הראשון שניכר כבר ביממה הראשונה לאחר הפעלת הניתוב — שיעור הביצוע. ההזמנה מפסיקה לצאת לפלטפורמה אחת שנבחרה מראש: האלגוריתם מעריך את הנפח הזמין בכל אחת ומפזר אותה בחלקים, ולכן נפח שקודם לכן נותר לא מבוצע או בוטל ידנית, נסגר באותו מחזור.
האפקט השני — מחיר הביצוע הממוצע. הנתב משווה לא רק את הציטוט הטוב ביותר, אלא גם את עומק השוק בכל רמה, את העמלות ואת ההחלקה הצפויה, ומפצל הזמנה גדולה כך שלא ירוקן ספר הזמנות אחד. לאורך זמן זה מזיז את המחיר הממוצע קרוב יותר לאמצע השוק ומסיר תשלומי יתר חד-פעמיים ברמות דקות.
השלישי — עמידות בפני כשל של פלטפורמה בודדת. אם החיבור נקטע, זמן התגובה גדל או העומק הזמין יורד, המסלול נבנה מחדש למקורות גיבוי, והשארית שלא בוצעה מועברת לשם תוך שמירה על התנאים המקוריים של ההזמנה. כשל של פלטפורמה אחת מפסיק להיות אירוע הדורש התערבות ידנית.
הרביעי — עלויות צפויות. ככל שהנפח מופץ מדויק יותר, כך פחות העברות נגדיות בין פלטפורמות והמרות ביניים, וההוצאות על תנועת כספים מפסיקות להיות תלויות במי ובאיזה סדר הציב הזמנות ביד.
בהמשך המדדים מתייצבים: שיעור הביצוע והמחיר הממוצע מפסיקים להיות תלויים בכך שלפלטפורמה מסוימת «התמזל המזל» באותו רגע. מופיעה יכולת תצפית — עבור כל הזמנה רואים את המסלול הנבחר ואת סיבת הבחירה, ולכן שינויים בכללים נבדקים על היסטוריה, ולא על תחושות בטן.
מצבי routing: ספר הזמנות, בריכות נזילות, היברידי
תבניות הביצוע נבדלות לא בקיומו של ספר הזמנות או בריכות נזילות, אלא במי שמחזיק את ההזמנה ברגע העסקה וכיצד מתחלק הנפח. מכך תלויים ההחלקה, מספר המילויים החלקיים, וכיצד המתאר מתנהג כאשר אחת הפלטפורמות מפסיקה להגיב.
להלן — אפשרויות עבודה שביניהן בוחרים בעת תכנון הנתב. איננו קובעים תבנית מראש: תחילה בוחנים היכן עומדת הנזילות ועד כמה צפוי זרם ההזמנות הנגדיות, ורק אחר כך מציעים מתאר.
| תבנית | מתי מתאימה | מגבלות |
|---|---|---|
| פלטפורמה אחת | הנזילות מרוכזת במקום אחד, הנפחים קטנים | נקודת כשל אחת, עם גידול ההזמנה גדלה ההחלקה |
| פיצול ההזמנה | הזמנה גדולה מול ספר הזמנות דק | הקטעים יוצאים במחירים שונים, נדרש פיקוח על מילויים חלקיים וחזרות |
| חוזה-נתב | מספר בריכות נזילות במתאר אחד | אטומיות רק בתוך המתאר, המסלולים מתעדכנים לפי אישור המפעיל |
| התאמה פנימית עם גידור | זרם ההזמנות הנגדיות של לקוחות יציב | הטיית הפוזיציה העצמית: נדרשים מגבלות סיכון וגידור לכל זוג |
| היברידי | חלק מהנפח נסגר מבפנים, השארית יוצאת החוצה | יותר מצבי הזמנה, קשה יותר לנתח ביצועים לפי יומנים |
| ביצוע בין-רשתי | הנזילות מפוזרת על פני מספר רשתות | השהיית מעבר, סיכון להעברה לא מושלמת, פער ביתרות |
האפשרויות משולבות: חוזה-נתב בדרך כלל משלים את פיצול ההזמנה, וההתאמה הפנימית פועלת מעל ההיברידי.
הטמעת אלגוריתם הניתוב: שלבי העבודה
ניתוב אינו נכתב «בוואקום»: תחילה יש להבין היכן בדיוק הולך לאיבוד מחיר הביצוע. בפתח — מטרה להפחית את ההחלקה ואת עלות המעבר בספר ההזמנות תחת מגבלת זמן נתונה לעסקה. להלן שבעה שלבים, שכל אחד מהם מסתיים בארטיפקט שאפשר לבדוק ולהעביר לצוות שלכם.
- ביקורת פלטפורמות ומודלי ביצוע. אוספים את מצבי הצבת ההזמנות, כללי הביטול, המגבלות, ההתנהגות בעת ניתוק חיבור — ומתעדים אילו מקורות נזילות באמת זמינים.
- תרשים כללי בחירת המסלול. מתארים את סדרי העדיפויות: מחיר, נפח זמין, הסתברות ביצוע, השהיית התגובה של הפלטפורמה. הכללים מסוכמים בכתב לפני שורת הקוד הראשונה.
- אב-טיפוס של הליבה. מודול לפיצול הזמנה גדולה לחלקים ולחישוב מסלול מחדש בכל שינוי בספר ההזמנות.
- אינטגרציות. מודל אחיד להזמנה ולעסקה, טיפול במילויים חלקיים, בניסיונות חוזרים ובכשלים של פלטפורמה.
- בדיקה על נתונים היסטוריים. הרצה על זרמי ציטוטים מוקלטים והשוואה לאסטרטגיית בסיס: החלקה, שיעור ההזמנות שבוצעו, התנהגות בשוק דק.
- מנגנוני הגנה וניטור. מגבלות על גודל הפוזיציה וקצב ההצבה, ניתוק אוטומטי של המסלול בסטיית מדדים, יומן החלטות שהתקבלו.
- מסירה לתפעול. תצורה, תיעוד הכללים, תקנון שינויים והדרכת הצוות שלכם.
ארטיפקטי האספקה: ליבת הניתוב, תרשיםים, תקנונים
איננו מוסרים דוח, אלא מתאר עובד של ניתוב הזמנות חכם, שהצוות שלכם ממשיך להפעיל בלעדינו. הקבלה מעשית: מהנדסי הלקוח בונים בעצמם את הליבה מהמאגר ומשנים את כללי המסלול במתאר ניסויי — אם זה מצליח בלי רמז, האספקה הושלמה.
- קוד המקור של ליבת הניתוב ובנייה משוחזרת: מאגר, תלויות, בדיקות לתרחישים של נזילות נמוכה וכשל פלטפורמה.
- תרשים מסלולים: גרף של פלטפורמות וצימודים, סדר פיצול הנפח, סדרי עדיפויות ותנאי מעבר בין מסלולים.
- תצורות חיבורים: פרמטרים של סשנים, מגבלות על נפח ותדירות הפניות, התנהגות בעת אי-זמינות מקור.
- מדיניות הרשאות ומפתחות: תפקידים, הרשאות לעריכת מסלולים, סבב מפתחות, הפרדת סביבות ביצוע.
- תיעוד האלגוריתם: קריטריונים לבחירת מסלול, מגבלות המודל, מפת מדדים ופרשנות סטיות.
- תקנון ניטור: רשימת מדדי איכות הביצוע, ספי התראות, פעולות תורנות.
- תקנון נסיגה: ניהול גרסאות של כללים, חזרה למערך מסלולים קודם, סדר הוצאת פלטפורמה מפעילות.
הכול נמסר יחד עם ניתוח על הנתונים שלכם: היכן צווארי הבקבוק, אילו ספים הוצבו ומדוע. מכאן, הוספת פלטפורמות ועריכת מסלולים מתבצעות אצלכם, בלי לפנות אלינו על כל איטרציה.
מקרה בוחן: ניתוב זרם הזמנות בין שש פלטפורמות
הלקוח — מרקט-מייקר שהחזיק זרם הזמנות בשש פלטפורמות. לפני ההטמעה הנתב נבחר ידנית בידי מפעיל: השווה טבלאות נזילות, החליט לאן לשלוח את הנפח, ובשוק תנודתי ההחלטה הזו פיגרה אחרי המחיר. חלק מהנפח נותר לא מבוצע, והעסקאות יצאו במחיר גרוע במידה ניכרת מהיעד.
אנחנו הרכבנו ספר הזמנות אחיד מכל שש הפלטפורמות ולימדנו את האלגוריתם לפזר את הנפח לפי הנזילות הזמינה, תוך התחשבות בעמלות, בהשהיית התגובה ובסיכון לביצוע חלקי. החיבורים עוברים דרך שערי FIX — זה נותן זרם אירועים אחיד ויומן מסלולים: פלטפורמה, משקל, סיבת הבחירה.
כשל של פלטפורמה מטופל באופן שגרתי — המשקל שלה מתפזר מחדש בין הנותרות בתוך מחזור אחד, בלי התערבות ידנית.
מדידות לפני ואחרי
| מדד | לפני | אחרי |
|---|---|---|
| שיעור הנפח שבוצע | 61% | 94% |
| סטיית המחיר הממוצע מהיעד | 11 נ"ב | 3 נ"ב |
| כשל של פלטפורמה אחת | מעבר ידני, השבתה של עד 15 דקות | חלוקת משקל מחדש, השבתה לא מתועדת |
| ניתוח עסקה שנויה במחלוקת | התאמה ידנית, שעות | רשומה ביומן המסלולים, דקות |
את שתי המדידות ביצע הלקוח בעצמו, בתקופות שונות ובמערכי מכשירים שונים, תוך השוואה של יומן המסלולים עם ייצוא ממערכות המסחר. שתיהן נתנו כיוון זהה: שיעור הביצוע עלה, הסטייה מהיעד הצטמצמה, ונפילה של פלטפורמה אחת חדלה להיות תקרית — ההזמנות עברו לנותרות, ואיכות הביצוע לא נפגעה.
לפי אותן מדידות ניכר גם לאן עבר צוואר הבקבוק: לא עוד בחירה ידנית של פלטפורמה, אלא שלמותם וטריותם של נתוני הקלט על הנזילות.
במה נבדל הנתב מפיצול פשוט של ההזמנה
פיצול הזמנה הוא אריתמטיקה שנקבעה מראש: הנפח מתחלק לחלקים ומפוזר בין הפלטפורמות לפי כלל קבוע. הנתב מחשב את המסלול מחדש בכל צעד: לפני שליחת החלק הבא הוא קורא מחדש את מצב ספר ההזמנות ובריכות הנזילות, וגם את עלויות העברת הכספים בין הפלטפורמות.
ההבדל המרכזי הוא בתגובה לשינוי בעומק השוק. רשת סטטית אינה יודעת שהנזילות בפלטפורמה השנייה ירדה: היא תמשיך לשלוח לשם חלקים ותאסוף ביצוע ברמות המחיר הגרועות ביותר. מסלול דינמי בודק את העומק בכל רמה, משווה אותו לסף הנזילות ומעביר את השארית למקום שבו היא תיסגר כולה, בלי החלקה.
הגורם השני — עלויות וסיכון אי-ביצוע. העברת כספים בין פלטפורמות אורכת זמן ועולה בהוצאות רשת, וחלק מהנפח עלול להישאר לא מבוצע. הנתב פוסל אפשרויות שבהן הרווח במחיר אינו מכסה את עלויות ההעברה, ומחלק את השארית כך שכל חלק ייכנס לעומק הזמין.
חישוב המסלול מחדש מתרחש לאחר אישור כל חלק, ולא פעם אחת בפתח. לכן נפח נגדי שהגיע תוך כדי התהליך או עזיבת נזילות מהפלטפורמה משנים את השארית, ולא שוברים את כל ההזמנה.
ניתוח ענפי ביצוע הזמנות גדולות בפלטפורמות מבוזרות מאשר: דווקא חישוב מחדש צעד-אחר-צעד מניב יתרון בנפחים השווים לעומק השוק.
בנפחים קטנים שנכנסים לרמת המחיר הראשונה, ההבדל בין הגישות כמעט אינו מורגש. בגדולים — נבדלים שיעור הנפח שבוצע, סטיית המחיר הממוצע מהמחושב, ושיעור ההזמנות שנסגרו חלקית.
שאלות טכניות: השהיות, ביצועים חלקיים, כשל פלטפורמה
הנתב פועל במקום שבו חלק מהתגובות מגיע מאוחר מהנדרש, וחלק לא מגיע כלל. להלן — ניתוח הספקות שעולים לרוב בתכנון smart order routing.
מה עושים אם השהיית התגובה של הפלטפורמה גדלה?
המסלול נבנה תוך התחשבות בטריות הציטוט: תמונות מיושנות נפסלות, אחרת הרווח במחיר יתגלה כמדומה. על ההמתנה לתגובה מוצבת מגבלה — אם הפלטפורמה לא עמדה בה, ההזמנה עוברת למסלול הבא.
כיצד מטופלת שארית ההזמנה בביצוע חלקי?
השארית אינה נשלחת בעיניים עצומות: המסלול מחושב מחדש לפי העומק הזמין, והנפח מתפצל בין הפלטפורמות. אם הנזילות מוצתה, השארית או מבוטלת, או מוצבת כחלק לימיט במחיר נתון.
מה קורה בעת אי-זמינות של פלטפורמה?
הפלטפורמה נבדקת לפני שליחת ההזמנה, ולא אחרי. ברצף שגיאות היא מוצאות אוטומטית מהמסלול לזמן מה, הזמנות תלויות מבוטלות, והזרם עובר דרך הכיוונים שנותרו.
האם נלקחות בחשבון עלויות העברת כספים בין פלטפורמות?
אנחנו מחשבים לא רק את העמלה, אלא גם את זמן ההעברה ואת הסיכון שהיא לא תגיע. אם העלויות אוכלות את פער המחיר, מסלול דרך אותה פלטפורמה אינו נשקל כלל.
עד כמה קשה להטמיע זאת במערכת שכבר פועלת?
הנתב מתחבר לשער שלכם דרך מתאם, ומתאר המסחר והחשבונאות נשארים כשהיו. מפעילים בשלבים: תחילה חלק מהזרם, עם אפשרות להחזיר את העיבוד למתאר הקודם.
מה נדרש להתחלה וכיצד נחזור עם הערכה
לצורך הערכת אלגוריתם smart order routing נדרש ההקשר שלכם, ולא משאלות כלליות: בלי נתוני קלט כל תוכנית שלבים הופכת לניחוש. להלן — מה שמספיק להעביר בשלב הראשון. אם חלק מהמידע קיים רק בראש של הסוחר או ביומנים ישנים — ננתח זאת יחד.
- רשימת הפלטפורמות והמכשירים שביניהם יש לפזר הזמנות, כולל אלו שמתוכננים להתחברות.
- כללי הביצוע הנוכחיים: כיצד נבחר המסלול כעת — ידנית, בסקריפט או בשירות חיצוני — ומה בדיוק בהם אינו מתאים.
- מדדי איכות הביצוע שאתם רואים כנורמה: שיעור ההזמנות שבוצעו, סטיית המחיר מהמצופה, הזמן מההחלטה ועד העסקה.
- מגבלות סיכון: מגבלות לפלטפורמה ולמכשיר, התנהגות בביצוע חלקי, מה לעשות בעת אי-זמינות של אחד הכיוונים.
- אופי זרם ההזמנות: תדירויות, גדלים אופייניים, התפלגות לאורך הזמן — זה קובע עד כמה מהיר צריך להיות חישוב המסלול.
- דרישות לתצפיתיות: אילו אירועים ומדדים צריך לראות בזמן אמת, ומה לשמור לניתוח תקריות.
- מסגרות תשתית: היכן האלגוריתם יפעל, אילו הרשאות וסביבות כבר קיימות, מי אחראי לתפעול לאחר ההשקה.
מכאן הסדר הוא כזה: דנים במשימה, לומדים את החומרים שהועברו, בודקים הנחות מפתח על נתונים היסטוריים. אחר כך חוזרים עם הערכה, תוכנית שלבים והיקף העבודות — עם חלוקה ברורה של מה שאנחנו מכסים ומה שנשאר בצד שלכם.







