[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列),xCol4 (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 資 源

EXCEL & VBA功能 – 綜合筆記
※ EXCEL & VBA功能 筆記 : 將針對文章中所使用的 EXCEL 及 VBA公式 / 工具操作 / 巨集設定 / 控制項的運用,做個整合記錄,方便大家在學習當下的參考與使用。

VBA指令 – 彙整筆記
※ VBA 提供相當多的指令用法,VBA指令 彙整筆記,將會陸續記錄 VBA文章 中,所用過的 VBA指令,方便學員們對照運用。

VBA程式語法 – 彙整筆記
※ 語法就是程式的文法。 使用者要與電腦溝通,就必須遵守這些規則。VBA程式語法 筆記 : 將針對 VBA文章 中所使用的 VBA程式語法,做個整合記錄,方便大家在學習當下參考與使用。