[VBA] 每日爬取 台指期三大法人 交易資訊
目錄 :
有關 台指期三大法人 交易資訊
※ 有關 台指期交易資訊,在上一篇文章 : [VBA] 每日爬取 台指期交易 資訊,已經介紹如何運用 (QueryTable)技術,每天抓取台指期交易數據,但這是整體數據,如何再細絲剝繭,就要再抓取 台指期三大法人 的交易資訊,才能更精準的分析與制定策略。
◎ 本文,同樣使用 VBA網路爬蟲( QueryTable 技術 )抓取 台指期三大法人 交易數據,幫助投資者更好地理解法人的市場動態,才好制定投資策略。
( PS. 于 [VBA] 網路爬蟲 真簡單 一文中,已針對 VBA網路爬蟲 做了詳細介紹,也利用 IE操控 技術,實作抓取 台指期交易 資訊,與本文不同的是 — 以 QueryTable 爬蟲技術( Excel內建的網路資料擷取工具 ),來抓取交易數據,更加方便數據分析和報表生成。)
台指期交易 時間
[ 台指期交易 時間 ]
◎ 電子盤交易 ( 夜盤 ) : 下午 15 : 00 ~ 隔日凌晨 05 : 00。
( PS. 夜盤開始時間 — 下午 03 : 00 是每日交易的開始時間。舉例 : 目前是 2023/05/16 下午 03 : 00,但實際交易日,則為 : 05/17日。)
◎ 一般交易 ( 日盤 ) : 早上 08 : 45 ~ 下午 13 : 45。
※ 有關「 台指期 」的規格內容,可參考 : 期交所 — 台股期貨 網站。
QueryTable 爬蟲技術
◎ QueryTable 是 VBA 常用的三種網路爬蟲工具之一。( PS. 于 網路爬蟲 — 常用的 VBA網路爬蟲 工具 中,有介紹。)
→ 方便之處 : 是它可以直接利用 EXCEL內建工具(從WEB),輕鬆地從外部數據源中擷取資料,省掉了些惱人的資料爬取動作,更方便於數據的擷取與報表製作。
( PS. 若有追蹤過 擷取 證交所 / 三大法人現貨買賣超 等相關文章,應該對 從WEB 資料擷取工具,並不陌生。)
QueryTable 實作 — 爬取 台指期三大法人 交易資訊
台指期三大法人 盤後數據網址
※ 台指期 有分 日盤 / 夜盤 二段交易數據,沒錯。但因 夜盤 未提供 未平倉 數據,所以僅針對 每日收盤 做資料收集。
[ 三大法人 盤後數據 ] : 網址 — https://www.taifex.com.tw/cht/3/futContractsDateExcel
◎ 網址來源,參考下圖。
[ 1 ] : 三大法人期貨契約查詢 : 網址 — https://www.taifex.com.tw/cht/3/futContractsDate
[ 2 ] : 點擊 — 此連結 後,會出現 三大法人 — 區分各期貨契約 的所有相關資料連結,我們需要的是 1. 台股期貨( TX ),參考下圖。( PS. 也有 4. 小型台指。)
( PS. 期貨合計 則是 所有期貨商品 的總計,可以藉由整體數據,分析三大法人的多空動向。)
錄製巨集
[ 錄製巨集 — 操作步驟 ] :
A. 錄製巨集 : 請參考 錄製巨集(舊版) 內的錄製步驟,錄製完夜盤後,會新增一個新的工作表。( PS. 也可以事先新增好工作表。)
◎ 在製作過程中,須注意的三點 :
1. 新增活頁簿,設定檔名 : 每日爬取台指期三大法人交易資訊.xlsm。
2. 新增工作表,設定名稱 : 盤後數據。
3. 從WEB(舊版) 抓取資料時,URL 網址輸入框內,需輸入 : https://www.taifex.com.tw/cht/3/futContractsDateExcel。
B. 期交所擷取出來 三大法人各期貨契約 的 盤後 表格資料,顯示如下 :
[ 程式碼 / 爬取 台指期 / 三大法人盤後數據 ] :
Sub 巨集1()
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;https://www.taifex.com.tw/cht/3/futContractsDateExcel", Destination:=Range("$A$1"))
' .CommandType = 0
.Name = "futContractsDateExcel"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
.Delete
End With
End Sub
[ 注意 ] : 使用舊版爬取出來的資料,會在執行 .CommandType = 0 時,出現錯誤訊號。此時,只要將其註解( ‘ ) 掉,就沒事了。
( PS. 另外,在程式後段加上 .Delete (切斷連線),這樣系統就不會造成連線膨脹,導致當機。)
三大法人盤後資料之後續處理方式
※ 利用爬蟲爬取 台指期三大法人 當日交易數據之後,可以二種方式來擷取並儲存其交易資訊,方便未來的分析與策略制定。
當日交易資料擷取/計算
A. 新增一個名稱 : 三大法人(當日) 的工作表,方便儲放並合計當日 台指期三大法人 的交易資料。
B. 在 三大法人(當日) 工作表內,先設定好需要的數據表頭。表頭資料顯示如下 :
C. 表頭製作好,就可設計 VBA程式,來擷取/計算當日對應的 台指期三大法人 交易資料。
[ 程式碼 / 擷取 台指期三大法人 當日交易資訊 ]
[D8:O10].Copy
Sheets("三大法人(當日)").Select
[B4].PasteSpecial Paste:=xlPasteValues
[ 當日三大法人交易資訊 ] : 擷取後畫面如下 —
D. 三大法人盤後資訊擷取出來後,再利用EXCEL函式(SUM),將各項資訊分別 加總(合計)。
( PS. 先於 B7欄位設定加總公式( =SUM(B4:B6) ),參考下圖。)
E. 再利用拖曳功能,將B7欄位的公式,拖曳 / 複製 到 C7 ~ M7 欄位,即可。
歷史交易資料擷取/儲存
A. 再新增一個名稱 : 三大法人(歷史) 的工作表,方便儲放 台指期三大法人 的歷史交易資料。
B. 在 三大法人(歷史) 工作表內,先設定好需要的數據表頭。表頭資料顯示如下 :
( PS. 將三大法人的盤後資料,全攤開來,一一記錄,最後再加上 : 三大法人 的加總資料。)
C. 表頭製作好,就可設計 VBA程式,來擷取/儲存當日 台指期三大法人 的交易資料。
◎ VBA程式 分三部分來設計 — 1. 日期 / 2. 三大法人分別記錄 / 3. 三大法人資料加總。
日期 / 契約月份
◎ 日期 / 契約月份 之資料來源 — 擷取於「 日盤 」工作表的 期貨每日交易行情查詢 表。( 參考下圖 )
[ 程式碼 / 日期 / 契約月份 ]
Sheets("三大法人(歷史)").Select
xRow = [A65536].End(xlUp).Offset(1).Row
TXdate = Right(Sheets("日盤").[A3], 10)
Range("A" & xRow) = TXdate '日期
Range("B" & xRow) = Right(Sheets("日盤").Range("B10"), 2) '契約月份
Range("C" & xRow) = Right(WeekdayName(Weekday(TXdate)), 1) '星期
[ 程式解說 ] :
◎ 日期 : TXdate = Right(Sheets(“日盤”).[A3], 10),從日盤工作表 — A3欄位字串中,擷取右邊(Right)10個字元,便得到 2023/05/24 日期資料。( PS. 由於下面程式需要利用日期,來轉變成星期資料,避免程式過長,便先將其設定成 TXdate變數,方便之後程式取用。)
◎ 契約月份 : Right(Sheets(“日盤”).Range(“B10”), 2),同上從日盤工作表 — B10欄位字串中,擷取右邊(Right)2個字元,便得 06 契約月份。
◎ 星期 : Right(WeekdayName(Weekday(TXdate)), 1),先使用 Weekday函數,取得日期變數(TXdate),所對應的星期數值,再利用星期函數(WeekdayName),將其轉變成星期字符串(例 : 星期三),再擷取最右邊1個字元,便得到「 三 」。
三大法人分別記錄
◎ 三大法人分別記錄 : 是分別擷取 自營商 / 投信 / 外資 的交易資料,其資料來源 — 取自於「 盤後數據 」工作表的 三大法人 — 區分各期貨契約表。( 參考下圖 )
[ 程式碼 / 三大法人資料分別記錄 ]
xCol = 4
dataRow = 8
Do While dataRow <= 10
Cells(xRow, xCol) = Sheets("盤後數據").Range("H" & dataRow)
Cells(xRow, xCol + 1) = Sheets("盤後數據").Range("I" & dataRow)
Cells(xRow, xCol + 2) = Sheets("盤後數據").Range("N" & dataRow)
Cells(xRow, xCol + 3) = Sheets("盤後數據").Range("O" & dataRow)
xCol = xCol + 4
dataRow = dataRow + 1
Loop
[ 程式解說 ] :
◎ xCol = 4 : 意指從 三大法人(歷史)工作表 的 D行 開始存放資料。( PS. 因為要利用 Cells指令來定位,所以要將行列位址,以數值來表示。)
◎ dataRow = 8 : 意指從 盤後數據工作表 的 第8列 開始擷取資料。
◎ Do While dataRow <= 10 : 利用 Do While … Loop 條件迴圈,來判定 dataRow 是否 <= 10,是 : 則執行擷取動作;否 : 則結束執行。
◎ Cells(xRow, xCol) = Sheets(“盤後數據”).Range(“H” & dataRow) : 其中 Cells(xRow, xCol) 的 xRow 為最新列(第5列),xCol 為 4 (D行),代表著 [D5]欄位,則存放由 盤後數據工作表 [H8]欄位的資料(378)。
( PS. 後續的 xCol +1 / +2 / +3,則是移動行數( E5 / F5 / G5 ),依序來存放擷取的資料。)
◎ xCol = xCol + 4 : 第一組自營商(D~G行)操作完後,將 xCol值 + 4,移動行號位址,轉存入投信資料。
◎ dataRow = dataRow + 1 : 三大法人(歷史)工作表 的行號已轉變,盤後數據工作表 的列號,也必須轉到投信位置,故將 dataRow + 1,移動列號座標。
三大法人資料加總
◎ 三大法人資料加總 : 分別加總 自營商 / 投信 / 外資 的各項交易資料。( 參考下圖 )
[ 程式碼 / 三大法人資料加總 ]
addCol = 4
For totalCol = 16 To 19
Cells(xRow, totalCol) = Cells(xRow, addCol) + Cells(xRow, (addCol + 4)) + Cells(xRow, (addCol + 8)) ' 三大法人/資料加總
addCol = addCol + 1
Next
◎ addCol = 4 : 同樣,由 三大法人(歷史)工作表 的 D行 開始加總 多空交易淨額 的 口數 資料。
◎ For totalCol = 16 To 19 : 三大法人的加總位址在 P ~ S 行號,也就是數值的 16 ~ 19,所以利用 For … Next 迴圈,便能完成加總動作。
◎ Cells(xRow, totalCol) = Cells(xRow, addCol) + Cells(xRow, (addCol + 4)) + Cells(xRow, (addCol + 8)) : 便是將 D行(第4行) / H行(第8行) / L行(第12行) 資料加總,存放於 P行(第16行)。
◎ addCol = addCol + 1 : 將 addCol值 + 1 = 5,移動至 E行位置,開始加總 多空交易淨額 的 契約金額 資料,直到執行完 totalCol = 19 後結束。
實作圖 / 台指期三大法人 交易記錄
[ 完成圖 ] :
完整程式碼
[ 程式碼 / 每日爬取 台指期三大法人 交易資訊 ]
Sub 爬取台指期三大法人交易資訊()
Sheets("盤後數據").Select
Application.CutCopyMode = False
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;https://www.taifex.com.tw/cht/3/futContractsDateExcel", Destination:=Range("$A$1"))
' .CommandType = 0
.Name = "futContractsDateExcel"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
.Delete
End With
[D8:O10].Copy
Sheets("三大法人(當日)").Select
[B4].PasteSpecial Paste:=xlPasteValues
Sheets("三大法人(歷史)").Select
xRow = [A65536].End(xlUp).Offset(1).Row
TXdate = Right(Sheets("盤後數據").[A3].Value, 10)
Range("A" & xRow) = TXdate '日期
Range("B" & xRow) = Right(Sheets("夜盤").Range("B10"), 2) '合約月份
Range("C" & xRow) = Right(WeekdayName(Weekday(TXdate)), 1) '星期
xCol = 4
dataRow = 8
Do While dataRow <= 10
Cells(xRow, xCol) = Sheets("盤後數據").Range("H" & dataRow)
Cells(xRow, xCol + 1) = Sheets("盤後數據").Range("I" & dataRow)
Cells(xRow, xCol + 2) = Sheets("盤後數據").Range("N" & dataRow)
Cells(xRow, xCol + 3) = Sheets("盤後數據").Range("O" & dataRow)
dataRow = dataRow + 1
xCol = xCol + 4
Loop
addCol = 4
For totalCol = 16 To 19
Cells(xRow, totalCol) = Cells(xRow, addCol) + Cells(xRow, (addCol + 4)) + Cells(xRow, (addCol + 8)) ' 三大法人/資料加總
addCol = addCol + 1
Next
End Sub
結論
每日抓取 台指期三大法人 之交易資訊,主要是探究 自營商/投信/外資 這三大法人對於台股的看法,其多空的交易行為和持倉情況,提供了關於市場 未來走向 / 市場情緒 / 交易策略 等有價資訊,有助於提高投資決策的準確性和交易勝率。
[ 溫馨提醒 ] :
※ 以上的交易記錄,呈現的是已實現的交易現況,但 …… 最重要的是數據中內含的 未平倉 資料,影射著三大法人的籌碼動向,持續加以追蹤,便能研判出未來的行情趨勢。
相 關 文 章
[ 1 ] : 每日爬取 台指期交易 資訊
※ 使用電腦爬蟲(QueryTable)技術抓取 台指期交易 數據,可以提供投資者便利且高效的獲取市場信息。透過適當的程式語法,便能自動化輕鬆地收集台指期相關數據。隨後,再針對數據進行清理、分析和應用,就能幫助投資者獲得市場趨勢,並制定相應的投資策略。
[ 2 ] : 每日爬取 台指期三大法人 交易資訊
※ 每日抓取 台指期三大法人 之交易資訊,主要是探究 自營商/投信/外資 這三大法人對於台股的看法,其多空的交易行為和持倉情況,提供了關於市場 未來走向 / 市場情緒 / 交易策略 等有價資訊,有助於提高投資決策的準確性和交易勝率。
[ 3 ] : 每日爬取 台指期/前五大交易人 未平倉資訊
※ 每日抓取 台指期前五大/十大交易人 之未平倉資訊,主要是探究 前五大/十大交易人 多空的交易行為和未平倉現況,對於台指期指數的後續影響。同時,全市場每日未平倉的增減值,也值得觀察,有助於判斷大戶未來的動向。
V B A 資 源