מדוע בוט מסחר מבוסס אינדיקטורים נשבר בשוק האמיתי
בבדיקה על נתונים היסטוריים לוגיקת הכניסה לעסקה נראית אמינה: הצטלבות ממוצעים נעים, אישור על ידי מתנד, סינון לפי תנודתיות — העקומה חלקה, והנסיגה בתוך גבולות צפויים.
בשוק האמיתי אותו קוד בדיוק פוגש ספר פקודות שלא היה בהיסטוריה: המחיר עובר כמה טיקים מעבר לרמה, והבוט מתעד כניסה לפי מחיר האות. החלקה של המחיר אוכלת בדיוק את העסקאות האימפולסיביות — אלה שהניבו את עיקר הרווח.
המקום השני של הכשל — אותות שווא של אינדיקטורים. האינדיקטור מחשב לפי נרות סגורים, אבל את ההחלטה צריך לקבל לפני שהם נסגרים. אם לוגיקת הכניסה קוראת את הערך הנוכחי, הבוט מגיב לרעש בתוך הנר: מתפעל, מתקן אחורה, ובנר הבא האות נעלם.
תוסיפו לכך ציור מחדש של רמות בחלק מהמתנדים — ואותה אסטרטגיה בדיוק נותנת נקודות כניסה שונות בהיסטוריה ובזמן אמת.
השלישי — השהיה בין האות לביצוע. האות, ההזמנה, האישור והביצוע החלקי חיים בשכבות זמן שונות. בזמן שהבוט ממתין לתשובת הברוקר, המחיר מתרחק, ואיסוף הפוזיציה הופך לעסקאות במחירים שונים. בכלים דקי נזילות הסטופ מספיק להתפעל לפני שהפוזיציה נאספת במלואה.
בדוח הבדיקה על נתונים היסטוריים אין את השברים האלה — הוא בנוי על ביצוע אידיאלי. אנחנו מפרקים איך זה נסגר: היכן בארכיטקטורה להציב בדיקות על נתונים חיים ואיך להרכיב לוגיקת כניסה עמידה בפני השהיות וביצוע חלקי.
מה נותנת האוטומציה: אפקט מדיד ואמינות
אוטומציה של מסחר מסירה את החולשה העיקרית של עבודה ידנית: ההחלטה מתקבלת לפי כלל שנבדק מראש, ולא לפי מצב רוח ברגע נתון. לוגיקת האינדיקטורים מפורמלת בקוד — תנאי הכניסה, גודל הפוזיציה ותנאי היציאה מוגדרים במפורש, ולכן כל עסקה ניתנת לחישוב מחדש על ההיסטוריה ולהסבר מהיכן הגיעה.
זמן התגובה של המערכת נמדד ונשאר יציב תחת עומס: מכניסת הנר ועד לשליחת ההזמנה עובר פרק זמן צפוי מראש. כניסה ידנית תלויה בשאלה אם האדם הספיק להסתכל על הגרף, ולכן חלק מהאותות הולכים לאיבוד בדיוק ברגעים של תנועות חדות.
שיעור הכניסות השווא יורד לא מ"כיוונון למזל", אלא ממסננים: אישור כיוון, הגבלה לפי תנודתיות, איסור מסחר במרווחים צרים. כל מסנן מכוונן בנפרד, והתרומה שלו נראית בדוח — כמה אותות הוא חוסם ואיך זה משנה את הסטטיסטיקה של העסקאות.
בקרת הסיכון מובנית בתוך הלוגיקה עצמה, ולא מוצאת אל מחוץ לה לתקנון נפרד: תקרה לעסקה, תקרה יומית להפסדים, הגבלת מספר הפוזיציות במקביל. כשמתפעל תנאי הגנה, הבוט מפסיק את המסחר ומשאיר רשומה על סיבת העצירה, במקום לנסות "להחזיר את ההפסד".
כל הפעולות נכנסות ליומן עם זמן, מחיר ונימוק ההתפעלות — פירוק של כל עסקה אורך דקות, לא שעות. את הלוגיקה אפשר לשנות בחלקים: הכללים מבודדים, ולכן שיפור של אינדיקטור לא שובר תרחישי יציאה שכבר נבדקו.
פורמטים של בוטים למסחר: השוואת גישות ומצבים
בחירת מצב ביצוע העסקאות נקבעת לא לפי סט האינדיקטורים, אלא לפי היכן עובר גבול האחריות בין האדם לאלגוריתם. אותה שכבת אותות בדיוק מתחברת לאישור ידני, לאלגוריתם אוטונומי או לשילוב שלהם — משתנה רק המבצע, ולוגיקת החישוב נשארת משותפת.
ככל שהאוטונומיה גבוהה יותר, כך הדרישות לניהול סיכון מחמירות יותר: תקרה לעסקה ולתקופה יומית, הגבלת נסיגה, התנהגות בעת ניתוק התקשורת עם הבורסה. במצב אותות את המסגרות האלה מחזיק הסוחר, ובמצב אוטונומי — הגדרות הבוט, וטעות בהן מוכפלת ללא הפסקות.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| מצב אותות | האסטרטגיה נבדקת, נדרש שליטה בכניסה | השהיה בין האות לעסקה, המשמעת תלויה באדם |
| מצב חצי־אוטומטי | כניסות שגרתיות אוטומטיות, יציאה לפי שיקול הסוחר | חלק מהסיכון נשאר ידני, נדרש מסוף פתוח כל הזמן |
| אלגוריתם אוטונומי | האסטרטגיה מוכחת, התגובה צריכה להיות מהירה מאדם | תקלות הגדרה מבוצעות באותה אוטומטיות כמו כניסות רווחיות |
| משולב | שווקים שונים דורשים רמת שליטה שונה | קשה יותר לבדיקה, נדרש יומן מלא של החלטות ואותות |
המצבים אינם סותרים זה את זה: שכבת האותות נשארת משותפת, והמבצעים מתחלפים בלי לשכתב את האסטרטגיה. המעבר מבדיקה ידנית לעבודה אוטונומית נעשה ככל שנצברת סטטיסטיקה של ריצות על ההיסטוריה ועל חשבון בדיקה — כך גם נפתרת שאלת התאימות ללוגיקה שכבר נבנתה.
איך אנחנו מטמיעים: שלבי העבודה ההנדסית
סדר העבודות זהה עבור אסטרטגיה על ממוצעים נעים, מתנדים או אותות מורכבים — משתנה רק תוכן השלבים. אנחנו מתחילים בבדיקה שהלוגיקה של המסחר בכלל ניתנת לפורמליזציה לכללים חד־משמעיים: אחרת הבוט משחזר לא את האסטרטגיה, אלא תיאור מקורב שלה.
- ביקורת הלוגיקה של המסחר. אנחנו מפרקים ממה מורכב האות: סט האינדיקטורים, חלונות המיצוע, כללי כניסה ויציאה, עבודה עם סטופים וגודל הפוזיציה. בפלט — רשימת המקומות שבהם הכלל מאפשר פרשנות כפולה.
- פורמליזציה של הכללים. מקומות שנויים במחלוקת מתורגמים לתנאים חד־משמעיים: מה לעשות בפער בין אותות, בניתוק תקשורת, בנר שלא נסגר. התיאור המוסכם הופך לקריטריון קבלה, ולפיו אנחנו מאמתים את התנהגות המערכת.
- בדיקה על נתונים היסטוריים. ריצה על ארכיון ציטוטים בהתחשב בעמלות, בהחלקה ובפערים בנתונים. אנחנו מסתכלים לא על תשואה, אלא על נסיגה, על שיעור העסקאות הרווחיות ועל ההתנהגות במגמה ובטווח.
- מתאר בדיקה. אותו קוד עובד על חיבור בדיקה: האותות מחושבים לפי זרם חי, והעסקאות אינן יוצאות לשוק. אנחנו מאמתים את חישוב האינדיקטורים מול מקור חיצוני — פער של צעד אחד בדרך כלל מעיד על טעות בחלון המיצוע.
- העלאה לעבודה. קודם סוגרים את החלק הטכני: הרשאות, תקרות על נפח ומספר עסקאות, ניסיונות חוזרים בעת כשל, הגנה מכפילויות בעת ניתוק תקשורת. אחר כך יוצאים לנפח מינימלי עם שליטה ידנית — את הנפח מעלים כשהפערים נעלמים על סדרת עסקאות.
- מסירה לליווי. מוסרים תיאור של האסטרטגיה, הגדרות, יומני פעולות, תקנון עדכון וניטור עם התראות על חריגות מההתנהגות הצפויה.
הגדרות, תרשימים ותקנונים: מה נשאר אצלכם
לאחר המסירה נשאר אצלכם לא "בוט עובד", אלא ערכה שלפיה אפשר להפעיל את המערכת, להעביר אותה למהנדס אחר ולפתח אותה בלעדינו. הפרמטרים מוצאים מחוץ לקוד אל תוך הגדרות — ההתנהגות משתנה בעריכת קובץ, לא בהרכבה מחדש. את הכול מוסרים במאגר שלכם, עם היסטוריית שינויים ומבנה תיקיות ברור.
- הגדרות המערכת: קבצי פרמטרים לכל כלי — טיימפריימים, תקרות, החלקה מותרת, הפעלה של אסטרטגיות נפרדות.
- פרופילי סיכון: סטים של הגבלות — נסיגה לסשן, מספר פוזיציות במקביל, גודל פוזיציה מתוך ההון, הפסקה לאחר סדרת הפסדים; מתחלפים בערך אחד.
- תיעוד המערכת: לוגיקת האותות, המסלול מהציטוט ועד להזמנה, נקודות כשל וסדר הפעולות בעת חוסר סנכרון.
- תקנון הליווי: צ'ק־ליסט יומי של בדיקות, רוטציה של מפתחות גישה, פעולות בעת ניתוק הערוץ, סדר ההסלמה.
- תרשימים ומפת אינטגרציות: דיאגרמת הרכיבים, תרשים הפריסה, התנהגות המערכת בעת אי־זמינות של שירות חיצוני.
- יומנים ומדדים: פורמט אחיד של רשומות, דוח על עסקאות והשהיות, כללי שמירת היסטוריה.
- פריסה וחזרה אחורה: העלאה מאפס וחזרה לגרסה קודמת בלי עריכות ידניות על השרת.
ריצת הקבלה נעשית על נתונים היסטוריים: אתם עצמכם משנים את פרופיל הסיכון ורואים איך ההתנהגות משתנה. הערכה מיועדת לכך שמכאן והלאה את המערכת יוביל המהנדס שלכם — אם אי אפשר לחזור על הכיוונון לפי התיעוד בלי המחבר, העבודה לא נמסרה.
מקרה בוחן: הסרנו כניסות שווא והפחתנו את הנסיגה
אסטרטגיה על פריצת טווח לפי אינדיקטורים שהועברו מ־TradingView נכנסה אך ורק לפי סגירת הנר — בלי בדיקת נפח ובלי התחשבות בתנודתיות הנוכחית. בטווח זה הניב עד שש כניסות שווא מתוך עשר: המחיר פרץ את הרמה, אסף את הסטופים המגנים וחזר לתוך הטווח. הנסיגה המקסימלית של האסטרטגיה הגיעה עד 38%, וסדרת ההפסדים נמשכה שלושה שבועות.
מה שינינו
את הכניסה כתבנו מחדש לאישור בשני מרווחים ולסינון אותות לפי תנודתיות: האות התקבל רק אם טווח הנר נכנס למסדרון העבודה, ואחרי התפעלות של סטופ בכלי הוצבה הפסקה. את היציאה פיצלנו לחלקים — חלק קבוע מהפוזיציה וסטופ מתהדק על היתרה, ולכן המגמה הפסיקה להיחתך בנסיגה הראשונה.
מדדים לפני ואחרי על אותו סט כלים: שיעור כניסות השווא ירד מ־61% ל־18%, והנסיגה — מ־38% ל־11%. מספר העסקאות הצטמצם בערך בחצי, אבל היחס בין רווחיות להפסדיות עלה מ־0.9 ל־1.7, וזמן ההתאוששות אחרי סדרת הפסדים — משלושה שבועות לחמישה ימים.
בדקנו לא בדיבורים: קודם ריצה על נתונים היסטוריים, ואחר כך עבודה על חשבון דמו. כללי הכניסה והיציאה מוצאים אל ההגדרות, ולכן החזרה ללוגיקה הקודמת נעשית במתג אחד, בלי עריכת קוד.
במה נבדל יועץ מאלגוריתם אוטונומי?
הגבול עובר בפעולה אחת: מי שולח את ההזמנה. היועץ מחשב את האות — הצטלבות ממוצעים, פריצת רמה, דיברגנציה — ומציג אותו לסוחר, ואת העסקה פותח האדם. האלגוריתם האוטונומי עובר את הצעד הזה בעצמו: קיבל תנאי, בדק תקרות, שלח הזמנה, רשם תוצאה. מכאן צומח כל השאר — דרישות לאמינות, לתיעוד יומן ולהפרדת אחריות.
מבחינה טכנית היועץ חי במסוף ותלוי בסשן שלו: סגרתם את החלון — הלוגיקה נעצרה. דוגמה קלאסית — אקספרט ב־MetaTrader, שמצייר חץ וממתין ללחיצה. המתאר האוטונומי מוצא לשרת, שומר מצב בין הפעלות מחדש, שורד ניתוק ערוץ וממשיך להוביל את הפוזיציה.
ההבדל אינו ב"טוב או רע", אלא במחיר הכישלון: אצל היועץ — כניסה שהוחמצה, אצל האוטונומי — עסקה בלי אדם בקרבת מקום.
דרגת האוטונומיה היא לא מתג, אלא סקאלה: אותות בלי ביצוע; אות עם אישור עסקה; אוטומציה חלקית, שבה הכניסה ידנית והיציאה והעברת ההגנה על האלגוריתם; אוטונומיה מלאה עם תקרות על נפח, מספר פוזיציות ונסיגה. ככל שהדרגה גבוהה יותר, כך יותר החלטות מתקבלות בלי אדם, וכך מחמירות יותר דרישות המגנים.
את האחריות להחלטה מקבעים לפני הפיתוח, לא אחריו: היכן האלגוריתם חייב לשאול, מה עושה בפער בין אות למחיר שוק, מי אחראי לביצוע בעת תקלת ערוץ. לכן בכללים אנחנו מגדירים במפורש אילו פעולות דורשות אישור ואילו מבוצעות בשקט, ומשאירים יומן מלא — לפיו רואים למה נפתחה כל פוזיציה.
שאלות טכניות נפוצות: עמידות ושליטה
ההתנגדויות הטיפוסיות בנוגע לאמינות מצטמצמות לארבעה תרחישים: ניתוק תקשורת עם הבורסה ברגע הביצוע, שכפול מקרי של הזמנות, שיפור מערכת שכבר עובדת ותקרות נוקשות להפסד. אנחנו מפרקים כל אחד ברמת המכניקה, לא של ההבטחות.
המפתח לארבעתם — מצב הפוזיציה. הבוט לא מחזיק הזמנות בזיכרון: היומן המקומי נכתב לדיסק, ובהפעלה, אחרי ניתוק ולפני כל הצבה מתבצעת השוואה מול רשימת ההזמנות הפתוחות של הבורסה.
מה יקרה אם התקשורת עם הבורסה תיקטע ברגע העסקה?
ניתוק לא אומר אובדן מצב: היומן נרשם לפני שליחת ההזמנה, ולכן אחרי שחזור הערוץ הבוט מבקש את הפוזיציות הפתוחות ואת היסטוריית הביצוע, משווה ליומן ומפרק פערים. הזמנות חדשות יוצאות רק לאחר השוואה מוצלחת.
האם יכולים להיווצר הזמנות כפולות?
כל הזמנה יוצאת עם מזהה לקוח ייחודי, והשליחה אידמפוטנטית: חזרה על אותה בקשה תידחה על ידי הבורסה ככפילות. לפני ההצבה נבדק אם אין בכלי הזמנה פעילה עם אותו ייעוד.
יש לנו כבר בוט מסחר מוכן — אפשר לשפר אותו?
כן, אם לוגיקת האותות מתאימה. אנחנו מפרידים בין חישוב האותות לשכבת הביצוע, מוסיפים יומן, השוואת מצב ומגנים, בלי לשכתב אסטרטגיה שכבר נבדקה. אם איכות הקוד לא מאפשרת לעשות זאת בבטחה — נגיד זאת בפה מלא ונסמן את הגבול שעד אליו השיפור הגיוני.
איך מוגדרות התקרות ותנאי העצירה?
התקרות חיות מחוץ לאסטרטגיה: גודל פוזיציה מקסימלי, סף הפסד יומי, החלקה מותרת, עצירה בעת אי־זמינות של הבורסה לפרק זמן ארוך מהמוגדר. בעת התפעלות הבוט מסיר הזמנות פעילות ונעצר עד אישור ידני — לא מתרחש "מרדף" אוטומטי אחרי ההפסד.
נדון במשימה ונחזור עם אומדן ותוכנית
כדי שהאומדן של הפרויקט יהיה מדויק ותוכנית העבודה ברת־ביצוע, אנחנו מתחילים מהגדרת המשימה. מספיק לתאר את האסטרטגיה במילים: אילו אינדיקטורים משתתפים בהחלטה, על איזה טיימפריים הם מחושבים, באילו תנאים הבוט פותח פוזיציה ובאילו סוגר.
המהנדסים שלנו מתרגמים זאת לכללים פורמליים ומראים בנפרד את המקומות שבהם הלוגיקה מאפשרת פרשנות כפולה — אי־ודאויות כאלה זול יותר להסיר לפני שורת הקוד הראשונה.
כדי להתחיל את העבודה בדרך כלל נדרש מעט:
- תיאור האסטרטגיה: סט האינדיקטורים, הפרמטרים שלהם, תנאי הכניסה והיציאה, התנהגות בהצטלבות אותות
- מסגרות סיכון: נסיגה מקסימלית, חלק מהפיקדון לעסקה, תקרת פוזיציות במקביל, פעולה בעת ניתוק תקשורת עם הבורסה
- הרשאות: מפתחות מסחר עם איסור משיכת כספים ומתאר בדיקה של הפלטפורמה להרצת הלוגיקה בלי עסקאות אמיתיות
- היסטוריה: ייצוא עסקאות וציטוטים לתקופה, אם האסטרטגיה כבר הופעלה ידנית — נאמת את החישוב על הנתונים שלכם
- תשתית: היכן מאוחסן הבוט, מי מקבל התראות על שגיאות ואיך מתנהל יומן הביצוע
- איש קשר מצד המזמין לעריכות בלוגיקה ולקבלת השלבים
סדר תחילת העבודה זהה בכל נפח: דנים במשימה, מקבעים כללים, חוזרים עם אומדן ותוכנית — שלבים, לוחות זמנים ונקודות שבהן התוצאה נראית לפני המסירה הסופית. אם חלק מהסעיפים ברשימה עדיין חסר, זה לא חוסם: חלק מהנתונים נאסוף בעצמנו בשלב הסקר.
תארו את המשימה בצורה חופשית — בתגובה נשלח ניתוח של האסטרטגיה, רשימת הבהרות ותוכנית עבודה.







