[VBA] 每天收集 三大法人現貨買賣超

何謂 三大法人現貨買賣超 ?

[ 三大法人現貨買賣超 ] : 依照字面解釋 —
三大法人 : 外資 / 投信 / 自營商。
現貨 : 意指股票交易。股市投資人賣出股票,買入者現金付款的交易方式。( PS. 同時也有 : 期貨 / 選擇權 及其他的交易商品。)
買賣超 : 指的是當日或某段時間內的買超或賣超行為。
◎ 整體解釋為 : 三大法人在當日或某段時間內,以現金交易方式,進行的買超或賣超行為。

在股票新手教學(入門篇) – 籌碼面 選股 ? 原來,大戶每天在做這些事 ! 一文中,有提及三大法人的操作特性,投資人可依據外資與投信的進、出籌碼,作為股價未來的走勢參考,這便是我們每天要抓取、掌握的資料,更值得注意的是「 連續買賣超 」,即代表法人看好 / 看壞的意味濃厚,續漲 / 續跌的可能性,就大大增加。

三大法人現貨買賣超 公布時間與資訊

[ 公布時間 ] :
台灣證交所會在 下午四點 公布當天 三大法人買賣超 資訊。

[ 公布資訊 ] : 包含—
1. 買賣金額統計表 : 網址 — https://www.twse.com.tw/zh/page/trading/fund/BFI82U.html
◎ 可查詢 : 三大法人買賣超 / / 報表。

2. 個股買賣日報表 : 網址 — https://www.twse.com.tw/zh/page/trading/fund/T86.html
◎ 可歷史查詢 : 三大法人在某日(10年內) 的個股分項投資的買賣資訊。( ※排序方式 : 以股數多寡排序。)

※ 已知證交所公布時間與買賣金額統計表網址,便能利用Excel VBA上網擷取證交所當日三大法人買賣金額統計表,得知大盤整體交易數據。
※ 此外,法人買賣超的「 連續性 」,也是值得注意的一環,同樣也能利用Excel VBA來累計法人整體的「 連續買賣超 」,做為評估大盤是否 續漲 / 續跌 的參考依據。

三大法人現貨買賣超 ] : 參考網站如下 —
◎ HiStock 嗨投資 : https://histock.tw/stock/three.aspx
◎ 玩股網 : https://www.wantgoo.com/stock/institutional-investors/three-trade-for-trading-amount

三大法人現貨買賣超 資料抓取

根據公布的二組法人(現貨/個股)買賣超資訊,便能利用 EXCEL 上網抓取,做出不同的資料分類 — 大盤整體投資個股投資分析

[ 製作 / 大盤整體投資前置步驟 ] :
0. 作業系統 : Office 365
1. 新增一個 EXCEL 的 空白活頁簿
2. 先行另存新檔,存檔位置 : 自行設定,檔案名稱 : 自行設定 ( 我設 : 2022_三大法人現貨買賣超 ),存檔類型(副檔名) : .xlsm ( 啟用巨集的活頁簿 )。
3.下午四點 進行當日三大法人 大盤整體投資 的資料抓取。

三大法人大盤整體投資

證交所 — 網路資料抓取

大盤整體投資 : 資料來源 — 買賣金額統計表 : 網址 — https://www.twse.com.tw/zh/page/trading/fund/BFI82U.html,畫面圖示如下 :
三大法人現貨買賣超

[ 操作步驟 ] :
1. 交易資訊標題 : 三大法人買賣金額統計表
2. / / 報表 : 可利用下拉式選單,選擇 : 當日及其他日期的歷史 / / 報表。
3. 點選 : 列印 / HTML,按 : 滑鼠右鍵,選擇 : 在新分頁中開始連結,或直接選擇 : 複製連結網址,取得當日 三大法人買賣金額統計表 的資料網址 : https://www.twse.com.tw/fund/BFI82U?response=html&dayDate=&weekDate=&monthDate=&type=day,方便以VBA程式來抓取資料。( PS. 頁面開啟的畫面,如下。)
三大法人現貨買賣超

[ 提醒 ] :
若在第2步驟,有先點選過 : ,則會依據所圈選的 / / 報表選項,顯示不同的報表網址。
日報表 — 網址 :
https://www.twse.com.tw/fund/BFI82U?response=html&dayDate=20221024&weekDate=20221017&monthDate=20221021&type=day
dayDate / 指擷取當日 20221024 的資料,type=day 則是選取 日報表 型態。

周報表 — 網址 :
https://www.twse.com.tw/fund/BFI82U?response=html&dayDate=20221024&weekDate=20221017&monthDate=20221024&type=week
weekDate / 指擷取當周 20221017 的資料,type=week 則是選取 周報表 型態。( 注意 : 20221017 必須是當周第一天,否則找不到資料。)

月報表 — 網址 :
https://www.twse.com.tw/fund/BFI82U?response=html&dayDate=20221024&weekDate=20221017&monthDate=20221024&type=month
monthDate / 指擷取當月 20221024 的十月份資料,type=month 則是選取 月報表 型態。

4. 根據 買賣金額統計表 網址,便能利用 錄製巨集 的功能,將上網抓取買賣金額統計表的步驟,轉化成VBA程式指令,將資料抓進EXCEL。

錄製巨集與函式設定

A. 參考 抓取 — 大盤成份股 權重資料 內的錄製步驟,將會新增一個名稱 : 買賣金額統計表 的工作表。

◎ 在製作過程中,須注意的二點 :
一. 新增工作表,設定名稱 : 買賣金額統計表
二. 從WEB 抓取資料時, URL 網址輸入框內,需輸入 : https://www.twse.com.tw/fund/BFI82U?response=html&dayDate=&weekDate=&monthDate=&type=day

B. 證交所擷取出來的表格資料,顯示如下 :
三大法人現貨買賣超

C. 再新增一個名稱為 : 歷史總覽 的工作表,方便儲存每日的三大法人買賣超金額。

D. 然後在 歷史總覽 工作表內,填入三大法人買賣資料表頭。表頭資料顯示如下 : ( * A1欄位(日期),毋需填寫。)
三大法人現貨買賣超

E. 表頭製作好,就可利用 EXCEL函式,來連結對應證交所擷取的資料。示意圖 : 如下 —
三大法人現貨買賣超

[ EXCEL 函式設定 ] :
1. A4欄 (日期) / 函式為 : =A1
2. B4欄 (外資–不含自營) / 函式為 : =買賣金額統計表!E5/100000000。( PS. 除以 100000000 的用意,是將單位 — 改為 : 億元。)
3. C4欄 (外資–自營商) / 函式為 : =買賣金額統計表!E6/100000000
4. D4欄 (外資–合計) / 函式為 : =B4+C4
5. E4欄 (投信–合計) / 函式為 : =買賣金額統計表!E4/100000000
6. F4欄 (自營商–自行買賣) / 函式為 : =買賣金額統計表!E2/100000000
7. G4欄 (自營商–避險) / 函式為 : =買賣金額統計表!E3/100000000
8. H4欄 (自營商–合計) / 函式為 : =F4+G4
9. I4欄 (三大法人–總計) / 函式為 : =D4+E4+H4

[ 注意 ] : 雖說上面的函式設定,可以完成當日證交所的資料擷取,但日後會發生一件事,那就是隔天數據一更新,原先的函式設定,就會發生錯誤;方便解決的辦法,就是改用 VBA程式,來控制資料連結,以及每日的法人買賣超資料儲存。

轉化VBA — 操作步驟

A. 首先利用 錄製巨集,獲取證交所三大法人買賣超之程式碼。程式如下 :

[ 程式碼 / 錄製巨集 ] :
Sub 巨集1()
Application.CutCopyMode = False
ActiveWorkbook.Queries.Add Name:=”Table 0″, Formula:= _
“let” & Chr(13) & “” & Chr(10) & ” 來源 = Web.Page(Web.Contents(“”https://www.twse.com.tw/fund/BFI82U?response=html&dayDate=&weekDate=&monthDate=&type=day””)),” & Chr(13) & “” & Chr(10) & ” Data0 = 來源{0}[Data],” & Chr(13) & “” & Chr(10) & ” 已變更類型 = Table.TransformColumnTypes(Data0,{{“”Header””, type text}, {“”單位名稱””, type text}, {“”買進金額””, Int64.Type}, {“”賣出金額””, Int64.Type}, {“”買賣差額””, Int64.Type}})” & Chr(13) & “” & Chr(10) & “in” & Chr(13) & “” & Chr(10) & ” 已變更類型”
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
“OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=””Table 0″”;Extended Properties=””””” _
, Destination:=Range(“$A$1”)).QueryTable
.CommandType = xlCmdSql
.CommandText = Array(“SELECT * FROM [Table 0]”)
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = “Table_0”
.Refresh BackgroundQuery:=False
End With
End Sub

B. 更改巨集名稱 : 巨集錄製好,會自動產生名稱 : 巨集1的副程式,為了辨識程式內容,將其改為 : 三大法人現貨買賣超。( ※Sub巨集1() 改為 Sub三大法人現貨買賣超() )
◎ 模組名稱 : 則改為 更新_三大法人現貨買賣超。不了解如何更改,請參考 : 開啟 VBA 程式 – 插入模組

C. 將設計好的EXCEL函式,轉化成VBA程式碼。
◎ 直接以對應的方式,將三大法人現貨買賣超資料,轉成 VBA程式碼。程式如下 :

[ 程式碼 ] :
Sheets(“歷史總覽”).Select
[A4] = “=A1”
[B4] = “=買賣金額統計表!E5/100000000”
[C4] = “=買賣金額統計表!E6/100000000”
[D4] = “=B4+C4”
[E4] = “=買賣金額統計表!E4/100000000”
[F4] = “=買賣金額統計表!E2/100000000”
[G4] = “=買賣金額統計表!E3/100000000”
[H4] = “=F4+G4”
[I4] = “=D4+E4+H4”

D. 依照上面程式碼,便能連結 “買賣金額統計表” 工作表內當日證交所擷取出來的資料。
但 …… 如上面注意事項提醒 : 隔天數據一更新,原先的函式設定,就會發生錯誤,而且也無法儲存記錄。此時,程式碼就必須稍作更改。更改程式如下 :

[ 程式碼 ] :
Sheets(“歷史總覽”).Select
xRow = Range(“A65536”).End(xlUp).Offset(1).Row
Range(“A” & xRow) = “=A1”
Range(“B” & xRow) = “=買賣金額統計表!E5/100000000”
Range(“C” & xRow) = “=買賣金額統計表!E6/100000000”
Range(“D” & xRow) = “=B” & xRow & “+C” & xRow
Range(“E” & xRow) = “=買賣金額統計表!E4/100000000”
Range(“F” & xRow) = “=買賣金額統計表!E2/100000000”
Range(“G” & xRow) = “=買賣金額統計表!E3/100000000”
Range(“H” & xRow) = “=F” & xRow & “+G” & xRow
Range(“I” & xRow) = “=D” & xRow & “+E” & xRow & “+H” & xRow

Range(“A” & xRow & “:I” & xRow).Copy
Range(“A” & xRow).PasteSpecial Paste:=xlPasteValues

程式解說 ] :
1. Sheets(“歷史總覽”).Select : 先將游標導入 歷史總覽 工作表內。
2. xRow = Range(“A65536”).End(xlUp).Offset(1).Row : 設定游標列(xRow)變數,方便定位,省略程式的撰寫。
◎ 意思是 : 游標由 A65536 儲存格,往移動,停止在有資料的最後一列位置 : 3,再往下移動一列(Offset(1)) = 4,運用參數,取得值 =4 ,再帶進變數 xRow。( PS. 若不熟此指令用法,可參考 : Range 搭配 End 指令用法
3. 範圍(“A” & xRow)=“=A1”: 運用文字組合,將“A”和 xRow組合成A4,取得 A4欄位後,將公式 =A1 代入,以連結 A1(日期) 的資料。
( PS. 至於連結的 A1欄位是 : 日期,則用 EXCEL函式 : =NOW(),事先設定好,即可抓取當日日期。)
4. Range(“B” & xRow) ~ Range(“I” & xRow) : 皆同於 步驟3 的作法。
( PS. 日/小時/我所要求的結果是 : 欄位合計,因為每天的列數會增加,所以必須運用 文字組合 的方式處理。例 : 範圍(“D”&xRow)=“=B”&xRow&“+C”&xRow )
5. Range(“A” & xRow & “:I” & xRow).複製: 選取並拷貝A4~I4欄位的資料。
6. Range(“A” & xRow).PasteSpecial Paste:=xlPasteValues: 選取A4為複製拷貝資料的開頭。( PS. 參數 : xlPasteValues,意思是 : 貼上之資料為 數值。)

[ 設計目的 ] :
1. 利用游標移動 .End(xlUp).Offset(1) 的功能,找出最新列,填進連結公式,取得當日法人買賣超資料,達到記錄儲存的目的。
2. 步驟(1)雖然能完成當日記錄儲存,但連結公式還在,這會導致隔天的資料一更新,前一天的資料會跟著改變,而產生資料錯誤。
◎ 解決方法 : 利用 xlPasteValues參數,將當日連結公式的資料,轉換成 : 數值,這樣便能每天記錄法人買賣超的資料。

E. 刪除連線工作表舊資料 : 上次連線的舊資料,若不刪除,會導致再連線抓取時,產生覆蓋資料的錯誤。( PS. 刪除指令,必須放在連線前。)

[ VBA程式修改 — 刪除連線舊資料 ] : 如下圖 —

F. 切斷查詢連線 : 為避免同連線,產生錯誤,及連線膨脹,而導致系統負載過大,造成死機。最好的解決方法,就是刪除連線。詳細解說 — 請參考 : 切斷查詢連線

[ VBA程式修改 — 刪除查詢連線 ] : 如下圖 —

注意 ] : 對應的連線位置,名稱一定要對,否則無法刪除連線。

製作 更新數據 按鈕

※ 完成以上整合步驟,就能在 下午:04:00 證交所更新 三大法人買賣超 資料後,一鍵完成自動化更新 !
( PS. 若沒有設定 : 工作排程器,來定時自動執行的話,那就必須製作一個 按鈕,來輔助一鍵完成的更新。)

更新數據_按鈕製作 ] :
1. 按鈕製作方法 : 請參考 — VBA 按鈕製作

2. 指定巨集 : 游標移動到 更新數據 按鈕上,按 滑鼠右鍵,點選 : 指定巨集

3. 確定巨集名稱 : 出現 指定巨集 視窗後,選取 : 三大法人現貨買賣超 巨集名稱 。

完整程式碼


Sub 三大法人現貨買賣超()

    ' 刪除 連線舊資料
    Sheets("買賣金額統計表").Select
    Range("A:E").Delete
    
    Application.CutCopyMode = False
    ActiveWorkbook.Queries.Add Name:="Table 0", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    來源 = Web.Page(Web.Contents(""https://www.twse.com.tw/fund/BFI82U?response=html&dayDate=&weekDate=&monthDate=&type=day""))," & Chr(13) & "" & Chr(10) & "    Data0 = 來源{0}[Data]," & Chr(13) & "" & Chr(10) & "    已變更類型 = Table.TransformColumnTypes(Data0,{{""Header"", type text}, {""單位名稱"", type text}, {""買進金額"", Int64.Type}, {""賣出金額"", Int64.Type}, {""買賣差額"", Int64.Type}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    已變更類型"
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Table 0"";Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [Table 0]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Table_0"
        .Refresh BackgroundQuery:=False
    End With
    
    ' 切斷 "Table 0" 查詢連線
    ActiveWorkbook.Queries("Table 0").Delete
    
    Sheets("歷史總覽").Select
    xRow = Range("A65536").End(xlUp).Offset(1).Row
    Range("A" & xRow) = "=A1"
    Range("B" & xRow) = "=買賣金額統計表!E5/100000000"
    Range("C" & xRow) = "=買賣金額統計表!E6/100000000"
    Range("D" & xRow) = "=B" & xRow & "+C" & xRow
    Range("E" & xRow) = "=買賣金額統計表!E4/100000000"
    Range("F" & xRow) = "=買賣金額統計表!E2/100000000"
    Range("G" & xRow) = "=買賣金額統計表!E3/100000000"
    Range("H" & xRow) = "=F" & xRow & "+G" & xRow
    Range("I" & xRow) = "=D" & xRow & "+E" & xRow & "+H" & xRow

    ' 複製 / 貼上 : 數值
    Range("A" & xRow & ":I" & xRow).Copy
    Range("A" & xRow).PasteSpecial Paste:=xlPasteValues

End Sub

結論

此篇,講述如何利用 EXCEL 上網抓取三大法人當日的整體買賣投資金額,並設計表格,運用 VBA程式設計,將各數據加以整理、計算,逐日記錄三大法人買賣動態,以掌握進出籌碼,評估未來的大盤走勢。

關於法人「 連續買賣超 」,是觀察法人對未來是否看好 / 看壞的參考指標,這對大盤續漲 / 續跌,有著或多或少的影響性,是值得大家留意的。
( PS. 但在本篇文章並未針對 連續買賣超,製作程式碼,主要是雷同於 回測程式 的作法,就不再贅述,大家可以試做看看,不懂再詢問喔 ! )

下一篇 : 三大法人個股買賣超 < 個股投資 >,同樣是利用 EXCEL 上網抓取三大法人當日的個股分項買賣金額,並加以整理/排序,分類製作出 買/賣超前20名 股票排行榜,有興趣的同學,請繼續看下去囉 ^_^

非常感謝您看到最後,若在閱讀的過程中,有任何疑問,歡迎您利用左下角 Messenger 直接提問或寫信給我,我會盡快回覆您,最後感謝您的閱讀,感恩 !

( PS. 如果喜歡 股小白 的文章,歡迎到 股小白臉書粉絲頁 點讚,衝人氣,目前不定期分析大盤趨勢,將來會有 每日公報 : 分析並公布跑分的個股資料,讓大家作為投資參考。 )

關 聯 文 章

1. 每天收集 三大法人現貨買賣超 < 整體數據篇 >

  • 講述如何利用 EXCEL 上網抓取三大法人當日的整體買賣投資金額,並設計表格,運用 VBA程式設計,將各數據加以整理、計算,逐日記錄三大法人買賣動態,以掌握進出籌碼,評估未來的大盤走勢。

2. 3分鐘教會你 – 製作 三大法人個股買賣超排行榜

  • 講述如何利用 EXCEL 上網抓取三大法人當日的個股分項買賣金額,再運用 VBA程式,將法人買賣超數據加以整理/排序,分類製作出 買/賣超前20名 股票排行榜。

3. 輕鬆教會你 – 製作 外資買賣超與加權指數關係圖

  • 由於外資買賣超對加權指數有著相對的影響性,若是利用關係圖表,能更清晰看出差異性,凸顯重點。基於此,本篇文章則採用圖文對照的方式,手把手教會你如何利用VBA圖表的語法設定 — 新增圖表 / 訂定圖表大小 / 建立數列 / 變更圖表類型 / 變更數列範圍 / 調整數列位置 等功能,來達成自動完成圖表製作的目的。

3-1. 輕鬆幾步驟 – 抓取 外資買賣超 歷史資料

  • 外資買賣超歷史資料 可透過證交所網站提供的三大法人買賣金額統計表歷史資料下載機制,下載需要的年月日資料,再藉由VBA程式,將其整理/轉貼,建置成完整的歷史資料,提供給外資賣賣超與大盤歷史資料關係圖一文,做為數列數據源,再與大盤歷史資料搭配,製作出相對應的分析圖表。

3-2. 輕鬆幾步驟 – 抓取 加權指數 歷史資料

  • 加權指數歷史資料 是證交所每日下午三點前會公布的當日交易記錄。同時,證交所網站也提供下載連結點,方便大家下載 : 發行量加權股價指數歷史資料市場成交資訊,擷取大盤當日或歷史交易資訊,再藉由VBA程式,將其格式轉換/整理,建置成完整的大盤歷史資料,提供給外資賣賣超與大盤歷史資料關係圖一文,做為數列數據源,再與外資賣賣超歷史資料搭配,製作出相對應的分析圖表。

V B A 資 源

EXCEL & VBA功能 – 綜合筆記
  • EXCEL & VBA功能 筆記 : 將針對文章中所使用的 EXCEL 及 VBA公式 / 工具操作 / 巨集設定 / 控制項的運用,做個整合記錄,方便大家在學習當下的參考與使用。
VBA指令 – 彙整筆記
  • VBA 提供相當多的指令用法,VBA指令 彙整筆記,將會陸續記錄 VBA文章 中,所用過的 VBA指令,方便學員們對照運用。
VBA程式語法 – 彙整筆記
  • 語法就是程式的文法。 使用者要與電腦溝通,就必須遵守這些規則。VBA程式語法 筆記 : 將針對 VBA文章 中所使用的 VBA程式語法,做個整合記錄,方便大家在學習當下參考與使用。