מדוע מסחר ב-TD3 נתקע בסביבת האימון
סוכן שאומן על נתונים היסטוריים מציג עקומת תשואה חלקה ומאבד אותה בשבועות הראשונים בחשבון חי. הסיבה כמעט תמיד אחת: סביבת האימון של הסוכן מתארת את השוק בצורה מדויקת יותר מאשר את העסקה עצמה.
הסוכן רואה את מחיר אמצע הספרד וביצוע מיידי, בעוד שהזמנה אמיתית מקבלת מחיר גרוע יותר בשיעור הספרד והסליפאז', והאישור מגיע באיחור.
אם פונקציית התגמול מחשבת רווח ממחיר אידיאלי, המדיניות מתכנסת לתדירות עסקאות גבוהה: כל צעד מניב יתרון מדומה, והעלויות אינן מנוכות ממנו. TD3 עם שני קריטיקים, עדכון מדיניות מושהה והחלקה של פעולת היעד מפחית את הערכת היתר של הערך, אך אינו מבטל את ההטיה המוטמעת בסביבה עצמה.
החצי השני של הבעיה — אי-נייחות. למידת חיזוק למסחר מתבצעת על נתונים של משטר תנודתיות אחד, והסוכן זוכר לא את החוקיות אלא את המצב הספציפי: הנזילות או מבנה ההזמנות השתנו — והמדיניות מתפרקת. עמידותו של הסוכן בשוק האמיתי נקבעת לא לפי גודל הרשת, אלא לפי מגוון המשטרים שהוא עבר באימון.
לכן הסביבה נבנית כמודל ביצוע: עלויות כפונקציה של נפח ותנודתיות, השהיה בין האות לאישור העסקה, הגבלה על הנזילות הזמינה, צעד לפי זרם הציטוטים האמיתי ולא לפי נר מוחלק. נוספים רנדומיזציה של משטרים והרצות נפרדות על הזזת התפלגות — הסוכן חייב לתרגל תרחישים שלא היו במדגם. בהמשך נפרט כיצד זה נסגר בפועל.
מה נותן סוכן מאומן עם בקרת סיכונים
בקרת הסיכונים מוצאת כשכבה נפרדת בין הסוכן לביצוע: הסוכן מציע גודל פוזיציה מטרה, והכללים מגבילים אותה לפי מכשיר, חשיפה כוללת ופיזור מותר. הדראודאון מצטמצם לא בזכות «ניחוש» של היפוך, אלא משום שתנועות חדות נדירות אינן הופכות להימור גדול. המגבלות נקבעות לפני האימון ואינן נכתבות מחדש יחד עם המשקלים — כלומר, תרומתן ניתנת למדידה בנפרד.
עמידות לתנודתיות מושגת באמצעות נרמול המאפיינים ביחס למשטר הנוכחי וקנס על דראודאון בפונקציית התגמול עצמה, ולא רק על תשואה. מסחר ב-TD3 עובד עם פעולה רציפה, ולכן גודל הפוזיציה משתנה בהדרגה, בלי קפיצות בעת החלפת מגמה.
האלגוריתם נשען על Addressing Function Approximation Error in Actor-Critic Methods: זוג קריטיקים מפחית את הערכת היתר של הערך, והסוכן אינו מתחיל לסחור ביתר במקומות שבהם רשת בודדת מתבדרת.
יכולת השחזור של האימון נשענת על קיבוע התנאים ולא על מזל של הרצה: משקלים ראשוניים, סדר הזנת הנתונים, חיתוך ההיסטוריה ותצורת הסביבה נשמרים יחד עם נקודת הביקורת. פרופיל התשואה של האסטרטגיה משוחזר בהרצה חוזרת, והפער בין המדדים נכנס למסדרון צר. הרצות רגרסיה על כמה חלונות היסטוריים מראות את ההידרדרות לפני היציאה למסחר אמיתי.
בנפרד נעלם סוג הכשלים שעלה הכי ביוקר: עקיפות ידניות של לימיטים, עסקאות «הדבקה» אחרי תנועה חדה וחוסר התאמה בין לוגיקת האסטרטגיה למודול הסיכונים.
גישות למסחר ב-TD3: סימולטור, סנדבוקס, חשבון אמיתי
סוכן TD3 לומד על מעברים של «מצב — פעולה — תגמול», ואיכות המעברים האלה קובעת את התנהגות המדיניות. אותו אלגוריתם עם אותן הגדרות מתנהג אחרת בהתאם למקום שבו הוא מקבל נתונים: במודל שוק, במעגל בדיקה של הברוקר או בחשבון חי.
המשטרים אינם מחליפים זה את זה אלא הולכים בשכבות: כל אחד מוסיף את מה שהקודם לא משחזר — השהיית ביצוע, סליפאז', מילוי חלקי של הזמנה, ניתוק ערוץ. לכן את המעבר בין המשטרים אנו עושים כשלב נפרד עם תיעוד מדדים, ולא כהחלפה של פרמטר אחד.
| משטר אימון | מתי מתאים | מגבלות |
|---|---|---|
| סימולטור שוק | כיוונון ארכיטקטורה, בחירת מאפיינים, בדיקת עמידות המדיניות על חלונות היסטוריים | מודל הביצוע מקורב: אין תור הזמנות אמיתי והשפעת העסקה על המחיר |
| סנדבוקס של הברוקר | בדיקת החיבור בין הסוכן למעגל המסחר, השהיות ופורמטים של הזמנות | חשבון בדיקה אינו משחזר את תגובת השוק לנפח |
| מעגל מסחר אמיתי | ולידציה סופית בסיכון קטן ובנפח מוגבל | הפסדים בלתי הפיכים במקרה של טעות, נדרשים לימיטים ובקרה ידנית |
כיצד לבחור משטר
הבחירה נקבעת לפי הסיכון שנבדק, ולא לפי נוחות. לעמידות בפני החלפת תנודתיות מספיק סימולטור עם כמה תרחישים; כדי להבין אם המדיניות תשרוד השהיות ועלויות אמיתיות דרוש סנדבוקס, והמעבר למעגל אמיתי — רק אחריו.
שלבי ההטמעה: מביקורת נתונים ועד מסירת הסוכן
המסלול מחולק לשלבים כך שהתוצאה של כל אחד נבדקת לפני המעבר לבא אחריו: בלי נתונים נקיים ומטרה מפורמלת האימון הופך להתאמה לנתוני עבר ולא לאסטרטגיה עובדת.
- ביקורת נתונים היסטוריים. אנו בודקים את עומק ההיסטוריה לפי מכשירים, חוסרים, פיצול מרווחים, פערים בין מקורות. גאפים ונרות שחושבו מחדש בדיעבד נחתכים או משוחזרים — אחרת הסוכן ילמד ארטיפקטים של התיעוד ולא את התנהגות השוק.
- הגדרת פונקציית המטרה. אנו מקבעים מה מייעלים: תשואה מתוקננת לסיכון, דראודאון, מחזור, עלויות. ב-TD3 זו פונקציית התגמול — ממנה תלוי אם הסוכן יתחיל לסחור או יחזיק פוזיציה לשם הסטטיסטיקה.
- סכמת מגבלות סיכון. אנו מגדירים לימיטים על גודל פוזיציה, הפסד יומי, מינוף ותדירות עסקאות. את המגבלות מוציאים לשכבת הביצוע, מחוץ לסוכן — אז הן פועלות בכל התנהגות של המודל.
- אימון וכיוונון. אנו מחלקים את ההיסטוריה לתקופות, מקבעים את מחולל המספרים האקראיים ואת פרמטרי הסביבה, ורושמים כל איטרציה. כך כל אנומליה בתוצאות ניתנת לשחזור, ולא לדיון מילולי.
- בדיקת הסוכן. מריצים על חלון מתגלגל ותקופה מושהית נפרדת, כולל החלפת משטר שוק. משווים לאסטרטגיות ייחוס פשוטות ובוחנים את ההתנהגות בדראודאון, ולא רק את התשואה הסופית.
- מסירת הפתרון. אנו מוסרים משקלים מאומנים, תצורות, קוד סביבה, תיעוד ותקנון אימון מחדש. בנפרד מתארים את כללי העצירה של הסוכן ואת החזרה לגרסה הקודמת.
ארטיפקטים של הפרויקט: קוד, תצורות, תקנונים, תרשימים
פרויקט נמסר לא כשהסוכן הציג עקומה יפה על ההיסטוריה, אלא כשהצוות שלכם יכול להעלות אותו, לשנות אותו ולעצור אותו בלעדינו. לכן אנו מוסרים לא רק את משקלי המודל אלא את כל המעגל סביבם.
- קוד מקור — מאגר עם האימון ומעגל המסחר: מימוש TD3, סביבת סימולציה של השוק, עטיפות מעל API של הברוקר, בדיקות. הבנייה על מכונה נקייה משוחזרת.
- תצורות הסביבה — היפר-פרמטרים של הסוכן, מערכי מאפיינים ואופקים בקבצים נפרדים, נערכים בלי לגעת בקוד. פרופילי האימון והמסחר מופרדים, והניסוי אינו פוגע במצב העבודה.
- נקודות ביקורת של המודל — מצבי הסוכן השמורים יחד עם מנרמלי המאפיינים. חזרה לגרסה קודמת היא החלפת תיקייה, ולא אימון מחדש.
- מדיניויות גישה — מי מריץ את האימון, מי משנה את לימיטי הסיכון, מי מוציא את הסוכן מהמסחר. מפתחות הברוקר נשמרים מחוץ לקוד ומחוץ להיסטוריית השינויים.
- תקנון ניטור — דראודאון, שיעור ההזמנות הנדחות, פער בין התשואה בפועל לסימולציה; ספי הפעלה וסדר העצירה של הסוכן.
- תיעוד הפתרון — תרשים ארכיטקטורה, תיאור המאפיינים ופונקציית התגמול, יומן ניסויים, הוראות הרצה ושחזור.
את המסירה סוגרים בהרצות משותפות במעגל שלכם: אתם בעצמכם מעלים את הסוכן מהמאגר, משנים תצורה וחוזרים על תרחיש העצירה. צריך הרחבה — תארו את המשימה, נחזור עם הערכה ותוכנית.
קייס: סוכן בשוק הסחורות — מדדים לפני ואחרי
המשימה הגיעה מהכיוון המסחרי בשוק הסחורות: להסיר מהסוחר את הניהול הידני של הפוזיציה בחוזים עתידיים על מתכות. הכוונה לא לחיזוי מחיר אלא לביצוע — גודל הכניסה, הגדלה עם אישור התרחיש, קיצוץ סיכון בתנועות חדות. כללים שנכתבו ידנית החזיקו היטב פרופיל תנודתיות רגוע והתפרקו בגאפים ובנזילות דקה.
צוואר הבקבוק התברר לא כד�יוק האות אלא כהתנהגות האסטרטגיה במצב חריג: מערך התנאים התבדר, הפוזיציה נשארה פתוחה מעבר לתוכנית, וחלק מהימים נסגרו בחריגה מלימיט הסיכון.
סוכן TD3 החליף את המערך הזה במדיניות אחת — פעולה רציפה לפי גודל הפוזיציה, אימון על נתונים היסטוריים תוך התחשבות בעמלה ובסליפאז'.
בנפרד כיווננו קנס על הפרת לימיט הסיכון וזכות לא להיכנס לעסקה אם משטר השוק אינו מוכר למדיניות המאומנת. זה נתן יותר מאשר תוספת תשואה: הסוכן נמנע מפעולה כראוי במקומות שבהם הערכותיו סוטות מהמציאות.
מדדים לפני ואחרי: הדראודאון המקסימלי הצטמצם מ-17% ל-9%, שיעור הימים עם חריגה מלימיט הסיכון — מ-7% לאפס, ופיזור התוצאה בין חודשים הצטמצם בערך פי שלושה. יציבות הביצוע עלתה משום שההחלטה על הפוזיציה מתקבלת בצעד אחד ואינה תלויה בגורם האנושי.
לפני ההרצה עברנו בדיקה על תקופה מושהית ועל משטר עם נזילות שהורעה באופן מלאכותי, ואת המעבר עשינו בעבודה מקבילה של הלוגיקה הישנה והסוכן עם בקרה ידנית של הלימיטים.
מה לעשות אם כבר יש לכם סוכן משלכם
הצעד הראשון — ביקורת המודל. משחזרים את האימון עם זרע קבוע ובודקים אם התוצאה נשענת על הרצה מוצלחת אחת: אם הפיזור בין הרצות דומה ליתרון המוצהר, הבעיה אינה בארכיטקטורה.
בנפרד בוחנים את הסביבה לחשש של הצצה לעתיד, התחשבות בעמלה ובסליפאז' — שם לרוב אובד הקשר בין ההיסטוריה להתנהגות בפועל.
אם האימון משוחזר, עוברים לשדרוג הסוכן הקיים ב-TD3: מרחיבים את מרחב המצבים במאפיינים שהוא אינו רואה, בונים מחדש את פונקציית התגמול לפי סדרי העדיפויות שלכם, מאמנים נוסף על משטרי שוק שלא נכנסו למדגם ומוסיפים רגולריזציה כדי שהמדיניות לא תסתכם באסטרטגיה אחת.
כשהפער בין האימון למסחר מצטבר, בונים מחדש את סביבת האימון: סימולטור ביצוע עם נזילות מוגבלת, השהיות ועסקאות חלקיות, חלונות מתגלגלים במקום קטע היסטוריה ארוך אחד, ומערכים נפרדים למגמה, לדשדוש ולתנודתיות גבוהה. לעיתים קרובות הסוכן מתנהג אחרי זה ביציבות רבה יותר בלי שינויים ברשת עצמה.
התרחיש השלישי — מעגל בקרת סיכונים סביב סוכן עובד, אם שינוי המודל כרוך בסיכון. לימיטים על גודל פוזיציה ודראודאון יומי, כיבוי חירום, מצב צל על נתונים אמיתיים, יומן החלטות ומדדי פער בין ההתנהגות הצפויה לזו שבפועל.
הבחירה תלויה במסקנות הביקורת: האם האימון משוחזר, היכן אובדת היציבות, והאם יש גישה לסביבה ולנתונים. כתבו מה כבר נבנה — נחזור עם הערכה ותוכנית.
ספקות טכניים לפני הרצת הסוכן
לפני העלאת הסוכן לחשבון אמיתי עולים ארבעה שאלות: האם המדיניות תשמור על התוצאה עם החלפת משטר השוק, האם איכות הנתונים תספיק, האם המודל לא עבר אימון יתר, ומי אחראי לסיכון במקרה של החלטה שגויה.
כיצד הסוכן שורד החלפת משטר שוק?
את המדיניות מאמנים על חלונות עם מגמה, דשדוש ונפילות משבר, ובודקים על קטע היסטוריה נפרד. במעגל העבודה עוקבים אחרי תנודתיות, קורלציות ודראודאון בחלון מתגלגל: יציאה מהגבולות מעבירה את הסוכן למצב שמרני עם הקטנת פוזיציות.
כיצד אתם בודקים את איכות הנתונים?
מצליבים ציטוטים מכמה מקורות, משחזרים גאפים במסחר, מאחדים את מסגרות הזמן לרשת אחת, ובנפרד מנטרים הטיית שרידות בניירות שהוסרו מהמסחר. לכניסה של TD3 מגיעים רק טורים נקיים, אחרת הסוכן לומד על ארטיפקטים של זרם הציטוטים.
כיצד למנוע אימון יתר?
את ההיסטוריה מחלקים לפי זמן ולא באקראי — כך שוללים דליפת מידע מהעתיד, ואת התקופה המושהית שומרים כמסננת סופית. עצירה מוקדמת, הגבלת מורכבות המדיניות ואנסמבל של כמה הרצות אימון בלתי תלויות נותנים פתרון יציב במקום הרצה מוצלחת אחת.
היכן האחריות שלנו והיכן שלכם?
אנחנו אחראים לקוד, לאימון, לאינטגרציה עם שער הברוקר (למשל Interactive Brokers), לניטור וליומן ההחלטות של הסוכן. לימיטים על פוזיציה, דראודאון יומי ועצירה אוטומטית מאשרים אתם — המעגל שלנו אינו עוקף אותם.
מוסרים את הסוכן לצוות ומלווים את ההרצה
העבודה מתחילה לא בקוד אלא בנתונים ובהרשאות. דרושים ציטוטים היסטוריים ויומן עסקאות על פני טווח שמכסה משטרי שוק שונים — מגמה, דשדוש, היפוכים חדים — ומעגל בדיקה מבודד מהחשבון האמיתי.
מהמזמין נדרש מהנדס שלוקח את הקוד ונשאר הבעלים של המערכת: בלי אחראי מצדכם המסירה מתנוונת להדגמה חד-פעמית.
את תוכנית העבודה מקבעים לפני ההתחלה ומחזיקים אותה כהסכם לפי לוחות זמנים:
- ביקורת נתונים: שלמות ההיסטוריה, חוסרים, הסטות זמן, נכונות חישוב התשואה.
- עמדת אימון: סביבה שבה סוכן TD3 לומד על ההיסטוריה ואינו נוגע בהזמנות אמיתיות.
- בדיקה על קטע מושהיה: הסוכן רואה נתונים שלא היו באימון.
- קבלה לפי מדדים: דראודאון, התאוששות אחרי החלפת משטר, עמידות לסליפאז'.
- הכשרת צוות המזמין: סקירת הארכיטקטורה, הרצה מחדש של האימון באופן עצמאי, קריאת יומנים.
- ליווי ההרצה: תורנות בהרצות הראשונות, ניתוח פערים בין עמדת האימון למעגל העבודה.
- מסירת הפתרון לצוות: מאגר, תצורות, תקנון אימון מחדש וחזרה למודל הקודם.
הטקס הסופי — קבלה בנוכחותכם: מריצים אימון על הנתונים שלכם, והצוות שלכם עושה זאת בפעם השנייה בעצמו. אחרי המסירה ליווי ההרצה מתנהל לפי תקנון שבו כתוב מראש מי עושה מה כאשר המדדים סוטים מערכי הבקרה.







