[VBA] 每日爬取 台指期交易 資訊

有關 台指期交易 資訊

※ 在期貨市場中,瞭解並分析交易數據,對於制定投資策略和做出明智的決策至關重要。台指期交易 為台灣股市中重要的指標之一,其交易數據中,包含了許多有價值的信息。然而,手動收集和整理這些數據費時費力,因此藉由電腦爬蟲技術,便可自動化這些過程,大大提高工作效率。

◎ 本文,將介紹如何使用 VBA網路爬蟲( QueryTable 技術 )抓取 台指期交易 數據,幫助投資者更好地理解市場動態和制定投資策略。
( PS. 于 [VBA] 網路爬蟲 真簡單 一文中,已針對 VBA網路爬蟲 做了詳細介紹,也利用 IE操控 技術,實作抓取 台指期交易 資訊,與本文不同的是 — 以 QueryTable 爬蟲技術( Excel內建的網路資料擷取工具 ),來抓取交易數據,更加方便數據分析和報表生成。)

QueryTable 爬蟲技術

QueryTable 是 VBA 常用的三種網路爬蟲工具之一。( PS. 于 網路爬蟲 — 常用的 VBA網路爬蟲 工具 中,有介紹。)

→ 方便之處 : 是它可以直接利用 EXCEL內建工具(從WEB),輕鬆地從外部數據源中擷取資料,省掉了些惱人的資料爬取動作,更方便於數據的擷取與報表製作。
( PS. 若有追蹤過 擷取 證交所 / 三大法人現貨買賣超 等相關文章,應該對 從WEB 資料擷取工具,並不陌生。)

台指期交易 時間

[ 台指期交易 時間 ]


電子盤交易 ( 夜盤 ) : 下午 15 : 00 ~ 隔日凌晨 05 : 00
( PS. 夜盤開始時間 — 下午 03 : 00 是每日交易的開始時間。舉例 : 目前是 2023/05/16 下午 03 : 00,但實際交易日,則為 : 05/17日。)
一般交易 ( 日盤 ) : 早上 08 : 45 ~ 下午 13 : 45

※ 有關「 台指期 」的規格內容,可參考 : 期交所 — 台股期貨 網站。

QueryTable 實作 — 爬取 台指期交易 資訊

台指期 日/夜盤 網址

※ 已知,台指期 有二段交易時間,其數據的抓取,也是分 : 夜盤 / 日盤 二段來進行。其網址如下 :
[ 夜盤 ] : 網址 — https://www.taifex.com.tw/cht/3/futDailyMarketExcel?marketCode=1
[ 日盤 ] : 網址 — https://www.taifex.com.tw/cht/3/futDailyMarketExcel

◎ 日 / 夜盤 的網址來源,參考下圖。
[ 1 ] : 期貨每日交易行情查詢 網址 : https://www.taifex.com.tw/cht/3/futDailyMarketReport


[ 2 ] : 點擊 — 連結查詢 後,會出現 盤後資訊 — 期貨 的所有相關資料連結,我們需要的是 台股期貨( TX ),此時會看到有二個連結選項 : 日盤 / 夜盤,參考下圖。( PS. 也有小型台指,依需求點選。)


[ 3 ] : 日盤 : 網址 — https://www.taifex.com.tw/cht/3/futDailyMarketExcel


[ 4 ] : 夜盤 : 網址 — https://www.taifex.com.tw/cht/3/futDailyMarketExcel?marketCode=1

錄製巨集

[ 錄製巨集 — 操作步驟 ] :
[ A錄製巨集 : 請參考 錄製巨集(舊版) 內的錄製步驟,錄製完夜盤後,會新增一個新的工作表。( PS. 也可以事先新增好工作表。)

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

[ B執行巨集 : 執行錄製好的巨集後,於夜盤工作表內,會顯示期交所擷取出 當日夜盤 的表格資料,顯示如下 :


[ 夜盤交易 -- 程式碼 ] :
Sub 巨集1()
    Application.CutCopyMode = False
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;https://www.taifex.com.tw/cht/3/futDailyMarketExcel?marketCode=1", Destination:=Range("$A$1"))
'        .CommandType = 0
        .Name = "futDailyMarketExcel?marketCode=1"
        .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程式,來擷取/儲存當日對應的台指期交易資料。


        [ VBA 資料擷取設定 -- 程式碼 ] :
        Sheets("台指期").Select
        xRow = [A65536].End(xlUp).Offset(1).Row
        Range("A" & xRow) = Left(Sheets("夜盤").[A5], 10)
        Range("B" & xRow) = "TX"
        Range("C" & xRow) = Sheets("夜盤").[B10]
        Range("D" & xRow) = "夜盤"
        Range("E" & xRow) = Sheets("夜盤").[C10]
        Range("F" & xRow) = Sheets("夜盤").[D10]
        Range("G" & xRow) = Sheets("夜盤").[E10]
        Range("H" & xRow) = Sheets("夜盤").[F10]
        Range("I" & xRow) = Mid(Sheets("夜盤").[G10], 2, Len(Sheets("夜盤").[G10]) - 1)
        Range("J" & xRow) = Mid(Sheets("夜盤").[H10], 2, Len(Sheets("夜盤").[H10]) - 2)
        Range("K" & xRow) = Sheets("夜盤").[I10]
        Range("L" & xRow) = Sheets("夜盤").[K10]
        Range("M" & xRow) = Sheets("夜盤").[N10]
        Range("N" & xRow) = Sheets("夜盤").[O10]

程式解說 ] :
1. xRow = [A65536].End(xlUp).Offset(1).Row : 功能是抓取最新一列,以儲存當日交易資料。( PS. 若不了解,請參考 : VBA指令 – 彙整筆記。)
2. A2欄 (日期) / 函式為 : Left(Sheets(“夜盤”).[A5], 10),意思是將夜盤工作表的 A5欄 文字資料,利用 Left 指令,將當日日期字串擷取出來。
3. I2欄 (漲跌價) / 函式為 : Mid(Sheets(“夜盤”).[G10], 2, Len(Sheets(“夜盤”).[G10]) – 1),意思是將 ▼ 符號去掉,轉變成數值,方便以後運算使用。
4. J2欄 (漲跌%) / 函式為 : Mid(Sheets(“夜盤”).[H10], 2, Len(Sheets(“夜盤”).[H10]) – 2),意思是將 ▼ 和 符號去掉,轉變成數值,方便以後運算使用。

◎ 其餘皆是欄位與欄位的對應,不多贅述,當然也可以使用 Copy 指令來複製資料,就看個人的設計功力囉 !
◎ 至於 LeftMid 指令用法,可以參考 : VBA 字串處理指令

D. 夜盤資料擷取/儲存完畢,就等著日盤結束後,再進行操作。
( PS. 擷取方式如同夜盤,就不贅述,當是給個練習,完成畫面如下 : )


[ 提醒 ] :
日盤 數據更新時間 : 分二階段。
[ 1 ] : 台指期之 交易指數 / 交易量 / 契約金額,約每日下午 13 : 55 後公布。
[ 2 ] : 台指期之 未平倉口數 / 契約金額,約每日下午 15 : 00 後公布。

夜盤 數據更新時間 : 約每日上午 05 : 10 後公布。至於 未平倉口數 因沒有揭露數據,所以不予理會。

◎ 其餘期貨商品數據更新時間,請參考 : 期交所商品交易資訊

完整程式碼


Sub 每日爬取台指期交易資訊()

    Sheets("夜盤").Select    
    Application.CutCopyMode = False
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;https://www.taifex.com.tw/cht/3/futDailyMarketExcel?marketCode=1", Destination:=Range("$A$1"))
'        .CommandType = 0
        .Name = "futDailyMarketExcel?marketCode=1"
        .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
        xRow = [A65536].End(xlUp).Offset(1).Row
        Range("A" & xRow) = Left(Sheets("夜盤").[A5], 10)
        Range("B" & xRow) = "TX"
        Range("C" & xRow) = Sheets("夜盤").[B10]
        Range("D" & xRow) = "夜盤"
        Range("E" & xRow) = Sheets("夜盤").[C10]
        Range("F" & xRow) = Sheets("夜盤").[D10]
        Range("G" & xRow) = Sheets("夜盤").[E10]
        Range("H" & xRow) = Sheets("夜盤").[F10]
        Range("I" & xRow) = Mid(Sheets("夜盤").[G10], 2, Len(Sheets("夜盤").[G10]) - 1)
        Range("J" & xRow) = Mid(Sheets("夜盤").[H10], 2, Len(Sheets("夜盤").[H10]) - 2)
        Range("K" & xRow) = Sheets("夜盤").[I10]
        Range("L" & xRow) = Sheets("夜盤").[K10]
        Range("M" & xRow) = Sheets("夜盤").[N10]
        Range("N" & xRow) = Sheets("夜盤").[O10]
   
End Sub

結論

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

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

☆ 若您對 股票 / 期貨 / 選擇權 投資有興趣,誠摯邀請您加入LINE群組,每日會提供參考數據與教學文章,供您研究。

相 關 文 章

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

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

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

V B A 資 源

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

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

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