כיצד אתם ממיינים את המניות בקובץ של דייויד פיש? - או - מדריך כיצד למיין את המניות בקובץ של דייויד פיש

daat99

מייסד
מנהל
הצטרף
22/11/15
הבעיה בעיקר בתקופה האחרונה שמחירי המניות לא יציבים עובר זמן בין פרסום הקובץ לזמן שבו אני מבצע את הרכישה בפועל והמחירים כבר לא עדכניים וזה משפיע על הסינון של הפרמטרים שתלויים במחיר המניה. כך שאולי ניפיתי חברות שכן הייתי רוכש
בנוסף לגישה של @מומו אתה יכול למשוך את הנתונים מאתר פינויז בעצמך עבור חברות שאתה מתעניין בהן ולא בטוח אם הנתונים שלהן השתנו לטובתך או לא.
 

מומו

Well-Known Member
הצטרף
12/2/19
בנוסף לגישה של @מומו אתה יכול למשוך את הנתונים מאתר פינויז בעצמך עבור חברות שאתה מתעניין בהן ולא בטוח אם הנתונים שלהן השתנו לטובתך או לא.
מניסיון אישי להציג נתונים מאתר אחר (כמו פינויז) בגוגלשיט בעזרת פונקציות ImportHTML / ImportData / ImportXML אצלי לא עבד בצורה תקינה רוב הזמן.
כמו שכתבת בהודעה הקודמת - גוגל מגבילה את השימוש בפונקציות אלו (ע״י אלגוריתם לא ידוע) ולפעמים מקבלים שגיאה.
אם מדובר על תאים בודדים, זה אמור לעבוד. אבל שרוצים למלא 50 תאים או יותר זה כבר בעייתי

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

SIN

Well-Known Member
הצטרף
12/12/16
האמת שזה יהיה ניסיון מעניין להפוך את הקובץ של ג'סטין לקובץ "נושם" כך שבכל רגע נתון בין פרסומי הקבצים, עדיין יהיה אפשר לבצע סינון עדכני.
 

Drunken Owl

Member
הצטרף
27/5/22
שלום לכולם , חדש בפורום ובנושא. איפה אפשר למצוא את הקובץ המעודכן של Justin Law ccc? יש קישורים שונים אך לא מצאתי מעודכן, איפה אתם מוצאים אותו ?
 

Drunken Owl

Member
הצטרף
27/5/22
תודה מצאתי והתחלתי למיין.
שאלות :
1. האם משהו מתייחס במיון ל P/E המנורמל ל אחוזי הגידול ניסויים לעתיד ( PEG)?
2. אני מבין שכלל האצבע הוא מכפיל רווח קטן מ 20. אך האם אתם משווים למכפיל של הסקטור הספציפי ? זה לא יותר רלוונטי ? ואם כן מישהו עשה לזה איזה שאילתה אוטומטית באקסל?
 

daat99

מייסד
מנהל
הצטרף
22/11/15
1. האם משהו מתייחס במיון ל P/E המנורמל ל אחוזי הגידול ניסויים לעתיד ( PEG)?
PEG מייצג את חלוקת המחיר לעומת גדילת הרווחים.
אני באופן אישי לא רואה צורך להתייחס לכך כי זה כבר "נכלל בחינם" כשאני מתייחס לשינויים שהיו ביחס חלוקת הרווחים (דיבידנד למניה חלקי רווח למניה).

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

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

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

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

לופטי

Well-Known Member
הצטרף
30/12/20
תודה מצאתי והתחלתי למיין.
שאלות :
1. האם משהו מתייחס במיון ל P/E המנורמל ל אחוזי הגידול ניסויים לעתיד ( PEG)?
2. אני מבין שכלל האצבע הוא מכפיל רווח קטן מ 20. אך האם אתם משווים למכפיל של הסקטור הספציפי ? זה לא יותר רלוונטי ? ואם כן מישהו עשה לזה איזה שאילתה אוטומטית באקסל?
אני רק משאיר בסינון חברות שהמכפיל שלהן נמוך מהמדד
באופן אישי אני נותן דגש גדול יותר ליחס חלוקת רווחים, חוב, ותחזית צמיחה

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

Drunken Owl

Member
הצטרף
27/5/22
בשעה טובה התפרסם קובץ CCC , מיינתי ונשארתי עם 9 אלופות, ועכשיו אני תוהה עם מי כדאי להתחתן קתולי עד המוות ? מה אתם עושים ?
 

מומו

Well-Known Member
הצטרף
12/2/19
שלום,

להלן גרסה ראשונית של קוד סקריפט בגוגלשיט למי שמעוניין לעשות את המיון הראשוני בכל חודש בצורה מהירה וקלה
הסקריפט כולל 2 פונקציות:
  • CCC_PrepareFile - מכין את קובץ האלופות כך:
    • משכפל את גיליון All CCC, את הגיליון המקורי משאיר בשם All CCC Org
    • מעדכן את עמודת המחיר לפי GoogleFinance לכל מניה
    • מוסיף עמודה Score שמחשבת לפי נוסחה את הציון לכל מניה (כמובן שניתן לשינוי לפי ראות עיניכם, הגדרתי נוסחה לדוגמה)
  • CCC_AddFilters -מוסיפה סינון:
    • שנות הגדלה - מוגדר ל22 שנה
    • שווי שוק - מוגדר ל1 מיליארד
    • אחוז הגדלה ל-10 שנים - 4 אחוז
    • אחוז הגדלה ל-5 שנים - 4 אחוז
השתדלתי מאוד לכתוב את הסקריפט בצורה קלה להבנה כדי שכל אחד יוכל לקחת ולשנות לפי ההגדרות שלו

כדי להתחיל לעבוד אחרי שהורדתם את האקסל של רשימת האלופות, יש לפעול כך:
  1. פתיחת גוגלדשיט חדש
  2. בסרגל הכלים למעלה לבחור ב-File ואח"כ Import
  3. בחלון שנפתח לבחור Upload ולהעלות את קובץ האלופות
  4. בחלון שנפתח יש לבחור מהרשימה Replace spreadsheet וללחוץ על הכפתור Import Data
  5. בגיליון All CCC לרדת עד הסוף ולמחוק את כל שורות הסיכום (מופיע אחרי הקו העבה, ברשימת האלופות של יוני 2022 מופיע משורה 733 ועד שורה 749). פעולה זו נדרשת כיון שאם עושים מיון לעיתים הגוגלשיט ממיין גם את שורות הסיכום וכל הנתונים הופכים לסלט
    בע"ה בגרסה הבאה (אם תהיה דרישה) סעיף זה גם יהיה אוטומטי :)

    עדכון: סעיף 5 עודכן עם סקריפט אוטומטי, ויש לבצע את השלבים המופיעים בפוסט מספר 39 בהמשך
  6. בסרגל הכלים למעלה לבחור Extensions ואז Apps script
  7. בעורך שנפתח יש להעתיק את הקוד המופיע כאן וללחוץ על כפתור השמירה (אייקון של דיסק)
    קוד:
    /** @OnlyCurrentDoc */
    function CCC_PrepareFile() {
    var spreadsheet = SpreadsheetApp.getActive();
    // Duplication the All CCC
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('All CCC'), true);
    spreadsheet.duplicateActiveSheet();
    spreadsheet.getActiveSheet().setName('All CCC Org');
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('All CCC'), true);
    // Clear prices
    spreadsheet.getRange('I7').activate();
    var currentCell = spreadsheet.getCurrentCell();
    spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
    currentCell.activateAsCurrentCell();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    // Get prices from Google Finanace
    spreadsheet.getRange('I7').activate();
    spreadsheet.getCurrentCell().setFormula('=GOOGLEFINANCE(B7,"price")');
    spreadsheet.getActiveRange().autoFillToNeighbor(SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    
    // Add formula for 1,3,5,10 Years increment
    spreadsheet.getRange('W:W').activate();
    spreadsheet.getActiveSheet().insertColumnsBefore(spreadsheet.getActiveRange().getColumn(), 1);
    spreadsheet.getActiveRange().offset(0, 0, spreadsheet.getActiveRange().getNumRows(), 1).activate();
    spreadsheet.getRange('W6').activate();
    spreadsheet.getCurrentCell().setValue('Score');
    spreadsheet.getRange('W7').activate();
    spreadsheet.getCurrentCell().setFormula('=J7*0.4+V7*0.3+U7*0.3+T7*0.3+S7*0.1');
    spreadsheet.getActiveRange().autoFillToNeighbor(SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    }
    function CCC_AddFilters()
    {
    var spreadsheet = SpreadsheetApp.getActive();
    
    // Add filter with 22 Years
    var iLastRow = spreadsheet.getLastRow();
    
    var ui = SpreadsheetApp.getUi();
    
    spreadsheet.getRange('6:' + iLastRow ).activate();
    spreadsheet.getRange('6:' + iLastRow ).createFilter();
    
    
    spreadsheet.getRange('E6').activate();
    var criteria1 = SpreadsheetApp.newFilterCriteria()
    .whenNumberGreaterThanOrEqualTo(22)
    .build();
    spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(5, criteria1);
    
    // Add filter to MarketCap
    spreadsheet.getRange('AM6').activate();
    var criteria2 = SpreadsheetApp.newFilterCriteria()
    .whenNumberGreaterThanOrEqualTo(1000)
    .build();
    spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(39, criteria2);
    // Add filter for DGR 10 Years
    spreadsheet.getRange('V6').activate();
    var criteria3 = SpreadsheetApp.newFilterCriteria()
    .whenNumberGreaterThanOrEqualTo(4)
    .build();
    spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(22, criteria3);
    // Add filter for DGR 5 Years
    spreadsheet.getRange('U6').activate();
    var criteria4 = SpreadsheetApp.newFilterCriteria()
    .whenNumberGreaterThanOrEqualTo(4)
    .build();
    spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(21, criteria4);
    
    };
  8. לבחור את הפונקציה הראשונה CCC_PrepareFile וללחוץ על כפתור Run.
  9. אם אין לכם הרשאות - גוגל יציג התראה שלא נתתם הרשאות לסקריפט ותצטרכו לאפשר זאת
  10. אם הסקריפט הצליח ואתם רוצים להוסיף גם את הסינון - ביחרו בפונקציה CCC_AddFilters וליחצו על כפתור ה-Run
בהצלחה !
 
נערך לאחרונה ב:

לופטי

Well-Known Member
הצטרף
30/12/20
בשעה טובה התפרסם קובץ CCC , מיינתי ונשארתי עם 9 אלופות, ועכשיו אני תוהה עם מי כדאי להתחתן קתולי עד המוות ? מה אתם עושים ?
זוכרים שבסוף ריאל תמיד תזכה;)

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

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

בהצלחה רבה !
דאבל!
 

לופטי

Well-Known Member
הצטרף
30/12/20
שלום,

להלן גרסה ראשונית של קוד סקריפט בגוגלשיט למי שמעוניין לעשות את המיון הראשוני בכל חודש בצורה מהירה וקלה
הסקריפט כולל 2 פונקציות:
  • CCC_PrepareFile - מכין את קובץ האלופות כך:
    • משכפל את גיליון All CCC, את הגיליון המקורי משאיר בשם All CCC Org
    • מעדכן את עמודת המחיר לפי GoogleFinance לכל מניה
    • מוסיף עמודה Score שמחשבת לפי נוסחה את הציון לכל מניה (כמובן שניתן לשינוי לפי ראות עיניכם, הגדרתי נוסחה לדוגמה)
  • CCC_AddFilters -מוסיפה סינון:
    • שנות הגדלה - מוגדר ל22 שנה
    • שווי שוק - מוגדר ל1 מיליארד
    • אחוז הגדלה ל-10 שנים - 4 אחוז
    • אחוז הגדלה ל-5 שנים - 4 אחוז
השתדלתי מאוד לכתוב את הסקריפט בצורה קלה להבנה כדי שכל אחד יוכל לקחת ולשנות לפי ההגדרות שלו

כדי להתחיל לעבוד אחרי שהורדתם את האקסל של רשימת האלופות, יש לפעול כך:
  1. פתיחת גוגלדשיט חדש
  2. בסרגל הכלים למעלה לבחור ב-File ואח"כ Import
  3. בחלון שנפתח לבחור Upload ולהעלות את קובץ האלופות
  4. בחלון שנפתח יש לבחור מהרשימה Replace spreadsheet וללחוץ על הכפתור Import Data
  5. בגיליון All CCC לרדת עד הסוף ולמחוק את כל שורות הסיכום (מופיע אחרי הקו העבה, ברשימת האלופות של יוני 2022 מופיע משורה 733 ועד שורה 749). פעולה זו נדרשת כיון שאם עושים מיון לעיתים הגוגלשיט ממיין גם את שורות הסיכום וכל הנתונים הופכים לסלט
    בע"ה בגרסה הבאה (אם תהיה דרישה) סעיף זה גם יהיה אוטומטי :)
  6. בסרגל הכלים למעלה לבחור Extensions ואז Apps script
  7. בעורך שנפתח יש להעתיק את הקוד המופיע כאן וללחוץ על כפתור השמירה (אייקון של דיסק)
    קוד:
    /** @OnlyCurrentDoc */
    function CCC_PrepareFile() {
    var spreadsheet = SpreadsheetApp.getActive();
    // Duplication the All CCC
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('All CCC'), true);
    spreadsheet.duplicateActiveSheet();
    spreadsheet.getActiveSheet().setName('All CCC Org');
    spreadsheet.setActiveSheet(spreadsheet.getSheetByName('All CCC'), true);
    // Clear prices
    spreadsheet.getRange('I7').activate();
    var currentCell = spreadsheet.getCurrentCell();
    spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
    currentCell.activateAsCurrentCell();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
    // Get prices from Google Finanace
    spreadsheet.getRange('I7').activate();
    spreadsheet.getCurrentCell().setFormula('=GOOGLEFINANCE(B7,"price")');
    spreadsheet.getActiveRange().autoFillToNeighbor(SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    
    // Add formula for 1,3,5,10 Years increment
    spreadsheet.getRange('W:W').activate();
    spreadsheet.getActiveSheet().insertColumnsBefore(spreadsheet.getActiveRange().getColumn(), 1);
    spreadsheet.getActiveRange().offset(0, 0, spreadsheet.getActiveRange().getNumRows(), 1).activate();
    spreadsheet.getRange('W6').activate();
    spreadsheet.getCurrentCell().setValue('Score');
    spreadsheet.getRange('W7').activate();
    spreadsheet.getCurrentCell().setFormula('=J7*0.4+V7*0.3+U7*0.3+T7*0.3+S7*0.1');
    spreadsheet.getActiveRange().autoFillToNeighbor(SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
    }
    function CCC_AddFilters()
    {
    var spreadsheet = SpreadsheetApp.getActive();
    
    // Add filter with 22 Years
    var iLastRow = spreadsheet.getLastRow();
    
    var ui = SpreadsheetApp.getUi();
    
    spreadsheet.getRange('6:' + iLastRow ).activate();
    spreadsheet.getRange('6:' + iLastRow ).createFilter();
    
    
    spreadsheet.getRange('E6').activate();
    var criteria1 = SpreadsheetApp.newFilterCriteria()
    .whenNumberGreaterThanOrEqualTo(22)
    .build();
    spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(5, criteria1);
    
    // Add filter to MarketCap
    spreadsheet.getRange('AM6').activate();
    var criteria2 = SpreadsheetApp.newFilterCriteria()
    .whenNumberGreaterThanOrEqualTo(1000)
    .build();
    spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(39, criteria2);
    // Add filter for DGR 10 Years
    spreadsheet.getRange('V6').activate();
    var criteria3 = SpreadsheetApp.newFilterCriteria()
    .whenNumberGreaterThanOrEqualTo(4)
    .build();
    spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(22, criteria3);
    // Add filter for DGR 5 Years
    spreadsheet.getRange('U6').activate();
    var criteria4 = SpreadsheetApp.newFilterCriteria()
    .whenNumberGreaterThanOrEqualTo(4)
    .build();
    spreadsheet.getActiveSheet().getFilter().setColumnFilterCriteria(21, criteria4);
    
    };
  8. לבחור את הפונקציה הראשונה CCC_PrepareFile וללחוץ על כפתור Run.
  9. אם אין לכם הרשאות - גוגל יציג התראה שלא נתתם הרשאות לסקריפט ותצטרכו לאפשר זאת
  10. אם הסקריפט הצליח ואתם רוצים להוסיף גם את הסינון - ביחרו בפונקציה CCC_AddFilters וליחצו על כפתור ה-Run
בהצלחה !
כל הכבוד לך על ההשקעה!!
 

מומו

Well-Known Member
הצטרף
12/2/19
5. בגיליון All CCC לרדת עד הסוף ולמחוק את כל שורות הסיכום (מופיע אחרי הקו העבה, ברשימת האלופות של יוני 2022 מופיע משורה 733 ועד שורה 749). פעולה זו נדרשת כיון שאם עושים מיון לעיתים הגוגלשיט ממיין גם את שורות הסיכום וכל הנתונים הופכים לסלט
בע"ה בגרסה הבאה (אם תהיה דרישה) סעיף זה גם יהיה אוטומטי :)
אחרי 5000 הודעות מהחברים לשיפור כבר לא יכולתי להישאר אדיש. אז הנה שיפור קטן כדי לחסוך לכם את סעיף 5

שלב א' - להכניס פונקציה חדשה לסקריפט שיצרתם. הפונקציה מקבלת את שם הגיליון ואת הערך לחיפוש. אם הערך נמצא הפונקציה תחזיר את מספר השורה:
קוד:
function findRowByValue(sheet, value) {
  var dataRange = sheet.getDataRange();
  var values = dataRange.getValues();

  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {     
      if (values[i][j] == value) {
        //Logger.log(i);
        return i+1;
      }
    }   
   }
  return -1;
}
שלב ב' - להכניס את הקוד לפונקציה CCC_PrepareFile לפני ההערה "Clear prices"
קוד:
// Remove bottuom lines
var iFirstRowDelete = findRowByValue(spreadsheet, "Averages for All");
var iLastRowDelete = spreadsheet.getLastRow();   
 
for (var iRow = iLastRowDelete; iRow >= iFirstRowDelete; iRow--)
{
  spreadsheet.deleteRow( iRow );         
}

האמת שפנו אליי יותר מ-5000 אבל מי סופר... ;)
 
למעלה תחתית