[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程式語法,做個整合記錄,方便大家在學習當下參考與使用。