פיתוח בוטים למסחר ב-Discord: היכן נשבר הביצוע
בבוט צ'אט מחזור הביצוע נראה קצר: אות, הודעה בערוץ, לחיצה על כפתור, פקודה בבורסה. הפער נוצר במפגש «הודעה — אישור»: בזמן שהסוחר קורא את הפיד, המחיר זז, והפקודה נשלחת לפי מחיר שכבר אינו קיים בספר הפקודות. משם אי-ההתאמה רק גדלה — ביצוע חלקי, השארית נשארת פתוחה, והפוזיציה מפסיקה להתאים לחישוב.
אישור ידני של עסקאות מוסיף להשהיית האות גורם אנושי. שני סוחרים באותו ערוץ, התראה שהוחמצה, אישור של פקודה לא נכונה — ובבורסה מתקבל לא מה שתוכנן. כאן ההשהיה נמדדת לא בשניות, אלא במספר צעדים, שכל אחד מהם עשוי לא לקרות.
השכבה השנייה — כשלים בביצוע פקודות. בלי אידמפוטנטיות, שליחה חוזרת יוצרת כפילויות, הפעלה מחדש של הבוט מאבדת פקודות שלא הושלמו, ומצב הפוזיציה אינו נבדק בשום מקום מול ממשק הבורסה. המערך צובר אי-התאמות שיש לנתח ידנית, בלילה ולפי יומני התכתבות.
יציבות מערך הביצוע נבנית לא על כפתורים בצ'אט, אלא על תור פקודות עם יומן מצבים ובדיקה מחייבת מול הבורסה. הממשק ב-Discord נשאר, אך הופך ללוח בקרה, ולא לערוץ יחיד להעברת אות.
נסביר כיצד זה נסגר בפיתוח בוטים למסחר ב-Discord: היכן למקם את גבול האוטומציה, כיצד לשמר שליטה ידנית ולא לאבד מהירות בקטע היקר ביותר — בין האות לפקודה שבוצעה.
מסירים שליטה ידנית: האפקט במדדים מדידים
אפקט האוטומציה נמדד לא במספר הפונקציות, אלא בכמה זמן עובר בין אירוע בשוק לפעולה על הפוזיציה. הבוט מחזיק מנוי קבוע לזרם הנתונים ומגיב בתוך מחזור עיבוד אחד — אדם באותו רגע עשוי להיות עסוק, לישון או פשוט לא להספיק לפתוח את הממשק. ההבדל בין תגובה בשניות לתגובה בדקות ניכר בהחלקה של מחיר הביצוע ובכמה תרחישים מספיקים להתבצע במשמרת.
שיעור הפעולות ללא מעורבות אדם — המדד השני. תרחישים טיפוסיים (פתיחה לפי תנאי, העברת פקודת הגנה, מימוש חלקי, סגירה לפי זמן) מועברים למצב אוטומטי לחלוטין, וידניים נשארים רק אלה שבהם נדרשת ההערכה שלכם: שינוי לוגיקת האסטרטגיה, שינוי לימיטים לפי מכשיר, טיפול במצב חריג. אם קודם לכן המפעיל החזיק חלון פתוח ואישר ידנית כל פעולה, כעת הוא מתחבר לטיפול בחריגים, לא לשגרה.
תיעוד הפקודות ביומן סוגר את שאלת האמון בממשק. כל פקודה מהצ'אט נרשמת עם המחבר, הזמן, הפרמטרים ותוצאת הביצוע, לכן כל תקרית נבחנת לפי הלוג, ולא לפי הזיכרון של המשתתפים. רואים אם הפקודה נשלחה, אם הגיעה למבצע, מה השיב מודול המסחר — ובאיזה שלב השרשרת סטתה מהצפוי.
עמידות התקלות של השליטה — השינוי המדיד הרביעי: הממשק מפסיק להיות נקודת כשל יחידה. בעת ניתוק החיבור הבוט מתחבר מחדש ומשחזר את מצב הפוזיציות מהיומן, פקודה חוזרת מזוהה ככפילות ולא הופכת לפקודה שנייה.
בדיוק סוג זה של כשלים — אובדן אות, כפילות על פקודה אחת, פוזיציה פתוחה "נשכחת" — נעלם לחלוטין, ובמקום שליטה ידנית נשארת התבוננות במדדים.
אפשרויות חיבור ל-Discord: מצבים ומגבלות
ניתן לחבר את מערך השליטה של בוט המסחר לצ'אט בכמה דרכים, והן אינן תחליפיות זו לזו: חלקן מאפשרות שליטה דו-כיוונית, אחרות רק מעבירות אותות. הבחירה תלויה במקור שממנו מגיעות הפקודות ובנכונותכם להריץ תהליך תושב.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| חיבור קבוע של הבוט | פקודות מהצ'אט, תגובה לאירועים, מנויים | תהליך תושב, התחברות מחדש בעת ניתוק, שרדינג עם גידול במספר השרתים |
| וובהוקים יוצאים | התראות: כניסה לפוזיציה, הפעלת סטופ, דוח יומי | הערוץ חד-כיווני — לא ניתן להעביר פקודה מהצ'אט, מגבלת קצב בקשות לערוץ |
| פקודות סלאש דרך אינטראקציות HTTP | פעולות ידניות נדירות: השהיה, שינוי מצב, בקשת סטטוס | יש להחזיר תשובה בחלון קצר, אחרת הפלטפורמה מסמנת את האינטראקציה כלא מוצלחת |
| גישה לפי הרשאות ערוץ | חלוקת תפקידים: סוחרים נותנים פקודות, צופים קוראים | ההרשאות מוגדרות לתפקידים ולערוצים, ביקורת הפעולות נשארת ברמת הצ'אט |
מה לקחת בחשבון בבחירה
יש להדגיש בנפרד את מצב האותות: הבוט אינו מבצע עסקאות אלא מפרסם אותות, וההחלטה נשארת בידי האדם. זה מסיר סוג של שגיאות של ביצוע אוטומטי, אך מוסיף השהיה בין האות לעסקה.
הפרידו הרשאות ערוץ לפי תפקידים מיד: ערוץ פרטי לפקודות, ערוץ נפרד ללוגים ולדוחות, קריאה בלבד לצופים. אחרת הודעה מקרית בערוץ כללי הופכת לפקודת מסחר, ומגבלות פלטפורמת הצ'אט על קצב ההודעות מתחילות להשפיע על לוגיקת הבוט.
שלבי הטמעה: מניתוח אסטרטגיה ועד מסירה
בוט מסחר הוא לא סקריפט שקונה ומוכר מעצמו, אלא מערכת עם הרשאות גישה, לימיטים ובקרת ביצוע. לכן אנו עובדים בשלבים: כל שלב מסתיים בארטיפקט שניתן לבדוק לפני המעבר לשלב הבא — כך טעות בלוגיקה מתגלה על הנייר, ולא בחשבון חי.
- ביקורת אסטרטגיה. מנתחים את כללי הכניסה והיציאה, מקורות המחירים, העיתוי ואופן ביצוע הפקודות. מתעדים מקומות שבהם הכלל מאפשר פרשנות כפולה — ואותם סוגרים לפני כתיבת הקוד.
- סכימת גישה. מגדירים אילו פקודות זמינות דרך ממשק השליטה, מי רשאי לשנות פרמטרים. מפתחות הגישה לבורסה מוציאים מהממשק לשכבה מאובטחת, ופעולות קריטיות מאושרות בגורם שני.
- לימיטי סיכון. קובעים גודל פוזיציה מקסימלי, סטופ יומי לפי הפסד, הגבלת מספר העסקאות והתנהגות בניתוק החיבור לבורסה: עצירה או החזקת הפוזיציה לפי כלל מוגדר.
- הרכבה והגדרה. פורסים מערך בדיקות: נתונים היסטוריים להרצה, ארגז חול של הבורסה, יומן אירועים והתראות על תקלות.
- בדיקה במערך בדיקות. מריצים תרחישי כשל — ניתוק חיבור, פקודה שנדחתה, עלייה חדה בתנודתיות. משווים את החישובים לתוצאות הצפויות ורק לאחר מכן מאפשרים לבוט לגשת לכספים אמיתיים.
- מסירה לתפעול. מוסרים תיעוד פקודות, נוהל הפעלה ועצירה, סכימת הרשאות וסדר עריכת האסטרטגיה. נשארים בקשר בתקופת השבועות הראשונים של העבודה.
מה מוסרים לידיים: קונפיגורציות, סכימות, נהלים
בוט עם ממשק שליטה ב-Discord חי יותר מהצוות שהרכיב אותו. לכן לידיים עובר לא ארכיון עם קוד, אלא ערכה שלפיה מהנדס חדש מרים את המערכת, משנה פרמטרי מסחר ומגיב לתקלה בלי לפנות למחבר.
כל מה שיכול להשתנות בעבודה — זוגות, לימיטים, ספים — מוצא לקונפיגורציות תחת בקרת גרסאות, ולא מוטמע בקוד. מפתחות הבורסה והטוקן של הבוט נשמרים בנפרד מהמאגר: דרכם המסחר זמין, אך משיכת כספים — לא.
- קונפיגורציות — זוגות מסחר, לימיטים על נפח עסקה, ספי סיכון, מרווחי סקירת שוק; פרופילים של מערך בדיקות ושל מערך עבודה מופרדים.
- סכימות קשרים — זרימות בין הבוט, ה-API של הבורסה, צומת הרשת וערוץ השליטה, עם נקודות כשל מסומנות.
- מדיניות גישה — מטריצת תפקידים: מי מפעיל ועוצר את הבוט, מי משנה לימיטים, למי נראית היסטוריית העסקאות.
- תיעוד הפתרון — תיאור המודולים, פורמטי אירועים, סכימת נתונים וכללי חישוב האותות.
- הוראות לתורן — הפעלה ועצירה שגרתיות, רוטציית מפתחות, שחזור לאחר ניתוק החיבור לבורסה.
- נוהל תגובה — רמות אירועים, זמן תגובה, סדר העברת הבוט למצב ידני והחזרת הקונפיגורציה לקודמת.
- רשימת בדיקה לקבלה — בדיקות שלפיהן אתם מקבלים את הערכה: מהרצת האסטרטגיה במערך בדיקות ועד בדיקת הרשאות גישה.
ערכה נחשבת כנמסרה כאשר הצוות שלכם מבצע לפיה מחזור מלא בעצמו — משינוי לימיט ועד החזרה להגדרה הקודמת.
מקרה בוחן: כיצד הסרנו ליווי ידני ממערך הביצוע
הלקוח הגיע עם מערך ביצוע עובד שהחזיק כולו על מהנדס תורן. בממוצע 40–60 אישורים ידניים ביממה, זמן תגובה לאות — מ-9 דקות, כניסות ליליות אבדו עד הבוקר, וביומן כמעט בכל משמרת צפו אי-התאמות בין הפוזיציה בפועל לדיווח: ההשוואה תפסה את שעות המשמרת הראשונות ובכל זאת לא הסתדרה.
מה שינינו
השארנו את לוגיקת החישוב בצד השרת, ואת השליטה העברנו ל-Discord — לערוץ סגור שבו הצוות ממילא עובד. כל פעולה עוברת בדיקת לימיטים, אישור תפקיד ורישום ביומן לפני שליחה לביצוע, לכן התערבות ידנית הצטמצמה לשני תרחישים: חריגה מגבולות הסיכון ועצירת המערך. הפקודה יוצאת לביצוע רק לאחר בדיקה, כך שלחיצה מקרית לא מגיעה למערך.
מדדים לפני ואחרי
הסרת הליווי הידני נתנה שינוי מדיד: אישורים — מ-40–60 ל-2–4 ביממה, זמן תגובה — מדקות ל-6–8 שניות, שיעור האותות שעובדו במשמרת — מ-78% ל-100%. אי-ההתאמות ביומן הצטמצמו מ-25–40 בשבוע לאפס במשך חודשי התבוננות: לכל פעולה יש כעת מחבר, חתימת זמן ובסיס.
החזרה לקונפיגורציה הקודמת נמשכת פקודה אחת — המצב משוחזר מהיומן, והמהנדס התורן עבר לניתוח אסטרטגיות במקום אישורים שגרתיים.
במה ערוץ האותות שונה מערוץ הביצוע?
ערוץ האותות מפרסם כוונה, אך אינו נוגע בחשבון הבורסה: הבוט מחשב את תנאי הכניסה, שולח ל-Discord זוג, כיוון, מחיר וסטופ, ואת הפקודה שולח האדם — באמצעות כפתור אישור או ידנית בטרמינל.
ערוץ הביצוע הולך רחוק יותר: לאחר קבלת אותו חישוב, הוא בעצמו מציב פקודה דרך ממשק התכנות של הבורסה ומנהל את הפוזיציה עד סגירה, ולערוץ כותב רק את תוצאת העסקה.
חלוקת התפקידים נקבעת על ידי הרשאות, לא על ידי משמעת. ערוץ האותות פתוח לקריאה, לכתוב בו יכול רק בוט שירות, כפתור האישור משויך לתפקיד הסוחר, והזכות לבצע ניתנת לתפקיד שירות נפרד — אותו לא מחלקים לכל משתתפי השרת.
הגנה מפני פקודות שגויות נבנית ממנגנוני בטיחות: לימיט על גודל הפוזיציה ומספר העסקאות ביממה, הגנה מכפילויות — לחיצה חוזרת אינה פותחת פקודה שנייה, חלון אישור עם ביטול בפסק זמן, פקודת עצירת חירום נפרדת שמסירה פקודות פעילות.
בחירת המצב תלויה בבגרות האסטרטגיה. מצב האותות נחוץ בזמן שהלוגיקה נבדקת בשוק חי וכל מצב שנוי במחלוקת חשוב; מצב הביצוע — כאשר הכללים מעובדים, וההשהיה בין החישוב לפקודה עולה בתוצאה.
אנו מרכיבים את שני המצבים בבוט אחד עם מתג ברמת האסטרטגיה: ניתן להפעיל אותות עבור חלק מהמכשירים, וביצוע — רק עבור אלה שבהם הכללים לא השתנו חודשים.
שאלות נפוצות על גישות, לימיטים וכשלים
גישות, תקלות, לימיטים והשוואת עסקאות — מה ששואלים לפני ההתחלה. להלן כיצד זה בנוי כברירת מחדל, עם התאמת פרמטרים לבורסה ולאסטרטגיה מסוימת.
כיצד לתת גישה בלי למסור סיסמת חשבון?
מפתחות מונפקים בצד הבורסה עם זכות מסחר וללא זכות משיכה — לא ניתן למשוך יתרה באמצעותם. הכניסה ללוח הבקרה מתבצעת באמצעות קישור חד-פעמי בעל תוקף קצר, המשויך למכשיר. סודות מאוחסנים במאגר מאובטח ומוצבים רק ברגע חתימת הבקשה; הם אינם מגיעים למאגר הקוד או ליומנים.
מה קורה בעת אובדן חיבור לבורסה?
הבוט מפסיק להציב פקודות חדשות ועובר לעצירת הגנה — הוא אינו פועל באופן עיוור. החיבור משוחזר דרך צמתים חלופיים, הפוזיציות נבדקות מול הבורסה, ורק לאחר מכן המסחר ממשיך. כל ניתוק נרשם ביומן עם חתימת זמן.
כיצד מוגבל היקף הפעולות?
לימיטים נקבעים לפני ההפעלה: גודל מקסימלי של עסקה אחת, מחזור כולל ליממה, מספר פקודות בדקה. בחריגה הפקודה נדחית בצד שלנו ואינה מגיעה לבורסה. ניתן לשנות לימיט רק באישור בממשק, עם רישום ביומן.
כיצד בודקים שהעסקאות תואמות?
המצב המקומי נבדק באופן קבוע מול היסטוריית העסקאות והיתרה בבורסה. כל אי-התאמה מעבירה את הבוט להסגר ושולחת התראה — עד אישור ידני לא מוצבות פקודות חדשות. על כל עסקה נשאר דוח: מחיר, נפח, עמלה, סיכום.
נדון בלוגיקה ובתרחישי השליטה שלכם
הדיון הראשון נחוץ לא למצגת, אלא כדי לאסוף נתוני קלט — בלעדיהם ההערכה הופכת לניחוש. חשוב לנו להבין מהיכן הבוט לוקח את נתוני השוק, מי נותן את הפקודות ואילו מגבלות סיכון נחשבות לבלתי ניתנות לשינוי. ננתח בשיחה:
- תרחישי שליטה — אילו פקודות נשלחות לערוץ: פתיחת וסגירת פוזיציה, פקודת לימיט, שינוי מינוף, השהיה; מי רשאי לתת אותן.
- נתוני קלט — בורסות ומכשירים, מקור הציטוטים, היסטוריית עסקאות, היכן נשמרים מפתחות הגישה וכיצד הם מבודדים מלוגיקת הבוט.
- לוגיקת מסחר — כללי כניסה ויציאה, גודל פוזיציה, פקודות סטופ, ביצועים חלקיים והתנהגות בעת ניתוק החיבור לבורסה.
- תפקידים וגישות — למי ב-Discord זמינים רק דוחות, למי ניהול ההון, כיצד נשללת גישה ממשתתף שעזב.
- התראות וביקורת — מה מגיע לערוץ (עסקה, שגיאה, הפעלת לימיט) ולאן נכתב לוג פעולות בלתי ניתן לשינוי.
- מגבלות סיכון — ירידה מקסימלית, לימיטים על נפח, התנהגות בתנועה חדה בשוק, סדר עצירה ידנית.
לאחר השיחה מתעדים את ההסכמות בכתב וחוזרים עם הערכה ותוכנית עבודה: שלבים, הרכב המסירה, מה נדרש מצדכם ובאיזה מועד. אם במהלך הדברים יתברר שחלק מהתרחישים מיותרים או נפתרים אחרת, נאמר על כך לפני ההתחלה — כדי שלא לעצב מחדש את ממשק השליטה לאחר מכן.







