2023年4月5日 星期三

[網站開發] 新增Yahoo財經盈餘成長排行頁面 (Norn-StockScreener投資網站開發)

最近看書時忽然想到, 我在分析一間公司時都會關注這件公司是不是一直有在賺錢, 公司的盈餘是不是一直有在成長, 以作為決定要不要買進一間公司的基準(當然還要加上是否夠便宜XD), 可是這都是透過其他選股條件(條件過濾、多因子選股模型、品牌、創新力、ESG、分析師評價...etc) 挑出一間公司後, 再進到Yahoo財經頁面看更細部的資料。 不能根據盈餘排行排序作為一個選股條件, 想說既然這次想到了, 就把這塊功能補起來吧。


要做盈餘成長排行, 首先就得寫爬蟲把所有上市公司的各季盈餘資料抓取出來, Yahoo財經頁面有兩個地方可以查到盈餘資料:

1. 金融頁面 (財報三表的損益表)

2. 分析師盈餘預測 (有分析師估計&實際盈餘的比較)


至於要用哪邊的資料, 其實我原本是想用財報三表的損益表, 想說這是最真實的資料, 可是實際分析資料後發現, Yahoo財經其實不少missing data (早已知道的事實, 只是每次碰到都得再想一次怎麼辦...), 不管是財報頁面還是分析師盈餘預測都各別會有缺失資料, 甚至還有不少公司的盈餘資料是完全不一樣的...。

以PYPL來說, 以下分別是損益表資料以及分析師盈餘資料:

https://finance.yahoo.com/quote/PYPL/financials







可以看到損益表的Q4 EPS那欄直接空了, 然後損益表上的EPS數值也跟分析師盈餘提供的實際每股盈餘不太一樣, 會不一樣我想可能有幾種情況, 像是計算方式不同, 可能一邊看的是GAAP另一邊看的則是Non-GAAP, 或是像ADR之類的財報上的貨幣單位就不是美元, 換算後的EPS就可能有落差, 或是其他各種原因...。

因為看哪一邊都不太對, 最主要的情況還是我分析完兩邊都會缺資料... 最後沒輒了, 乾脆兩邊的爬蟲都寫都做, 不過目前是沒考慮要再合併兩個頁面的資料, 因為總不能把GAAP的盈餘跟Non-GAAP的混在一起吧, 兩邊資料都有的情況也不知道該看哪一邊, 所以最終還是決定分兩個頁面看了...。


實作完整合好的頁面如下:

https://norn-stockscreener.zmcx16.moe/ranking/


Github:

https://github.com/zmcx16/Norn-StockScreener


Rank排行會有最近一季的盈餘成長作為排序基準, 而Rank顏色則是每一季盈餘都是賺錢的話會是綠色, 其中一季虧錢是藍色, 兩季虧錢是黃色, 三季以上虧錢則是紅色。


實際做完用網頁呈現出來, 果然分析師盈餘&損益表的結果完全不一樣XDD 



分析師盈餘資料有3386筆, 而損益表資料有4163筆, 會這樣也很合理, 畢竟不太可能所有小公司都有分析師去預測盈餘。 而分析師盈餘資料中, 盈餘成長排行最高的公司是AIRC, 最近一季盈餘成長是216倍, 可是那是因為2022Q3 EPS只有0.01, 2022Q4則是2.17, 這樣拿第一名也不意外啦, 只是這代表一點參考意義都沒有, 只能當outlier處理...; 而損益表盈餘資料中, 盈餘成長排行最高的公司則是INVA, 成長爆炸的原因也一樣, 只是上一季盈餘太爛的關係...。


基本上要去除outlier很困難, 因為實際上要算成長率就是會遇到這種分母值接近0的問題, 我覺得能做的就是至少加註解讓使用者能快速知道這可能是outlier, 再來就是多做些更需要的功能, 過濾掉更多不需要的資料。


目前想到的有用的過濾標準有兩個:

1. 所有季度盈餘都是正收益 -> 代表這間公司一直在賺錢, 想投資一間公司當然挑這類公司會更安全。

2. 所有季度盈餘都是正成長 -> 代表這間公司一直在成長, 想投資一間公司當然挑這類公司會更有夢想 (當然前提是估值相對便宜)。


目前就有針對這兩個功能加了filter tag, 有選取tag的話就會只顯示符合條件的公司:


所有組合數據:

* 分析師盈餘資料

  • 所有資料: 3386
  • 所有季度盈餘都是正收益: 1896
  • 所有季度盈餘都是正成長: 403
  • 所有季度盈餘都是正收益+正成長: 240
* 財報損益表盈餘資料

  • 所有資料: 4163
  • 所有季度盈餘都是正收益: 1756
  • 所有季度盈餘都是正成長: 626
  • 所有季度盈餘都是正收益+正成長: 237

如果我們只想關注一直成長+賺錢的公司, 那我們可以只針對剩下的200多間公司在進一步分析就好, 不用從4000多間公司大海撈針。


這次分享差不多就到這邊, 話說這次明明前端只是加個Tag功能卻搞超久, 搞了老半天才發現是MUI的theme的雷, 使用theme後他不會照著我的useState動態變換對應的style, 我不要用theme直接寫css style+useState功能就正常了... 真心覺得前端的坑超多, 每次寫前端都覺得夭壽累, 刻板調layout要花老半天不說, 每次解bug拆雷都各種障礙QQ

沒有留言:

張貼留言