‏הצגת רשומות עם תוויות profit factor. הצג את כל הרשומות
‏הצגת רשומות עם תוויות profit factor. הצג את כל הרשומות

יום שני, 30 באפריל 2012

אופטימיזציה - לא מה שחשבתם (חלק ג' ואחרון)

בשני הפוסטים האחרונים סקרנו את החסרונות באופטימזיציה "עיוורת" אשר אינה מותאמת לתנאי השוק המשתנים חדשים לבקרים, והתוודענו לטכניקת ה-WFA - Walk Forward Analysisאשר מנתחת את יכולת השרידות והריווחיות של סיסטם לאורך זמן ע"י הרצת איטרציות רבות של אופטימיזציה על פני תקופות עוקבות, כאשר לכל איטרציה מחושב סט פרמטרים אופטימלי משלה אשר נבדק בתקופה העוקבת לשם "הוכחת יכולת".    

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

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

ולעצם העניין. הסיסטם הבא הוא סיסטם יומי, "עוקב מגמה" (trend follower), המבוסס על המשכיות המומנטום של היום האחרון, בהנתן מומנטום אשר "פורץ" ערך סף כלשהו. הרעיון שעומד מאחורי הסיסטם הוא שכאשר מתרחשת תנועת מחיר חריגה לכיוון מסויים, המומנטם ימשך לפחות עוד מספר ימים לפני דעיכתו.   

הסיסטם:
1.      כניסה לפוזיציית לונג – אם טווח המסחר ביום האחרון (מחיר הסגירה פחות מחיר הפתיחה) היה גדול יותר מ- x פיפס, והיה זה יום חיובי (מחיר הסגירה גבוה ממחיר הפתיחה).
2.      כניסה לפוזיציית שורט – אם טווח המסחר ביום האחרון (מחיר הסגירה פחות מחיר הפתיחה) היה גדול יותר מ- x פיפס, והיה זה יום שלילי (מחיר הסגירה נמוך ממחיר הפתיחה).
3.      סגירת פוזיציה פתוחה – לאחרy  ימים בהם הפוזיציה פתוחה.
מגבלות והנחות:
·         פוזיציה אחת פתוחה בו זמנית.
·         הרצה על גרף יומי.
·         בדיקת המחיר תתבצע על מחיר הפתיחה בלבד (אין מסחר תוך יומי)
·         גודל פוזיציה קבוע – 0.1 לוט, חשבון מיני עם Equity התחלתי של 1000$ (מינוף 1:1)

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

בגרף הבא ניתן לראות את הסיסטם בפעולה, כאשר x (טווח הפריצה) שווה 100 פיפס, ו-y (תקופת האחזקה) שווה 20 יום:


ניתן לראות שלושה טריידים, שניים מוצלחים והשלישי מופסד. בטרייד הראשון, לאחר יום עם טווח מסחר חיובי של 115 פיפס נכנסנו ללונג, ויצאנו לאחר 20 יום עם רווח של 390 פיפס. בטרייד השני נכנסנו לשורט לאחר נר שלילי של 105 פיפס ויצאנו לאחר 20 יום עם רווח של כ-50 פיפס. בטרייד השלישי, עסקת שורט שבוצעה לאחר נר שלילי של 125 פיפס, הפסידה לאחר 20 יום כ-80 פיפס.

תהליך ה-
WFA:  
הסיסטם נבדק על הצמד EURUSD מתחילת שנת 2007 ועד אפריל 2012, כלומר על פני 5 שנים, עם תקופת אופטימיזציה של 30 יום, ותקופת בדיקה של 8 יום.
התהליך כלל:
1.       אופטימיזציה של הפרמטר x מ- 50 פיפס עד 500 פיפס בקפיצות של 10 פיפס.
2.       אופטימיזציה של הפרמטר y, מיום ועד 50 יום, בקפיצות של יום.
התוצאות:
הגרף הבא מתאר את עקומת הרווח לאורך 5 שנות הבדיקה, בשימוש בפרמטרים מתקופות הבדיקה העוקבות שחושבו בתהליך ה-WFA. הסיסטם הניב 210% לאורך חמש שנים, או 42% בממוצע לשנה. ניתן לראות כי בשורה התחתונה הסיסטם ריווחי, וכי ניתן לתחזקו לאורך זמן ע"י אופטימיזציות חוזרות ונשנות.



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

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



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

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



הגרף מראה את התפלגות העסקאות (פר תקופת בדיקה), על פי הפרמטר x. כיוון שהרצנו את תהליך ה-WFA עבור x מ-50 ל-200, כל העסקאות נופלות בטווח הנ"ל. בבחינה קצת יותר מעמיקה של הגרף ניתן לראות כי כאשר x גדול מ-100, ישנן יותר עסקאות מפסידות מאשר מרוויחות, הן בכמות והן בערך הרווח/הפסד עצמו. באמצעות נתון זה ניתן לטייב את הסיסטם מיידית ע"י פילטור של כל העסקאות בהן x גדול מ-100.
שימו לב לגרף הרווח/הפסד לאחר האופטימיזציה הנ"ל:



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

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

יניב.


-----------------------------------------------------------------------------------------------------------------------

לא רוצים לפספס את כתבת ההמשך? הירשו לבלוג וקבלו עדכון מיידי על פוסטים חדשים. ניתן לקבל עידכונים במייל, בפייסבוק, בטוויטר, או באמצעות RSS. ההרשמה באמצעות הטופס בתחילת העמוד -  "Subscribe Now".


 



יום שני, 13 בפברואר 2012

אופטימיזציה - לא מה שחשבתם (חלק ב)


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

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

אז מה בכל זאת עושים?

תכירו את טכניקת ה- WFA Walk Forward Analysis. תרגום מוצלח יזכה אתכם בחופשה חלומית מתנת האקדמיה ללשון העברית (דרך אגב, הידעתם כי "אקדמיה" אינה מילה עברית?). טכניקת ה-WFA  היא כלי רב עוצמה לבדיקה האם אסטרטגיה/סיסטם יכול בכלל  "לשרוד" תהליך של טיוב פרמטרים. במילים אחרות, באמצעות שימוש בטכניקה זו, ניתן לבחון האם רעיון האופטימיזציה על סיסטם, ונסיון לבחור סט אופטימלי של פרמטרים, עומד במבחן המציאות ובעל פוטנציאל רווחיות לאורך זמן.

אוקיי, מילים גבוהות. איך זה עובד בפועל?

הפרוצדורה די פשוטה. מריצים אופטימיזציה על תקופה X (in sample), ובוחנים את תוצאות האופטימיזציה על תקופה עוקבת Y (out of sample). חוזרים על התהליך מספר פעמים כאשר בכל פעם מתקדמים על ציר הזמן בתקופות X  ו-Y. כלומר לכל תקופה Y שהיא בעצם "העתיד" שלנו נכון לרגע ההרצה, מתאימים סט אופטימלי של פרמטרים שנגזר מהתקופה הקודמת לה. התהליך בעצם "צועד קדימה" על ציר הזמן, ומתאים סט פרמטרים אופטימלי לכל תקופה, וכך שומר על סוג מסויים של קורלציה עם תנאי השוק המשתנים.

להלן תיאור סכימתי של התהליך:



המלבנים הכחולים מציינים את תקופת האופטימיזציה – In sample, והמלבנים הירוקים, את תקופת "הבדיקה" של אותו סט פרמטרים אופטימלי אשר התקבל בתקופת האופטימיזציה הסמוכה לה (Out of Sample). בדוגמא זו אנו מריצים אופטימיזציה על פני 4 חודשים, ובודקים את תוצאותיה על החודש העוקב. בסופו של התהליך, מקבלים תוצאות "אמת" ריאליות של כל תקופות הבדיקה – החלק התחתון בתרשים. הרצה של תהליך WFA של פני תקופת זמן ארוכה, יכולה לספק תמונה די ברורה לגבי פוטנציאל הריווחיות של הסיסטם. אם כאשר סוכמים את רווחי הסיסטם בכל תקופות הבדיקה מתקבלת תוצאה חיובית, הרי שהסיסטם בעל פוטנציאל להרוויח בתנאי שוק משתנים. אם לעומת זאת התוחלת שלילית, הרי שבעצם לא משנה מה נעשה, וכמה אופטימיזציות נבצע – הסיסטם לא ישרוד לאורך זמן בתנאי שוק דינמיים.

ניתן לבצע WFA בצורה ידנית – להריץ אופטימיזציה ידנית על תקופה X, למצוא את סט הפרמטרים האופטימלי, לבצע הרצה שלו בתקופה עוקבת, ולחזור על התהליך הנ"ל כמה עשרות פעמים. מייגע, אך אפשרי. הפתרון הפשוט יותר, הוא להשתמש בכלים אוטומטיים הקיימים בשוק. לדוגמא, סוחרי מניות יכולים להשתמש ב- TradeStation אשר מספק מודול WFA איכותי, וסוחרי Forex ב- MT4 יכולים להשתמש בכלי מצויין העונה לשם המקורי "Walk Forward Analyzer for MetaTrader 4".

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

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

אז קדימה - בואו ונבצע WFA על הסיסטם הנ"ל. אשתמש בכלי שהזכרתי קודם ל-MT4, כאשר תקופת האופטימיזציה תהיה חודשיים (60 יום), ותקופת הבדיקה העוקבת – 15 יום. יחס 1:4 הוא היחס המקובל ביותר לניתוח WFA. את התהליך אריץ מתחילת 2009, ועד תחילת 2012. שלוש שנים רצופות. סה"כ 69 סבבים של אופטימזציה + בדיקה.



דו"ח התוצאות נראה כך:


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

במבט חטוף אך ורק על ארבעת הסבבים הראשונים, ניתן כבר לראות את "החולי" של אופטימיזציה עיוורת – תקופות האופטימיזציה ריווחיות מאוד, אך כאשר משתמשים בתוצאות האופטימיזציה על התקופה העוקבת, הריווחיות נמוכה בהרבה (סבב 1), אפסית (סבבים 2 ו-3), או שלילית (סבב 4).

ובשורה התחתונה?



הרצה של הסיסטם הנ"ל על פני 3 שנים הניבה רווח של 28382$ בהתחשב בתקופות האוטימיזציה בלבד. אולם בעולם האמיתי, הסיסטם כושל עם הפסד של 1359$... בקיצור, אין כמו תחושת בטן של סוחר מנוסה. זהו אולי סיסטם מצויין שניתן "למכור" בקורס ניתוח טכני למתחילים (אין כמו סיסטם כזה  אשר מוצג בשיעור מבוא לקורס כשיטה מדהימה לגריפת רווחים קלים + הוכחה ניצחת כמובן בדמות 70% רווח בשנתיים לאחר ביצוע אוטימיזציה פשוטה...), אולם במבחן המציאות, כל מי שינסה להשתמש בו לאורך זמן, יקלל את הרגע בו למד לבצע אופטימיזציה, ויאלץ למצוא מקורות מימון חדשים.

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

עד אז? תקנו בזול ותמכרו ביוקר.



-----------------------------------------------------------------------------------------------------------------------

לא רוצים לפספס את כתבת ההמשך? הירשו לבלוג וקבלו עדכון מיידי על פוסטים חדשים. ניתן לקבל עידכונים במייל, בפייסבוק, בטוויטר, או באמצעות RSS. ההרשמה באמצעות הטופס בתחילת העמוד - "Subscribe Now".


יום רביעי, 25 בינואר 2012

אופטימיזציה - לא מה שחשבתם (חלק א)

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

העצות הבאות חוזרות ונשנות כמעט בכל ספר, פורום או בלוג מסחר:
    1. הכירו את השיטה היטב, על יתרונותיה חסרונותיה ומגבלותיה
    2. בדקו את יעילות השיטה על נתונים הסטוריים – backtesting
    3. סחרו תחילה בחשבון דמו
    4. לאחר תקופת הסתגלות עברו לחשבון רגיל בחשיפה נמוכה
    5. הגדילו פוזיציה ככל שאתם צוברים נסיון


כל מילה בסלע, וכל עצה ראויה לדיון בפני עצמה. עם זאת, בפוסט זה אני רוצה להתמקד בעיצה השניה.
השאלה הנשאלת היא, איך מחליטים על פרמטרים שונים של השיטה בצורה נכונה? הרי השוק הוא דינמי, ומה שנכון היום לא בהכרח יהיה נכון עוד חודש. לדוגמא, השיטה שלכם כוללת ממוצע נע. איך תחליטו על ה-period שלו? אולי ממוצע 100 מצויין בתנאי השוק הנוכחיים, אך יתפקד בצורה גרועה בתנאי שוק אחרים? איך תחליטו מהם ה-SL וה-TP האופטימליים? 2%? 10%? איך תתאימו אם כן את הפרמטרים השונים בשיטה שלכם לתנאי השוק המשתנים תדיר?

התשובה המקובלת אותה תקבלו מרוב הסוחרים היא – אופטימיזציה. במילים פשוטות, תהליך שבודק מהם הערכים האופטימליים לפרמטרים האפשריים בשיטה, על סמך נתונים הסטוריים. בעצם, תהליך אופטימיזציה מתבצע ע"י הרצות backtesting רבות, עם שילובים של ערכים שונים. brute force. פשוט מנסים. בדוגמא הקודמת, מריצים שילובים של ערכי SL, TP, ו-period לממוצע הנע, ובודקים איזה שילוב נותן את התוצאה הטובה ביותר על פני תקופה מוגדרת. במאמר מוסגר, "תוצאה טובה" לא מתמצת בהכרח אך ורק ברווח. פרמטרים שונים נוספים יכולים להשפיע על מידה "האופטימליות" של התוצאה. למשל drawdown, profit factor, או מספר טריידים לתקופת זמן.


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

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


להלן הסיסטם:

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

     -  פוזיציה אחת פתוחה בו זמנית.
     -  הרצה על גרף יומי (את הפוסט הראשון בבלוג כבר קראתם?)
     -  בדיקת המחיר תתבצע על מחיר הפתיחה בלבד (אין מסחר תוך יומי)
     -  גודל פוזיציה קבוע – 1 לוט (סוחרי מניות מוזמנים לעשות אדפטציה לעולם שלהם)

לדוגמא:


Backtesting של הסיסטם הנ"ל על תקופה של שנתיים, בין 2008 ל-2010, עם ממוצע נע 25 יום, מראה כי הסיסטם הניב רווח של 51%. לא רע.




עכשיו, בואו נריץ אופטימיזציה (אותה תקופת זמן) על פרמטר אחד – הממוצע הנע. נסרוק את כל הערכים האפשריים בין 20 ל-100, בקפיצות של 5. 

להלן התוצאות:



ניתן לראות כי הממוצע הנע האופטימלי הוא של 55 יום, בו מתקבל רווח של 73% לתקופה של שנתיים. 22% יותר מהערך השרירותי הראשוני שקבענו של 25 יום. 



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



הפסד של 37%... אם נריץ את אותה אופטימיזציה שהרצנו קודם, והפעם על 2010 ועד היום, נראה כי הערך האופטימלי לממוצע הנע הפך פתאום ל-35. הוא שאמרנו – השוק דינמי. הסתמכות עיוורת על אופטימיזציה משקרת ומטעה.

אז מה בכל זאת עושים? התשובה בפוסט הבא...


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


ShareThis