בוט מסחר ספוט: היכן הלוגיקה נשברת ומדוע עסקאות הולכות לאיבוד
בוט מסחר ספוט נשבר לא במקום שבו מחפשים אותו בדרך כלל. האסטרטגיה יכולה להיות נכונה מתמטית, אך העסקאות הולכות לאיבוד במפגש עם הבורסה: בין רגע חישוב האות לרגע הביצוע בפועל חולפות עשרות מילישניות, שבמהלכן ספר הפקודות מספיק להתארגן מחדש.
בדיוק בפער הזה נוצר החלקת מחיר — הבוט שולח פקודה לפי ציטוט אחד, אך היא מבוצעת לפי אחר, ובסדרה של מאות עסקאות הפער אוכל את כל התשואה המחושבת של האסטרטגיה.
סוג שני של כשלים — חוסר סנכרון של ספר הפקודות. הבוט מחזיק עותק מקומי של ספר הפקודות ומעדכן אותו בזרם הנתונים מהבורסה, אך בעת ניתוק החיבור או החמצת חבילת נתונים העותק מתפצל מהמציאות. הבוט ממשיך לחשוב שיש נזילות ברמה הנדרשת, שולח בקשה — ומקבל ביצוע חלקי או סירוב.
גרוע מכך כאשר חוסר הסנכרון אינו מורגש: הלוגיקה פועלת על נתונים מיושנים ומקבלת החלטות שהן הפסדיות בשוק האמיתי.
כשל שלישי — פקודות תקועות. הבקשה נשלחה לבורסה, אך האישור לא חזר: הרשת נתקעה, הבורסה החזירה timeout, החיבור נקטע באמצע התשובה. הבוט אינו יודע אם העסקה בוצעה, ולכן או משכפל את הפקודה, או מאבד את הפוזיציה מעיניו.
ללא התאמת מצב מול הבורסה עבור כל פקודה, "רוחות רפאים" כאלה מצטברות ומעוותות את חשבונאות הפוזיציות.
קטגוריה נפרדת — סירובים בעומס שיא. ברגעים של תנועות חדות בשוק הבורסה חותכת את קצב הבקשות ומחזירה שגיאות מגבלות, וזמני התגובה גדלים פי כמה. בוט שאינו מותאם לכך, או מציף את הבורסה בבקשות ומקבל חסימה, או קופא בהמתנה ומפספס את חלון הכניסה.
אנו מפרקים כיצד זה נסגר: פקודות אידמפוטנטיות עם מזהים ייחודיים, התאמת פוזיציות תקופתית מול הבורסה, בקרת החלקה לפני השליחה ותור בקשות בהתחשב במגבלות.
מה נותן בוט שתוכנן נכון: אפקטים מדידים
בוט מסחר ספוט שתוכנן למשימה משנה לא את ה"נוחות", אלא מאפיינים מדידים של המסחר: שיעור ההוראות שהוצאו לפועל, זמן התגובה לאירוע שוק וסוגי הכשלים שהמערכת עוברת ללא התערבות ידנית. להלן חמישה כיוונים שבהם מדדים אלה משתנים לאחר עיבוד מחדש של ליבת הביצוע ושכבת העמידות.
שיעור העסקאות שהוצאו לפועל
ההיגיון של הצבת הוראות והצבתן מחדש נבנה סביב ספר ההוראות האמיתי, ולא סביב המחיר האידיאלי מהחישוב. הבוט מתחשב בביצועים חלקיים, מחשב מחדש את היתרה ואינו משאיר הוראות "תלויות" שמעוותות את הפוזיציה. בפועל שיעור העסקאות שהושלמו עולה, והפער בין מחיר הכניסה המתוכנן לזה שבפועל מצטמצם.
זמן התגובה של הבוט
עיבוד נתוני השוק ושליחת ההוראה מופרדים לפי עדיפויות: המסלול הקריטי אינו ממתין לרישום ביומן, לניתוח ולכתיבה לבסיס הנתונים. התגובה לשינוי מחיר או לביצוע הופכת לצפויה — ללא קפיצות ברגעי פעילות גבוהה. זה משפיע ישירות על השאלה אם הבוט מספיק להיכנס במחיר שהוא ראה.
סוגי כשלים והטיפול בהם
אנו מפרידים בין תקלות לפי טבען: כשל בממשק הבורסה, פסק זמן ברשת, הוראה שנדחתה, חוסר סנכרון בין המצב המקומי למצב הבורסה. לכל סוג — תרחיש משלו: ניסיון חוזר בהשהיה, ביטול והצבה מחדש, התאמת פוזיציה. חלק מהכשלים שבעבר עצרו את המסחר מכבים כעת באופן אוטומטי.
עמידות תחת עומס
כשמספר הכלים ותדירות האירועים גדלים, הבוט אינו מדרדר: התורים אינם גדלים ללא גבול, צריכת המשאבים נשארת בטווח, וההשהיות אינן מתפשטות. אנו בודקים זאת בהרצות עומס על זרמים היסטוריים וסינתטיים, ולא רק בשוק רגוע.
יציבות המסחר
התוצאה — התנהגות צפויה של האסטרטגיה: תנאי שוק זהים נותנים תוצאה דומה, ואינם תלויים במידת ההצלחה של צירוף המקרים של רגע ההפעלה. אנו עובדים על תשתית מקצועית, ולכן הלקוח מקבל תוצאה יציבה, ולא סשנים בודדים מוצלחים.
מצבי עבודה של בוט ספוט: השוואת גישות ומגבלות
בחירת המצב קובעת לא רק את הרווחיות, אלא גם את סוג הסיכונים שאיתם הבוט יעבוד מדי יום. להלן ארבע גישות בסיסיות, שלרוב עומדות בבסיס בוט ספוט, והגבולות המעשיים של היישום שלהן.
| וריאנט | מתי מתאים | מגבלות |
|---|---|---|
| מרקט-מייקינג | זוגות נזילים עם ספרייד צר, זרימת עסקאות יציבה | דורש ביצוע מהיר ושליטה בפוזיציה; במגמה חדה המלאי המצטבר עובר למינוס, והעמלות אוכלות את המרווח |
| אסטרטגיית ארביטראז' | פער מחירים בין בורסות או זוגות, תדירות עסקאות גבוהה | רגיש לעיכוב בביצוע ולעומק ספר הפקודות; חלון ההזדמנות נסגר בשניות, וחלק מהעסקאות לא מספיקות לעבור |
| פקודה עוקבת | קטעי מגמה, ליווי פוזיציה שכבר פתוחה | לא עובד בפלאט: הסטופ נמשך אחרי המחיר ונפלט בתיקון; דורש כוונון מדויק של הצעד |
| בוט גריד | שוק צדדי עם טווח מובהק, זוגות תנודתיים | כשהמחיר יוצא מגבולות הרשת הפוזיציה נתקעת; במגמה צובר הפסד במקום רווח |
כיצד בוחרים מצב
בפועל את המצב מתאימים לאופי הזוג ולאופק החזקת הפוזיציה. מרקט-מייקינג וארביטראז' חיים על שניות ודורשים השהיה נמוכה עד לבורסה, גריד ופקודה עוקבת — על דקות ושעות וסולחים יותר. לערבב אותם בבוט אחד בלי חשבונאות נפרדת של פוזיציות ולימיטים זה מסוכן: האסטרטגיות מתחילות להפריע זו לזו.
מה חשוב להטמיע מראש
כל אחד מהווריאנטים נתקל באותן מגבלות: לימיטים של הבורסה על קצב הבקשות, עמלות, סליפג' והתנהגות בעת ניתוק תקשורת. לכן בבוט מטמיעים כללי יציאה נוקשים, שליטה בפוזיציה המקסימלית ושחזור תקין של המצב לאחר הפעלה מחדש. תארו את הזוג והמשימה שלכם — נחזור עם הערכה ותוכנית למצב מתאים.
איך אנחנו מטמיעים את הבוט: שלבי העבודה ההנדסית
את העבודה אנחנו מתחילים באודיט של הלוגיקה המסחרית: מפרקים אילו אותות אתם משתמשים, באילו טיימפריימים, איך אתם מחשבים את גודל הפוזיציה ומה אתם עושים בזמן דרודאון.
בתוצאה — תיאור פורמלי של האסטרטגיה, שבו כל כלל חד-משמעי: בלי "אם השוק נראה חלש" ובלי הסתייגויות ידניות שאי אפשר לשחזר בקוד.
בשלב הבא אנחנו מתכננים את הבוט כמערכת של מודולים בלתי תלויים — מקור נתונים, חישוב אות, ניהול פקודות, בקרת סיכונים ויומן עסקאות. הפרדה כזו מאפשרת לשנות את לוגיקת הכניסה בלי לכתוב מחדש את הביצוע, ולהפך.
בנפרד אנחנו מתעדים את ההתנהגות בעת ניתוק התקשורת וביצוע חלקי של פקודה — דווקא התרחישים האלה הם שלרוב שוברים מימושים נאיביים.
- אודיט של הלוגיקה המסחרית. אוספים את כללי האסטרטגיה, משווים אותם לעסקאות בפועל, מוצאים פערים בין האופן שבו אתם סוחרים לבין האופן שבו זה מתואר במילים.
- תכנון הבוט. מגדירים מודולים, זרימות נתונים, פורמט אחסון המצב ונקודות כשל; מאשרים את הסכימה לפני תחילת הקוד.
- הגדרת חיבורים לבורסה. מפתחות עם הרשאות מוגבלות (מסחר בלי משיכה), מגבלות בקשות, התחברות מחדש, סנכרון זמן ויתרה אחרי כל הפעלה מחדש.
- מימוש הליבה המסחרית. חישוב אותות, הצבת פקודות וליוויין, טיפול בביצועים חלקיים ובביטולים.
- בדיקה על היסטוריה. הרצה על נתונים היסטוריים תוך התחשבות בעמלות ובסליפג', ואחר כך בדיקה בסביבת הטסט של הבורסה בלי כספים אמיתיים.
- הרצה במצב מוגבל. התחלה עם גודל פוזיציה מינימלי, השוואת עסקאות בפועל לעסקאות המחושבות, בקרת פערים.
- מסירת הפתרון. הרשאות גישה, קונפיגורציות, הוראות הפעלה ועצירה, ניתוח תקלות טיפוסיות — כדי שהצוות יוכל לתחזק את הבוט בעצמו.
בדיקה על היסטוריה חותכת אסטרטגיות שנראות יפה על הגרף אבל מתפרקות על עמלות וסליפג'. מסירת הפתרון כוללת לא רק קוד, אלא גם נוהל ברור: איך עוצרים את הבוט, איך מעדכנים פרמטרים, מה עושים כשמתרחש פער ביתרה.
מה הלקוח מקבל לידיו: קונפיגורציות, תרשימים, נהלים
הפרויקט נסגר לא כ"בוט עובד על שרת", אלא כערכה שלמה שלפיה הצוות שלכם יוכל להפעיל אותו, לשנות פרמטרים ולהעביר אותו לתחזוקה. להלן מה בדיוק עובר ללקוח.
- קונפיגורציית הבוט — קבצי פרמטרים לכל מכשיר מסחר: גודל הזמנה, צעד מחיר, מגבלות על פוזיציה ועל מחזור יומי, מצב הגשת בקשות. השינויים מבוצעים ללא בנייה מחדש של הקוד, הערכים מאומתים בעת האתחול.
- תרשים זרימות ההזמנות — מקבלת נתוני השוק ועד אישור העסקה: היכן מונחת הבקשה, כיצד מטופל ביצוע חלקי, מה קורה בעת סירוב הבורסה וכיצד מוסרת בקשה תקועה.
- מדיניות גישה ל-API — אילו הרשאות הוענקו למפתח, מה אסור (משיכת כספים), היכן מאוחסנים הסודות, כיצד מתבצעת רוטציית מפתחות ומי имеет גישה לסביבה.
- תיעוד — תיאור האסטרטגיה, לוגיקת הכניסה והיציאה, רשימת תלויות חיצוניות, הוראות הרצה מקומית וניתוח שגיאות אופייניות.
- נוהל הפעלה — סדר ההפעלה והעצירה, בקרת מגבלות, תגובה לניתוק החיבור עם הבורסה, נקודות גיבוי מצב.
- מערך בדיקות — בדיקות לחישוב נפח, טיפול בסירובים ושליחה חוזרת של בקשה, כדי ששינוי פרמטרים לא ישבור את הלוגיקה.
- תרשים פריסה — סביבות, ניטור מדדים מרכזיים, התראות על הפעלת מגבלות ועצירה חירומית.
הערכה נמסרת עם הסבר: המהנדס מוביל את הצוות שלכם דרך כל ארטיפקט ועונה על שאלות לגבי הקוד. לאחר מכן אתם либо מפעילים את הבוט בעצמכם, либо מוסרים אותו לתחזוקה — ללא פניות אלינו עבור כל שינוי פרמטר.
מקרה בוחן: איך הסרנו הזמנות תקועות והעלינו את שיעור הביצוע
הלקוח — צוות שסוחר בספוט במספר בורסות באמצעות בוט משלו. הזמנות הוגשו, אך חלקן "נתקעו": המחיר זז, ההזמנה נותרה בספר הפקודות והפכה לפוזיציה לא מתוכננת. בתנועות שיא הבוט הגיב באיחור, ובזינוק חד במספר ההזמנות חלק מהבקשות לממשק הבורסה נפלו בטיימאאוט ואבדו ללא ניסיון חוזר.
מה היה לפני
שיעור ההזמנות התקועות הגיע עד 18% מההזמנות שהוגשו במשמרת — היה צריך להסיר אותן ידנית. זמן התגובה לשינוי המחיר בשוק רגוע עמד על כשנייה, ובעומס שיא גדל פי כמה: בזמן שהבוט חישב מחדש את התנאים, המחיר זז בכמה צעדים. מעקב הביצוע התנהל לפי לוגים ולא תאם את דוחות הבורסה, ולכן איש לא ראה את שיעור הביצוע האמיתי.
מה שינו
כתבו מחדש את מחזור העבודה עם הזמנות: מצב כל הזמנה נשמר בנפרד מהלוגיקה החישובית, וההתאמה מול הבורסה מתבצעת בזרם אירועים ולא בסקר לפי טיימר. הוסיפו ניסיונות חוזרים אידמפוטנטיים לבקשות — בעת ניתוק הקשר ההזמנה אינה משוכפלת ואינה אובדת, אלא מובאת למצב ידוע.
תור ההזמנות קיבל עדיפויות והגבלה על מספר הפניות בו-זמניות לבורסה, כדי שזרם שיא לא יפיל את החיבורים. בנפרד נבנה לוח מדדים: שיעור הביצוע, מספר ההזמנות התקועות, זמן התגובה, עומק התור.
מה נהיה
שיעור ההזמנות התקועות ירד מ-18% ל-1-2% — הבוט עצמו מסיר אותן לפי תנאי התיישנות. זמן התגובה לשינוי המחיר הצטמצם לעשיריות השנייה וכמעט אינו גדל תחת עומס שיא: התור שומר על סדר ולא מפיל הכול בבת אחת. ההתאמה מול הבורסה מתאימה עד העסקה האחרונה, ולכן שיעור הביצוע מחושב לפי המצב בפועל ולא לפי הלוגים.
את המחסנית והלוגיקה של ההתאמה התאימו לבורסות הספציפיות של הלקוח — עבדו עם הממשקים והמגבלות שלהן ישירות.
במה שונה בוט ספוט מבוט חוזים ומה יש לקחת בחשבון במעבר
בוט ספוט ובוט חוזים נבדלים לא בכמה פרמטרים של קונפיגורציה, אלא במודל הסיכון עצמו. בספוט אתם קונים את הנכס מכספכם שלכם: הפוזיציה לא יכולה להפוך לשלילית, התרחיש הגרוע ביותר — ערך הנכס ירד, אך הנפח במטבעות נשאר כשהיה. בחוזים הפוזיציה נפתחת עם מינוף, והבורסה מחזיקה עירבון — מרג'ין.
ברגע שההפסד על הפוזיציה אוכל את התמיכה, מופעל ליקווידציה: הבורסה סוגרת את הפוזיציה בכפייה ומוחקת את העירבון. בוט שבספוט פשוט "היה ממתין" לירידה, בחוזים מאבד את הדיפוזיט תוך דקות.
מכאן ההבדל השני — חישוב המרג'ין. בוט חוזים מחויב לחשב בזמן אמת את מרג'ין התחזוקה, לעקוב אחר מחיר הליקווידציה, או להוסיף עירבון או לצמצם את הפוזיציה. בוט ספוט לא זקוק לכך כלל: אין לו התחייבויות כלפי הבורסה, יש רק יתרה ופקודות פתוחות.
אם מעבירים את הלוגיקה "כמו שהיא" — אותם אותות, אותם גדלי פוזיציה — קו החוזים יקבל סיכון שלא היה בקוד המקורי: גודל הפוזיציה מוכפל במינוף, וסטופ-לוס שחושב מנפח ספוט יימצא הרחק מעבר לגבול הליקווידציה.
השלישי — מכניקת הביצוע. בספוט הבוט עובד עם נכס אמיתי: הפקודות מוגבלות ביתרה, ביצוע חלקי צפוי מראש, העמלה נגבית מהמחזור. בחוזים מתווספים funding — תשלומים תקופתיים בין לונגים לשורטים — וכן מצבי מרג'ין (מבודד וקרוס).
במרג'ין מבודד הסיכון מוגבל לפוזיציה אחת, במרג'ין קרוס הפסד על פוזיציה אחת גורר את כל העירבון של החשבון. את לוגיקת ניהול ההון יש לכתוב מחדש עבור כל מצב בנפרד.
בהעברת לוגיקה מספוט לחוזים משנים ארבעה שכבות: חישוב גודל הפוזיציה (בהתחשב במינוף ובירידה המותרת), בלוק בקרת מרג'ין וליקווידציה, עיבוד תשלומי funding ומודל הכשלים — במקום "הפקודה לא עברה" מופיע "הפוזיציה חוסלה".
ההעברה ההפוכה פשוטה יותר: בהסרת המינוף תקבלו קו שמרני, אך תאבדו חלק מהאסטרטגיות שפשוט לא עובדות בספוט. לכן אנו קודם מקבעים אילו אותות והנחות מוטמעים בבוט הנוכחי, ורק אחר כך מחליטים מה מועבר כמו שהוא ומה מתוכנן מחדש.
ספקות טכניים: עונים על שאלות נפוצות
לפני היציאה לקרב הלקוחות שואלים את אותן השאלות — על אמינות, מפתחות, התנהגות בעת תקלות בבורסה, בדיקות ותמיכה. להלן תשובות ישירות ללא שיווק, כדי שתבינו כיצד בדיוק בוט מסחר ספוט מתנהג בתפעול אמיתי.
עד כמה הבוט אמין בעת תקלות בבורסה?
אנו מטמיעים טיפול בניתוקי חיבור ובשגיאות API מההתחלה: ניסיונות חוזרים עם השהיה הולכת וגדלה, מזהי הזמנות אידמפוטנטיים, התאמת מצב הפוזיציות בפועל מול המצב המקומי לאחר כל התחברות מחדש.
אם הבורסה מחזירה שגיאה או מעכבת תגובה, הבוט לא "מתעוור", אלא עובר למצב בטוח ומשחזר את התמונה לפי נתוני הבורסה.
כיצד נשמרים מפתחות הגישה לבורסה?
מפתחות פרטיים אינם נכנסים לקוד וללוגים. הם מאוחסנים במאגר סודות מבודד, שגישה אליו שמורה רק לתהליך הבוט, ובצד הבורסה אתם מגדירים למפתח הרשאות מינימליות — מסחר ללא משיכת כספים. בנוסף אנו מגבילים גישה לפי רשימת כתובות ומחליפים מפתחות לפי נוהל.
מה קורה בעת ניתוק תקשורת או עצירת הבורסה?
הבוט מזהה את אי-הזמינות של הפלטפורמה ואינו שולח הזמנות חדשות באופן עיוור. הזמנות שלא נסגרו מנוטרות, עם שחזור התקשורת המצב מותאם, ופערים נרשמים ביומן. כך נמנעות פוזיציות "פנטום" ועסקאות כפולות.
כיצד אתם בודקים אסטרטגיה לפני כסף אמיתי?
תחילה הרצה על נתונים היסטוריים, לאחר מכן — על קונטור בדיקות של הבורסה עם זרמי ציטוטים אמיתיים, אך ללא כספים. בנפרד אנו בודקים התנהגות בעת כשלים: ניתוק חיבור, הזמנות שנדחו, מגבלות תדירות בקשות. רק לאחר מכן הבוט יוצא לחשבון מבצעי עם נפח מוגבל.
מה כלול בתמיכה לאחר ההשקה?
אנו עוקבים אחר מדדים, מנתחים אירועים ומעדכנים את הלוגיקה בהתאם לשינויים בכללי הבורסה. אתם מקבלים יומני עבודה, התראות על תקלות ונוהל הסלמה ברור — בעת סטייה מהתנהגות צפויה ניתן לעצור את הבוט במהירות ולבטל את התצורה.
אם נותרו שאלות בנוגע למשימה שלכם — תארו את תרחיש המסחר ואת דרישות הסיכון, ונחזור עם הערכה ותוכנית.
נדון במשימה שלך ונחזור עם הערכה ותוכנית
כדי לחזור עם הערכה ותוכנית עבודה, ולא עם מילים כלליות, אנחנו צריכים מכם מינימום של נתוני פתיחה. ניתוח ראשוני אורך שיחה אחת: אנחנו מנתחים את המשימה לגופה ואומרים מיד היכן אנחנו רואים סיכונים והיכן — פתרון סטנדרטי. ככל שנתוני הפתיחה konkretיים יותר, כך ההערכה של לוחות הזמנים וההיקף מדויקת יותר.
מה נדרש מהמזמין בשלב ההתחלה:
- בורסה ומצב מסחר: ספוט, זוגות ספציפיים, מגבלות על API ומגבלות בקשות.
- לוגיקת האסטרטגיה: אותות כניסה ויציאה, עבודה עם נפח, כללי מיצוע וסטופים.
- דרישות לסיכון: ירידה מקסימלית, מגבלות על פוזיציה, התנהגות בעת ניתוק תקשורת.
- גישות וסביבה: סביבת בדיקות של הבורסה, שבה אפשר להריץ את האסטרטגיה בלי עסקאות אמיתיות.
- דיווח: אילו מדדים ולוגים נדרשים, היכן לאחסן אותם, מי צופה בהם.
- מגבלות בלוחות זמנים ומה שכבר קיים — עבודות קודמות, סקריפטים, קבלן קודם.
לפי תוצאות הניתוח אנחנו מרכיבים תוכנית עבודה: ארכיטקטורה של הבוט, סכימת החיבור לבורסה, מודול האסטרטגיה, שכבת בקרת סיכונים, תיעוד וניטור, סדר הבדיקות וההעלאה לפעולה. בתוכנית אנחנו מתעדים שלבים, מה בודקים בכל שלב ולפי אילו קריטריונים אנחנו מחשיבים אותו כמוכן.
השלבים הבאים פשוטים: אתם מתארים את המשימה בצורה חופשית, אנחנו שואלים שאלות הבהרה וחוזרים עם הערכה ותוכנית עבודה. תארו את המשימה — נחזור עם הערכה ותוכנית.







