2021年5月30日 星期日

[網站開發] 新增Industry頁面 - 美股搜尋網站 Norn-StockScreener

接前篇:

[網站開發] 新增產業過濾 - 美股搜尋網站 Norn-StockScreener

上面那篇搜尋器新增了產業過濾功能, 也介紹了一些有哪些指標可以對選擇投資產業有幫助。 不過這些方法都得要額外去找資料搜尋、分析, 而100多個產業根本不可能一個一個看, 產業績效又是落後指標, 看到的時候就已經漲一大段了, 不一定吃得到肉...。 後來想一想, 乾脆來做個頁面, 把產業績效跟對應有關聯性的市場指標做成一張表, 可以先觀察到市場指標的變化, 就有機會在相關產業績效起來前布局, 也能夠在市場指標衰退後趕緊離場, 不用等到公司財報公布以後才知道獲利衰退, 離場太慢以致投資績效變差。

目前做好的頁面如下:

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


上面的表主要可以分成左右兩塊, 左大塊是產業績效, 該產業的所有公司的統合數據, 從上面那張圖可以看到綠色的部分佔大多數, 代表這一年來大多數時間段來看, 美股各產業幾乎都是上漲的; 而右半部則是對應該產業有關的市場指標。 

以鋼鐵產業來說, 我加了兩個市場指標, 分別是HRN00 (美國熱軋鋼期貨合約) 以及 STEEL (美國鋼鐵公司指數)。 HRN00價格這一年來一直不斷攀升, 雖然中國現在開始打壓鐵礦砂, 礦石的價錢, 可是鋼鐵成品的熱軋鋼價格還是持續攀升, 這代表鋼鐵公司應該是能繼續期待獲利創新高(在不挑錯公司的情況)。 讓我們可以繼續安心持有鋼鐵產業的公司股票。 而STEEL美國鋼鐵公司指數的數據基本上會跟鋼鐵產業的統合數據一致, 除非是非美國以外的公司才會有落差, 這個指標其實實用意義不大(畢竟看產業數據就好), 不過後來想想還是先放上來, 畢竟指數可以追蹤的東西很多, 不同的指數對產業代表的意義也不一樣。

另外以石油&天然氣相關產業來說, 可以分的產業就特別多, 有生產探勘、中游產業、設備、整合服務等, 不同產業的績效也不盡相同:

不過就算這些產業的業務不同, 參考的市場指標裡最大關聯性的指標則是一致的, 這邊我加的市場指標分別是CL.1(WTI原油期貨合約)、NG00(天然氣期貨合約)以及原油和天然氣對應的指數。

從上面的數據來看, 以產業來說績效最好的是石油的開採及生產, 而整合服務的產業績效則比較差; 而從市場指標數據來看, 原油跟天然氣的期貨合約價格是持續上漲的, 不過原油比天然氣漲福大得多, 這表示我們可能盡量選以原油開採為主業務的公司會比較有優勢, 不要挑天然氣為主業務的公司。

以投資來說大概就介紹到這邊, 因為有太多的產業跟對應有關聯的市場指標, 像是銀行產業我加的市場指標則是美國10年期國債價格, 之後應該還會加些跟利率, 存款準備率等有關的指標; 而其他產業就是有空慢慢研究慢慢加了, 希望能對提升未來的投資績效更有幫助!!


再來跟投資理財的部分無關, 想介紹一下這次的功能實作以及之後的工作~。

1. 資料處理

以資料數據來說, 我目前一樣是把上面的產業跟市場數據存在cosmos db, 不過沒有串原本的後端server了, 原因是我的Azure VM記憶體已經吃得有點兇了, 繼續加新cache資料我怕會hold不住, 而這次做的東西又不需要複雜的query處理, 資料更新也以半天為單位更新就好。 既然這樣的話, 我乾脆把更新資料庫以及query資料的部分做成Azure Function, 再開個cron job定期去更新資料就好。

更新資料的部分是沒問題了, 可是query的部分會有點問題, 因為Azure Function不是service, 不會一直活在那邊(一直活著的要付費方案才有), 如果每次query都往Azure Function打, 那遇到需要暖機的時候就會很慢, 雖然也可以加Cache & 用freshping的服務每五分鐘戳它讓它一直活著, 可是這樣穩定度其實並不是很好, 而且Azure Function的免費額度並不包含頻寬, 我還是得為了頻寬費用付費...。

後來想到的解決方法就是, 反正資料沒很大, 而且也沒有複雜的query, 我乾脆每次拿到新資料就多存一份靜態檔案到網站上就好啦, 直接用github page的容量跟頻寬, 一切都很美好, 就決定這樣幹了!!


2. 圖表顯示 (Future work)

我這邊有產業的performance數據資料, 而市場數據則是有一年份的每天價格數據, 所以在數據呈現方面, 並不受限於週、月、季、年等限制, 我可以畫個市場價格走勢圖, 並把產業數據一起標註在市場圖表上, 可以一次看到產業 - 市場的對應關係圖。


3. 資料去重複化 (Future work)

一開始我沒想到會有多個產業共用市場指標的情況, 現在實際開始添加市場數據後才發現會共用數據, 這塊打算之後找個時間refine資料結構, 不要儲存重複的資料。


4. 支援更多市場數據  (Future work)

目前只寫好marketwatch的數據整合, 這網站很強大, 有指數, 期貨, 基金, 債劵等各種數據。 可是非交易商品的指標則沒有(e.g. 航運價格指標), 這部分就得找其他網站整合, 可以的話希望能找到一樣強大的網站, 不然整合一堆專責網站爬蟲會寫到瘋掉...。


5. 表格頁面優化 (Pending)

上面的表格可以看到一個產業是可以對應到多個市場指標的, 目前這塊我是產業就多顯示重複的部分, 其實這塊應該要把產業的row整合成一塊的, 不過網站的表格我是直接用Material-UI的data grid組件, row spanning的功能Material-UI去年有開feature request了, 不過就不知道什麼時候implement完, 我現在也懶得找新的table組件了, 就等等看吧~。


這次分享就到這邊, 剛好今天也是我生日, 祝我自己生日快樂~~ 順便貼一張生日快樂圖 (想跟石上一樣繳稅阿XDD)


沒有留言:

張貼留言