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

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

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

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1376
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1350
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    798
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1093
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1035
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1132

Dynamic position sizing: למה נפח קבוע שובר את המערכת

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

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

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

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

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

מה נותן גודל פוזיציה מנוהל: האפקט במטריקות

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

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

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

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

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

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

Dynamic position sizing: השוואת גישות והמגבלות שלהן

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

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

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

כיצד נבנה האלגוריתם: שלבים מביקורת נתונים ועד מסירה

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

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

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

מה מוסרים לידיים: מודול חישוב, קונפיגורציות, נהלים

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

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

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

קייס: הקטנת drawdown בלי גידול במספר העסקאות

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

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

מה שינינו

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

מדד לפני אחרי
drawdown מקסימלי 34% 17%
התאוששות ההון ~3 חודשים 5 שבועות
עסקאות בחודש 62 60–64
גודל הפוזיציה קבוע 0.4–1.6 מהבסיסי

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

במה שונה חישוב לפי תנודתיות מחישוב לפי סיכון?

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

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

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

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

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

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

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

ספקות טכניים: נתונים, השהיות, עמידות לתקלות

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

עד כמה שלמה המדגם ההיסטורי ומה עושים עם החסרים?

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

כיצד המערכת מתנהגת בהשהיית תגובה או בניתוק קשר?

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

מה עם התאימות והאם אפשר לחזור ללוגיקה הקודמת?

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

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

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

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

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

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