[VBA] 每日爬取 台指期 前五大交易人 未平倉資訊

何謂「 台指期 前五大/十大交易人 」?

※ 上一篇文章 : [VBA] 每日爬取 台指期三大法人 交易資訊 交代了三大法人在市場的影響力,也溫馨提醒了未平倉(未沖銷部位)的重要性。但市場內並不只有他們三個人有這種呼風喚雨的能力,所以期交所貼心的公布 前五大/十大交易人期貨大額交易人未沖銷部位結構表 資訊,提供投資人參考。

何謂「 前五大/十大交易人 」? 簡單說就是 : 期貨交易行情中,交易量最大的五個人(包含 : 特定法人)。他們的未平倉籌碼,深具意義,值得投資人來探討分析。

[ 期貨大額交易人未沖銷部位結構表 ] :
前五大交易人
( PS. 台指期 前五大/十大交易人 的未平倉資訊,包含 : 大台 及 小台。)

QueryTable 實作 — 爬取 台指期 前五大/十大交易人 未沖銷部位資訊

台指期 前五大/十大交易人 未沖銷部位 盤後數據網址

※ 台指期 前五大/十大交易人 未沖銷部位查詢網址 : https://www.taifex.com.tw/cht/3/largeTraderFutQry

◎ 網址來源,參考下圖。
前五大交易人

點擊 — 此連結 後,會出現 QueryTable 各期貨契約 的所有資料連結,目前我們只需要抓取 1. 臺股期貨(TX+MTX/4) 的相關數據,參考下圖。
前五大交易人

錄製巨集

[ 錄製巨集 — 操作步驟 ] :
A. 錄製巨集 : 請參考 錄製巨集(舊版) 內的錄製步驟,錄製完,會在新增的工作表(盤後數據(前五大交易人)),產生前五大交易人的交易數據。( PS. 開頭定位在 A1。)

◎ 在製作過程中,須注意的三點 :
1. 新增活頁簿,設定檔名 : 每日爬取台指期前五大交易人資訊.xlsm
2. 新增工作表,設定名稱 : 盤後數據(前五大交易人)
3. 從WEB(舊版) 抓取資料時,URL 網址輸入框內,需輸入 : https://www.taifex.com.tw/cht/3/largeTraderFutQryTbl

B. 期交所擷取出來 各期貨契約 — 前五大/十大交易人盤後 表格資料,存放在  盤後數據(前五大交易人) 工作表內,顯示如下 :
前五大交易人


[ 程式碼 / 爬取 台指期 -- 前五大/十大交易人 盤後數據 ] :
Sub 爬取台指期前五大交易人資訊()

        Application.CutCopyMode = False
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;https://www.taifex.com.tw/cht/3/largeTraderFutQryTbl", Destination:=Range("$A$1"))
'            .CommandType = 0
            .Name = "largeTraderFutQryTbl"
            .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程式,來擷取 / 儲存 / 計算 當日對應的 前五大/十大交易人 交易資料。


[ 程式碼 / 前五大/十大交易人 未平倉資料擷取/儲存 ] :
        Sheets("前五大交易人(未平倉)").Select
        xR = [C65536].End(xlUp).Offset(1).Row
        
        Range("A" & xR) = Sheets("盤後數據(前五大交易人)").[A2]  ' 日期
        
        If Len(Sheets("盤後數據(前五大交易人)").[B10]) = 1 Then
                Range("B" & xR) = Sheets("盤後數據(前五大交易人)").[B9] & "0" & Sheets("盤後數據(前五大交易人)").[B10]  ' 到期月份
        Else
                Range("B" & xR) = Sheets("盤後數據(前五大交易人)").[B9] & Sheets("盤後數據(前五大交易人)").[B10]
        End If
        
        Range("C" & xR) = Sheets("盤後數據(前五大交易人)").[C9]  ' 買方 / 前五大交易人合計
        Range("D" & xR) = Sheets("盤後數據(前五大交易人)").[C11]  ' 所有契約合計
        Range("E" & xR) = Sheets("盤後數據(前五大交易人)").[E9]  ' 買方 / 前十大交易人合計
        Range("F" & xR) = Sheets("盤後數據(前五大交易人)").[E11]
        Range("G" & xR) = Sheets("盤後數據(前五大交易人)").[G9]  ' 賣方 / 前五大交易人合計
        Range("H" & xR) = Sheets("盤後數據(前五大交易人)").[G11]
        Range("I" & xR) = Sheets("盤後數據(前五大交易人)").[I9]  ' 賣方 / 前十大交易人合計
        Range("J" & xR) = Sheets("盤後數據(前五大交易人)").[I11]
        Range("K" & xR) = Sheets("盤後數據(前五大交易人)").[K9]  ' 全市場未沖銷部位數(到期月份)
        Range("M" & xR) = Sheets("盤後數據(前五大交易人)").[K11]  ' 全市場未沖銷部位數(所有契約)
        
        If Range("B" & xR) <> Range("B" & xR - 1) Then  ' 判別當日是否換月第一天
                Range("L" & xR) = 0
                Range("N" & xR) = 0
        Else
                Range("L" & xR) = Range("K" & xR) - Range("K" & xR - 1)  ' 全市場未沖銷部位數 -- 資料增減(到期月份)
                Range("N" & xR) = Range("M" & xR) - Range("M" & xR - 1)  ' 全市場未沖銷部位數 -- 資料增減(所有契約)
        End If

[ 程式解說 ] :
※ 這組程式碼不難,純粹就是資料互相對應轉換,所以只解釋二個需注意的地方。
If Len(Sheets(“盤後數據(前五大交易人)”).[B10]) = 1 Then : 主要是利用Len函數來判別當日到期月份是 : 位數( 1 ~ 9月 ),還是 : 位數( 10 ~ 12月 )。
( PS. 若為 1 (單位數) : 則在 2023(年) 與 8 (月) 中間,加上 “0” = 202308 (到期月份)。若你覺得可以接受 20238 的表達方式,那就無需多此 IF 的判斷指令。)
If Range(“B” & xR) <> Range(“B” & xR – 1) Then : 主要是判別當日是否換月第一天,因為換月第一天,沒有未平倉口數增減的問題。
( PS. 除非你想拿遠月的資料,來做計算,那就另當別論了。)
→ 若 Range(“B” & xR) (今日到期月份) 與 昨日 Range(“B” & xR – 1) 不同,則 到期月份 / 所有契約 的未沖銷部位數增減,均為 0
→ 若相同,則將 今日 昨日 到期月份 / 所有契約 的未沖銷部位數,加以相減,所得之值,便是增減值。

[ 圖示 ] : 前五大/十大交易人 未平倉資料之儲存方式

※ 依照上述的程式碼,可以將每日 前五大/十大交易人 的未平倉資料儲存下來,再利用圖表將其展示,才容易看出其端倪。

◎ 以 202307 月份契約資料為例 :


[ 注意 ] : 在表格後面(O欄)多了一組 期貨指數,為了是分析 前五大/十大交易人 的未平倉資料 與 期貨指數 的關係。
( PS. 若不懂得抓取 期貨指數 的數據資料,請參考 : [VBA] 每日爬取台指期交易資訊 一文。)

[ 圖表 ] : 全市場 當月未平倉部位與台指期的關係

[ 圖例 ] : 202307月份契約

[ 圖表 ] : 全市場 未平倉部位增減與台指期的關係

[ 圖例 ] : 202307月份契約

完整程式碼


[ 程式碼 / 每日爬取 台指期前五大/十大交易人 未平倉資訊 ]
Sub 爬取台指期前五大交易人資訊()
        Sheets("盤後數據(前五大交易人)").Select
        Application.CutCopyMode = False
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;https://www.taifex.com.tw/cht/3/largeTraderFutQryTbl", Destination:=Range("$A$1"))
'            .CommandType = 0
            .Name = "largeTraderFutQryTbl"
            .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

        Sheets("前五大交易人(未平倉)").Select
        xR = [C65536].End(xlUp).Offset(1).Row
        
        Range("A" & xR) = Sheets("盤後數據(前五大交易人)").[A2]  ' 日期
      
        If Len(Sheets("盤後數據(前五大交易人)").[B10]) = 1 Then
                Range("B" & xR) = Sheets("盤後數據(前五大交易人)").[B9] & "0" & Sheets("盤後數據(前五大交易人)").[B10]  ' 到期契約
        Else
                Range("B" & xR) = Sheets("盤後數據(前五大交易人)").[B9] & Sheets("盤後數據(前五大交易人)").[B10]
        End If

        Range("C" & xR) = Sheets("盤後數據(前五大交易人)").[C9]  ' 買方 / 前五大交易人合計
        Range("D" & xR) = Sheets("盤後數據(前五大交易人)").[C11]  ' 特定法人合計
        Range("E" & xR) = Sheets("盤後數據(前五大交易人)").[E9]  ' 買方 / 前五大交易人合計
        Range("F" & xR) = Sheets("盤後數據(前五大交易人)").[E11]
        Range("G" & xR) = Sheets("盤後數據(前五大交易人)").[G9]  ' 賣方 / 前五大交易人合計
        Range("H" & xR) = Sheets("盤後數據(前五大交易人)").[G11]
        Range("I" & xR) = Sheets("盤後數據(前五大交易人)").[I9]  ' 賣方 / 前十大交易人合計
        Range("J" & xR) = Sheets("盤後數據(前五大交易人)").[I11]
        Range("K" & xR) = Sheets("盤後數據(前五大交易人)").[K9]  ' 全市場未沖銷部位數
        Range("M" & xR) = Sheets("盤後數據(前五大交易人)").[K11]
        If Range("B" & xR) <> Range("B" & xR - 1) Then  ' 判別是否換月
                Range("L" & xR) = 0
                Range("N" & xR) = 0
        Else
                Range("L" & xR) = Range("K" & xR) - Range("K" & xR - 1)
                Range("N" & xR) = Range("M" & xR) - Range("M" & xR - 1)
        End If
End Sub

結論

每日抓取 台指期前五大/十大交易人 之未平倉資訊,主要是探究 前五大/十大交易人 多空的交易行為和未平倉現況,對於台指期指數的後續影響。同時,全市場每日未平倉的增減值,也值得觀察,有助於判斷大戶未來的動向。

[ 溫馨提醒 ] :
※ 台指期未平倉資料,在結算前幾天,大戶皆會有轉倉的動作,其動作的大小,多少也能看出大戶的想法,這就有待大家的研究與分析了。

相 關 文 章

[ 1 ] : 每日爬取 台指期交易 資訊
※ 使用電腦爬蟲(QueryTable)技術抓取 台指期交易 數據,可以提供投資者便利且高效的獲取市場信息。透過適當的程式語法,便能自動化輕鬆地收集台指期相關數據。隨後,再針對數據進行清理、分析和應用,就能幫助投資者獲得市場趨勢,並制定相應的投資策略。

[ 2 ] : 每日爬取 台指期/三大法人 交易資訊
※ 每日抓取 台指期三大法人 之交易資訊,主要是探究 自營商/投信/外資 這三大法人對於台股的看法,其多空的交易行為和持倉情況,提供了關於市場 未來走向 / 市場情緒 / 交易策略 等有價資訊,有助於提高投資決策的準確性和交易勝率。

[ 3 ] : 每日爬取 台指期/前五大交易人 未平倉資訊
※ 每日抓取 台指期前五大/十大交易人 之未平倉資訊,主要是探究 前五大/十大交易人 多空的交易行為和未平倉現況,對於台指期指數的後續影響。同時,全市場每日未平倉的增減值,也值得觀察,有助於判斷大戶未來的動向。

V B A 資 源

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

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

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