(本文內容並非任何型式之投資建議,內容謹供個人研究心得,任何投資決策應自行衡量風險,妥善理財,本文作者及本部落格不負任何盈虧之責!)

北美半導體BB ratio的官方公布網站為:http://www.semi.org/en/MarketInfo/Book-to-Bill/


由於它本身也提供歷史資料PDF(上圖編號1)下載,所以其實無需搜尋其它統整資料庫(FRED沒有),或從經建會網站也可以找到,因為它是台灣領先指標成份之一。

使用PDF檔第一次要手動建立,之後可以手動更新或寫VBA以達One click更新(因為我個人比較懶)

由上圖編號2處,每次BB ratio公布時,網站會更新連結,依網址觀察以外部人而言似為亂數產生,因此無法以Web Query擷取資料。因此當我們使用VBA引用IE browser載入頁面後,必須針對網頁元素做輪巡並判斷特徵文字;特徵文字我個人採用「 Press Release」,Press之前有一個空白。使用Browser搜尋功能可以找到兩筆資料,分別是編號1與編號2,因為我們要找的是編號2,其順序在編號1之前,因此會先找到,可以在找到後中止輪巡。

其程式碼片段如下(最前面為行編號,非程式碼)

      For Each e In ie.document.getElementsByTagName("A")

          If e.innertext Like "* Press Release" Then

              ie.navigate e.href

                  

              While ie.readystate <> 4 Or ie.busy

              Wend

              Exit For

          End If

      Next

內容步驟解析如下:

1.第一行輪巡網中所有為Anchor的元素(亦即含有超連結的部份)

2.第二行判斷Anchor所外顯於網頁的代表文字是內含 xxx Press Release

3.第三行若找到內含 xxx Press Release的文字,取得其隱含之超連結並使用Browser前往

4.第五行與第六行等待網頁載入完成

5.第七行為載入完成離開輪巡過程

 

當我們取得超連結前面該頁面,並分析其頁面內容,其中關鍵數據在該頁面唯一的表格中,因此事情較為簡單,取得表格,並依序輪巡其中各格裡的數字即可。

程式碼片斷:

          Dim t As Variant

          t = ie.document.getElementsByTagName("table")

          rowCnt = Worksheets("BB data").UsedRange.Rows.Count

          cellsCnt = t.Cells.Length

          newDate = DateAdd("m", 1, Worksheets("BB data").Cells(rowCnt, 1).Value)

   

          If (Worksheets("BB data").Cells(rowCnt, 4).Value <> t.Cells(cellsCnt - 1).innertext) Then

              Worksheets("BB data").Cells(rowCnt, 3).Value = t.Cells(cellsCnt - 7).innertext

              Worksheets("BB data").Cells(rowCnt, 2).Value = t.Cells(cellsCnt - 6).innertext

10          Worksheets("BB data").Cells(rowCnt, 4).Value = t.Cells(cellsCnt - 5).innertext

11         ' ignore t.Cells(cellsCnt - 4), because it's the date

12          Worksheets("BB data").Cells(rowCnt + 1, 1).Value = newDate

13            Worksheets("BB data").Cells(rowCnt + 1, 3).Value = t.Cells(cellsCnt - 3).innertext

15          Worksheets("BB data").Cells(rowCnt + 1, 2).Value = t.Cells(cellsCnt - 2).innertext

16          Worksheets("BB data").Cells(rowCnt + 1, 4).Value = t.Cells(cellsCnt - 1).innertext

17      End If

其步驟內容為:

1.第一行宣告一個變數tVariant資料型態

2.第二行將網頁Table內容放入t

3.第三行取得我原本建立的Excel工作表資料的最後一筆的行數

4.第四行取得網頁表格中所有格數,以上圖為例其數字應為32

5.第五行若此表格含有新資料,我會新增一筆較歷史資料最近一筆,其日期為增加一個月(使用DateAdd函數)

6.第七行中t.Cells(cellsCnt - 1).innertext代表0.88這一格,因為t.Cells元數編號是由03132個;我會判斷0.88這一數值是否已存在我的資料裡,藉此偵測是否為新資料(若前後月相同則此程序會無法更新),不使用日期判斷純粹偷懶,有興趣的朋友可以自己試試其它方式

7.第八行至第十行就是將Bookings/Billings/Ratio修正值蓋過工作表最後一筆的資料

8.第十一行至第十六行則是新增至工作表資料最後一行

完成的結果就像下圖:


而上述資料就可拿來做研究使用,例如個人先前的文章:BB ratio與台積電的研究(http://www.wretch.cc/blog/JaguarCSIA/16219084) 

P.S以上程式內容若有上過Tivo大的VBA課程應該不會太難理解,有疑問多討論。

(本文內容並非任何型式之投資建議,內容謹供個人研究心得,任何投資決策應自行衡量風險,妥善理財,本文作者及本部落格不負任何盈虧之責!)
arrow
arrow
    全站熱搜

    tigercsia3 發表在 痞客邦 留言(1) 人氣()