פיתוח מערכת לאופטימיזציית פרמטרים של אסטרטגיה (אלגוריתם גנטי)

חיפוש ידני של פרמטרים של אסטרטגיה נתקל במגבלות המשאבים של הצוות: ככל שיש יותר משתנים, כך החיפוש ארוך יותר והסיכון להתאמת יתר לנתוני עבר גבוה יותר. אנו מפתחים מערכת אופטימיזציה מלאה ומכווננים אלגוריתם גנטי לפי ההיגיון שלכם, קריטריוני היציבות ומגבלות הסיכון. בחירת הפרמטרים מתקצרת פי כמה.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אלגוריתם גנטי במקום סריקה ידנית של פרמטרים

אופטימיזציה מחדש ידנית של אסטרטגיה נראית צפויה: מומחה לוקח סדרה היסטורית, מבצע הרצה, משנה את סף הכניסה, שוב מחשב, מזיז את גודל הפוזיציה, אחר כך את רמת הסטופ. מחזור אחד נמשך מעשרות דקות עד שעות, ובמשמרת נבדקות כמה עשרות קומבינציות — בעוד שמרחב הפרמטרים נמדד באלפי צירופים.

הבעיה אינה רק במהירות. החיפוש מתבצע ברצף, והסט בסופו של דבר מותאם לקטע האחרון של ההיסטוריה: פרמטרים שעבדו במשטר תנודתיות קודם נשברים כשהמגמה משתנה. תוסיפו לכך תלות באדם אחד — עם עזיבתו איש לא ישחזר את היגיון הבחירה, והאופטימיזציה מתחילה מחדש.

אלגוריתם גנטי מחליף סריקה בחיפוש אבולוציוני. מגדירים גבולות לפרמטרים, פונקציית כושר ואילוצי סיכון, ואז פועלת אוכלוסייה של סטים: צירופים חזקים מעבירים ערכים לצאצאים, חלק עוברים מוטציה, חלשים מנופים. בהרצה אחת מוערכים אלפי צירופים, והחיפוש מתכנס לאזור האופטימום, ולא לנקודה בודדת מוצלחת באקראי.

יציבות נבדקת לא על קטע אחד: הכושר מחושב לפי כמה חלונות בלתי תלויים, ולכן הפרמטרים הנבחרים מחזיקים במשטרי שוק שונים. בפלט — לא מספר "טוב" אחד, אלא טווח ערכים וגבולות שמעבר להם האסטרטגיה מתדרדרת.

אופטימיזציה מחדש של האסטרטגיה הופכת לנוהל קבוע: קונפיגורציות ומטריקות של סטים נשמרות, ההרצה חוזרת לפי לוח זמנים, והמומחה מגדיר קריטריוני בחירה במקום בחירה ידנית.

מה משתנה אחרי בחירה אוטומטית של פרמטרים

סריקה ידנית של פרמטרים נתקלת במגבלת האדם: מחזור בחירה אחד נמתח לימים, והסט שנמצא מחזיק רק על קטע היסטורי מוצלח אחד. ברגע שהשוק מחליף משטר, האסטרטגיה נכנסת לדראודאון — זה המחיר של התאמת יתר, ולא שגיאה בקוד.

בחירה אוטומטית של פרמטרים מתרגמת זאת למחזור מדיד. אלגוריתם גנטי מנהל אוכלוסייה של סטים, מעריך כל אחד על כמה חלונות היסטוריה בלתי תלויים ומעניש את אלה שתוצאתם מחזיקה רק על חלון אחד. מהירות הבחירה עולה מיממה לעשרות דקות באותו מערך — השערות נבדקות בעשרות ביום, ולא אחת בשבוע.

המטריקה המרכזית כאן — לא תשואה שיאית, אלא יציבות הפרמטרים: שיעור הסטים ששומרים על התנהגות בקטע מחוץ למדגם. אנחנו בוחרים "פלטו" — אזורים רחבים שבהם ערכים שכנים נותנים תוצאה קרובה — במקום פסגה בודדת שמתפרקת מהזזה הקטנה ביותר.

בחירה רב-קריטריונית מחזיקה תשואה, דראודאון ויציבות בו-זמנית: בפועל זה מממש NSGA-II, גישה מוכחת, ולא יוריסטיקה מאולתרת.

האפקט של אופטימיזציית אסטרטגיה נראה במספרים: שיעור הסטים היציבים עולה משליש לשני שלישים, פיזור התוצאה בין הרצות סמוכות מצטמצם, וסוג הכשלים "האסטרטגיה התפרקה אחרי החלפת משטר" יוצא מהסטטיסטיקה. פרמטרים מפסיקים להיות מציאה חד-פעמית והופכים לתוצאה משוחזרת — אותו מחזור נותן סט דומה.

דרכים לחיפוש אופטימום: השוואת גישות

ממדיות מרחב הפרמטרים קובעת את שיטת החיפוש. עבור אסטרטגיה עם שלושה-ארבעה פרמטרים וטווחים צרים מספיק חיפוש ממצה, אבל ברגע שמוסיפים ספי כניסה, מרווחי החזקת פוזיציה ורמות סיכון, מספר הצירופים גדל כמכפלת הווריאציות בכל ציר.

הרצה אחת על נתונים היסטוריים אורכת שניות — סריקה של אלפי צירופים הופכת לשעות חישוב, ושיעור הנקודות הנבדקות נשאר זעום.

שיטה מתי מתאימה מגבלות
סריקה על גריד 2-3 פרמטרים, ערכים בדידים, נדרשת מפה מלאה של רגישות מספר ההרצות גדל כמכפלת הצעדים; בשש צירים ויותר תקציב החישוב נגמר לפני שהגריד מכסה
חיפוש אקראי פרמטרים רבים, חלקם רציפים, מספר ההרצות מוגבל אין הבטחה לכיסוי אזורים; התוצאה אינה משוחזרת מהרצה להרצה
אופטימיזציה בייסיאנית הערכה יקרה של הרצה אחת, עד עשרה פרמטרים מתקשה להתרחב לעשרות ממדים ולפונקציות מטרה לא רציפות
חיפוש אבולוציוני עשרות פרמטרים, אי-רציפויות ופלטו בפונקציית המטרה, נדרשים כמה פתרונות דורש כיוונון של בחירה, מוטציה וגודל אוכלוסייה; בלי בקרת התכנסות מתנוון לחיפוש אקראי

בפועל משלבים שיטות: סריקה על גריד מצמצמת את האזור, והחיפוש האבולוציוני מדייק בתוכו. לפונקציית הכושר מוסיפים קנס על דראודאון ועל מספר עסקאות קטן, ואת התוצאה בודקים על כמה תקופות היסטוריה — אחרת האופטימום שנמצא יתברר כמהותאם לקטע אחד.

הטמעה: מהגדרת המשימה ועד כיוונון האלגוריתם הגנטי

אופטימיזציה של פרמטרי אסטרטגיה היא לא "הרצה על ההיסטוריה ובחירת השורה הטובה ביותר", אלא תהליך הנדסי עם קריטריוני קבלה מוגדרים. סדר השלבים זהה למשימות מסחר ולמשימות איזון: משתנה רק סט הפרמטרים שעוברים אופטימיזציה וסוג פונקציית המטרה.

  1. פירוק האסטרטגיה. מגדירים מה בכלל נתון לחיפוש (תקופות של אינדיקטורים, ספי כניסה ויציאה, גודל פוזיציה), ומה נשאר אילוץ קשיח — כללי ניהול סיכון לא עוברים אופטימיזציה לעולם.
  2. פונקציית המטרה של האסטרטגיה. לוקחים מטריקה עמידה לדראודאונים, ולא תשואה מקסימלית: למשל, יחס התשואה לדראודאון המקסימלי עם אילוץ על מספר עסקאות מינימלי במדגם.
  3. הכנת נתונים. ההיסטוריה מחולקת לקטעי אימון, ולידציה ובקרה; קטע הבקרה מבודד מהחיפוש ונפתח בדיוק פעם אחת — לפני המסירה.
  4. כיוונון האלגוריתם הגנטי. מגדירים גודל אוכלוסייה, שיעורי מוטציה והכלאה, מספר דורות, אליטיזם, קנסות על סיבוך יתר ועל יציאת פרמטרים מהגבולות המותרים.
  5. בדיקה מחוץ למדגם. הפתרונות הטובים מורצים על קטע הבקרה ועל חלונות מוזזים, ובנוסף בדיקת רגישות: שינוי קטן בפרמטר לא אמור לשבור את התוצאה.
  6. מסירה. מקבעים שתיים-שלוש קונפיגורציות עם מדדים קרובים, מתארים את גבולות היציבות ומפיקים דוח עם הרצות משוחזרות — אותם נתוני קלט נותנים את אותה תוצאה.

בפלט הלקוח מקבל לא כיוונון "מושלם" אחד, אלא סט קונפיגורציות יציבות והבנה היכן מתחילה הדרדרות.

מה הלקוח מקבל לידיו אחרי ההטמעה

אחרי העלאת המערך לפעולה אתם מקבלים לא סט סקריפטים, אלא ערכה שלפיה בחירת הפרמטרים משוחזרת בלי המחברים: מגבולות מרחב החיפוש ועד כללים מתי מופעל אימון מחדש ומתי הגיע הזמן לעצור את האסטרטגיה.

  • קונפיגורציית מערכת הבחירה — קבצי הרצה עם מרחב החיפוש: גבולות וצעד לכל פרמטר, גודל אוכלוסייה, מספר דורות, אופרטורי מוטציה ובחירה, seed קבוע לשחזוריות.
  • תרשים מערך החישובים — מאיפה מגיעים הנתונים ההיסטוריים, היכן מחושב הכושר של הפתרונות, איך התוצאות נאספות למאגר ומה קורה כשהמחשב נופל באמצע דור.
  • סט מטריקות בחירה — פונקציות מטרה וקנסות: תשואה, דראודאון, מחזור, יציבות על חלון נדחה. מצוין איזו מטריקה מובילה ואילו ספים מפילים פתרונות שבריריים מראש.
  • כללי גישה — תפקידים להרצה, עריכת קונפיגורציה וצפייה בתוצאות: מה זמין לאנליסט, מה רק לבעל המערך, ואיך מתועד שינוי של כל פרמטר.
  • תיעוד האופטימיזציה — תיאור ההיגיון של האלגוריתם הגנטי, מילון פרמטרים, ניתוח תקלות אופייניות בבחירה והוראות להוספת שדות חדשים למרחב החיפוש.
  • נוהל הרצות — תדירות בחירה חוזרת, חלון נתונים, תנאי עצירה וסדר השוואה בין קונפיגורציה חדשה לזו שכבר עובדת.
  • מסירת המערכת — הדרכת הצוות שלכם על התשתית שלכם, צ'ק-ליסט קבלה ותקופת ליווי אחרי העלאה.

מקרה בוחן: בחירת פרמטרים של אסטרטגיה לפני ואחרי אוטומציה

הלקוח בחר את פרמטרי האסטרטגיה ידנית: אנליסט ערך ערכים, הריץ על נתונים היסטוריים, השווה עקומות וחזר על המחזור. סבב אחד נמשך שבועיים-שלושה, ובזמן הזה הספיקו לעבור כמאתיים סטים — פס צר סביב ניחוש ההתחלה.

נבחר סט עם התשואה הטובה ביותר על ההיסטוריה, ועל נתונים חדשים הוא ברוב המקרים התפרק: השוק עבר למשטר אחר, והפרמטרים נשארו מותאמים לעבר. סוג כשל כזה בטוח יותר לסגור בכלל בחירה מאשר לפרק את ההשלכות במסחר חי.

את הבחירה העבירו לאופטימיזטור מבוסס אלגוריתם גנטי: סט פרמטרים — כרומוזום, הרצה על נתונים — הערכת כושר, והלאה הכלאה ומוטציה של הפרטים הטובים. הסריקה נבנתה על ספרייה בוגרת לאופטימיזציה אבולוציונית DEAP — ההרצה לא דרשה כתיבת מנוע מאפס.

השינוי המרכזי בקריטריון הבחירה: הכושר חושב לא לפי הרצה אחת, אלא לפי כמה קטעי היסטוריה עוקבים, ופתרון שאיבד יציבות לפחות באחד מהם נפסל.

מחזור הבחירה הצטמצם משבועות ללילה אחד, מספר הסטים הנבדקים עלה ממאתיים לעשרות אלפים בהרצה, ושיעור הקונפיגורציות ששומרות על מטריקות עבודה בנתונים חדשים עלה מרבע אחד לשני שלישים בערך.

כללי הבחירה, טווחי הפרמטרים ויומני ההרצות נשמרים, ולכן כל תוצאה משוחזרת ומחושבת מחדש בהרצה הבאה.

מה לעשות אם בחירת הפרמטרים כבר נעשית בכוחות עצמכם?

בחירה עצמית שעובדת היא נכס, לא חוב: בה מוטבעים ההיגיון של האסטרטגיה ומאפייני הביצוע. אנחנו לא מציעים לכתוב הכול מחדש — קודם ביקורת: איך נבנית פונקציית הכושר, איך בנויים בחירה, הכלאה ומוטציה, והיכן המערך מאבד יציבות.

נקודת המפתח באודיט — הפרדת נתונים: אם פרמטרים נבחרים ומוערכים על אותה היסטוריה, התוצאה הטובה ביותר כמעט תמיד מתגלה כהתאמת יתר לרעש. בודקים דטרמיניזם של ההרצה, קיום תקופת בדיקה, והאם קריטריון הבחירה מתחשב בדראודאון, בעמלות ובסליפג', ולא רק בתשואה.

העברת החישובים מוצדקת לא תמיד: כשהמערך לא מתרחב לפי מספר ההרצות, מחשב שעות במקום שבו נדרשות דקות, או לא יודע להקביל חלונות בלתי תלויים. בשאר המקרים פשוט יותר לשפר את הבחירה הקיימת — להוסיף תקופת בדיקה, יציבות פרמטרים בין חלונות ותיעוד הרצות.

משווים את שני המערכים על אותו סט נתונים, עם אותן עמלות, השהיות ביצוע וקריטריון איכות אחד. מסתכלים לא על ההרצה הטובה ביותר, אלא על ההתפלגות לפי חלונות: פיזור הרווח, הדראודאון המקסימלי, שיעור החלונות ברווח וזמן החישוב.

בכל שיפור אנחנו שומרים על פונקציית הכושר שלכם, סט הפרמטרים וכללי הביצוע — זה הערך המהותי של המערכת. אנחנו בונים מחדש את תשתית הבחירה: סכמת ולידציה, בחירה, תיעוד ושחזוריות של הרצות.

ספקות טכניים ושאלות של יציבות התוצאה

כל אופטימיזציה של פרמטרים מסתכנת בהתאמת יתר לנתונים היסטוריים: האלגוריתם מוצא ביושר צירוף אידיאלי על קטע עבר, והוא מתפרק בנתונים חדשים. להלן התנגדויות שעולות אצל מהנדסים לרוב, ואיך אנחנו מסירים אותן בנהלים, לא בהבטחות.

איך להבדיל בין אסטרטגיה עובדת לאסטרטגיה מותאמת יתר?

את הבחירה מבצעים על מרווח אחד, ואת הבדיקה — על קטע בקרה שלא השתתף בחיפוש. בנוסף בודקים יציבות פרמטרים: אם צירופים קרובים נותנים תוצאה שונה, האופטימום אקראי, וכיוונון כזה לא נכנס לעבודה.

מה לעשות עם גידול במספר הפרמטרים?

כל פרמטר חדש מרחיב את מרחב החיפוש ומגביר את סיכוי ההתאמה. מגבילים את הממדיות, מקבצים פרמטרים קשורים, חלק מקבעים לפי היגיון האסטרטגיה ומכניסים קנס על מורכבות הפתרון. פרמטרים שלא משפיעים על התוצאה מוציאים — זו מגבלה של השיטה, לא חוסר כיוונון.

איך זה משתלב במערך החישובים הנוכחי?

מודול האופטימיזציה קורא את אותם נתונים ומחזיר סט פרמטרים עם מטריקות איכות, ובלוגיקת הביצוע אנחנו לא נוגעים. הרצה לפי לוח זמנים או ידנית, התוצאה מקבלת גרסאות, ולכן תמיד אפשר להשוות אותה להגדרות הנוכחיות ולחזור אליהן.

נדון במשימת בחירת הפרמטרים של האסטרטגיה שלכם

כדי שההערכה ותוכנית העבודה יישענו על הנתונים שלכם ולא על הנחות כלליות, מספיקים כמה פרטי רקע. להלן מה לשלוח לניתוח; את השאר נדייק בהתכתבות.

  • תיאור האסטרטגיה: היגיון כניסה ויציאה, אילו פרמטרים נבחרים ואילו מקובעים קשות.
  • היסטוריית עסקאות או שערי שוק בצורת המקור — טבלה, ייצוא מהטרמינל, קובץ ממסד נתונים.
  • גבולות הערכים המותרים לכל פרמטר והצעד שבו אפשר לשנותם.
  • המטריקה שאתם מחשיבים כמטרה: תשואה בהתחשב בסיכון, דראודאון, שיעור עסקאות רווחיות, יציבות לפי תקופות.
  • דרישות לבדיקה: איך לחלק את הנתונים לחלונות אימון ובקרה, כמה זמן מותר להרצת בחירה אחת.
  • אילוצי חישוב: היכן להריץ את החיפוש, האם נדרש חישוב מקבילי על כמה מחשבים.

בתשובה נחזיר הערכה ותוכנית עבודה מפורטת לפי שלבים: הכנת נתונים, כיוונון החיפוש הגנטי, בדיקת התוצאה מחוץ לחלון האימון, ניתוח הדוח, מסירה. בנפרד נציין פרמטרים רגישים להתאמת יתר ונראה איך נקבע אותם לפני הרצת בחירת הפרמטרים.

תארו את משימת האופטימיזציה במילים שלכם — זה יספיק כדי לדון במשימת האופטימיזציה באופן ענייני ולציין לוחות זמנים לכל שלב.