[VBA] 抓取 大盤借券賣出餘額 歷史資料

大盤借券賣出餘額 來源

大盤借券賣出餘額 : 意思是 — 針對大盤所有個股的借券賣出餘額,所作的統計資料。
( PS. 由於證交所是將資料,以個股加總的方式,置於網頁底層;必須將頁面往下拉到底,才能看見。)

信用額度總量管制餘額表 : 網址 — https://www.twse.com.tw/zh/page/trading/exchange/TWT93U.html
→ 可查詢 : 大盤及個股當日與歷史融券/借券賣出的相關資訊。

大盤借券賣出餘額 資料位置,如下 :
大盤借券賣出餘額

大盤借券賣出餘額 公布時間

[ 公布時間 ] :
台灣證交所會在 下午10:30 公布當天 大盤及個股 融券 / 借券賣出借券賣出餘額 資訊。

[ 大盤借券賣出餘額變化 ] : 參考網站 —
◎ 玩股網 : https://www.wantgoo.com/stock/margin-trading/taiex-short-lending-sale-balance

大盤借券賣出餘額 歷史資料抓取

※ 根據公布的 信用額度總量管制餘額表 資訊,便能利用 EXCEL 上網抓取,做出不同的資料分類 — 借券賣出排行大盤借券賣出餘額變化

[ 抓取 / 借券賣出餘額 歷史資料 — 前置作業 ]
0. 作業系統 : Office 365
1. 打開已設計好的程式檔 : 2022_製作借券賣出排行榜.xlsm
2. 新增工作表,名稱 : 抓取_借券賣出餘額歷史資料

證交所 – 大盤借券賣出餘額 資料抓取

大盤借券賣出餘額 : 資料來源 — 同 借券賣出排行 來源網址。
( PS. 信用額度總量管制餘額表 網址 : https://www.twse.com.tw/zh/page/trading/exchange/TWT93U.html ),畫面圖示如下 :
大盤借券賣出餘額

[ 操作步驟 ] :
0. 資訊標題 : 信用額度總量管制餘額表
1. 選擇欲下載歷史資料的日期
2. 點選 : 。( PS. 信用額度總量管制餘額表 會顯示輸入日期的當日交易數據。)
3. 點選 : CSV 下載。( PS. 將顯示的交易數據,依照CSV檔格式,下載並儲存於電腦中。)

[ 注意 ] :
◎ 幾經測試發現,無論是利用365版舊版的資料下載方式,連結的下載網址,皆為 : https://www.twse.com.tw/zh/page/trading/exchange/TWT93U.html#,並非像之前,可直接利用 變數 來轉換 日期,下載所需的歷史資料。

[ 解決方法 ] :
CSV下載 : 利用 CSV下載 模式,將某日 信用額度總量管制餘額表 的歷史交易數據下載完成。( PS. 重複此動作,將所有要分析的日期資料,全部下載進電腦。)

電腦爬蟲 : 同樣能依照 借券賣出排行 的抓取模式處理,但要做到日期轉換,程序更複雜,不合乎教學文,所以這一篇不採用此方法,利用 CSV下載 方式處理。

CSV檔 – 歷史資料下載

0. 首先要先了解自己要分析多久的資料,才方便抓取多久的歷史資料。( PS. 此篇文章會從 2022/01 月開始抓取。)

1. 新增 檔案資料目錄 名稱 : 借券賣出_歷史CSV檔 — 用來存放 2022月份資料目錄。月份目錄裡,則存放當月有交易日期的借券CSV檔。如下圖 :

( PS. 有點耐心 ^ _ ^ 依照上圖,仔細將 2022/01月 ~ 2022/12月 的所有交易日期的CSV檔,下載並儲存在 借券賣出_歷史CSV檔 資料目錄裡。)

[ 注意 ] :
◎ 在執行證交所 CSV檔案下載 時,必須要注意連續下載速度,不能太快(下載間隔 : 起碼要暫停 : 5 ~ 6 秒),才不會被證交所防盜機制識破,而中斷連線。

[ 被證交所中斷連線的處理方式 ] :
◎ 若不幸,被證交所中斷連線,也不用緊張。
※ 最簡單的方法 : 把中華電信的小烏龜背後的電源開關 – 關掉,再重開,即可。( PS. 用意是 : 系統會對外重新配置一個新的IP。)

[ 設計用意 ] :
◎ 依照步驟 1 的作法,12個月份目錄內,各自存放當月的交易CSV檔,隨後利用 xMonthxDate 變數,依序轉變程式中 月份日期,將所有月份的CSV資料,全部載入EXCEL。

轉化VBA — 操作步驟

錄製巨集 – 從CSV 擷取資料

[ 操作步驟錄製巨集 ] :
1. 利用 錄製巨集,錄製 從CSV 讀取月份目錄內的日期CSV檔(借券賣出餘額歷史資料),匯入EXCEL。( PS. 不熟悉錄製方式,請參考 抓取 — 大盤成份股 權重資料 內的錄製步驟。)

2. 錄製過程中,唯一與 從WEB 不同之處,就是 從文字/CSV 這個匯入步驟。( PS. 在操作中,選取一個借券賣出餘額歷史CSV檔( TWT93U_20221219.csv ),將其資料載入EXCEL。)


3. 載入 — 借券賣出餘額歷史CSV檔( TWT93U_20221219.csv ),資料如下 :
大盤借券賣出餘額

[ 重要資料源 ] :
工作表 : CSV檔載入位置 — 抓取_借券賣出餘額歷史資料 工作表。
大盤信用額度餘額表 : 將表格頁面往下拉到最底層 — 合計( 列 )。( ※ 內容資料有 : 融券借券賣出 的相關資訊。)
查詢管理 : CSV檔資料匯入後,系統自動建立一條查詢,名稱 : TWT93U_20221219。( PS. 點選 : 工具列查詢與連線,可找出。)

4. 停止錄製 : 結束錄製巨集後,系統自動依照剛才的操作步驟,產生程式碼。程式碼如下 :

[ 程式碼 / 錄製巨集 - 從CSV ] :
Sub 巨集1()

    ActiveWorkbook.Queries.Add Name:="TWT93U_20221219", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    來源 = Csv.Document(File.Contents(""D:\2022_VBA_程式教學\借券賣出_歷史CSV檔\202212\TWT93U_20221219.csv""),[Delimiter="","", Columns=16, Encoding=950, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    已變更類型 = Table.TransformColumnTypes(來源,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type text}, {""Column5"", type text}, {""Column" & _
        "6"", type text}, {""Column7"", type text}, {""Column8"", type text}, {""Column9"", type text}, {""Column10"", type text}, {""Column11"", type text}, {""Column12"", type text}, {""Column13"", type text}, {""Column14"", type text}, {""Column15"", type text}, {""Column16"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    已變更類型" & _
        ""
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=TWT93U_20221219;Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [TWT93U_20221219]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "TWT93U_20221219"
        .Refresh BackgroundQuery:=False
    End With    
End Sub

更改巨集名稱

更改巨集名稱 : 巨集錄製好,會自動產生名稱 : 巨集1 的副程式,為了辨識程式內容,模組名稱改為 : 讀取_借券賣出CSV檔;再將 Sub巨集1() 改為 Sub讀取_借券賣出歷史CSV檔()。( PS. 不了解如何更改,請參考 : 開啟 VBA 程式 – 插入模組。)

進行 FileSystemObject 檔案處理設定

※ 藉由 錄製巨集 取得CSV檔資料匯入EXCEL的程式碼,但這也只是單日的資料讀取,那該如何將之前由證交所下載,存進電腦裡的月份目錄內的CSV檔資料,全部匯入EXCEL呢?

[ 操作步驟檔案讀取 ] :
1. 首先利用VBA內建的檔案處理指令,先行建立一個 FileSystemObject 系統物件。
2. 再建立一個 目錄 物件,透過 FileSystemObject,以取得(GetFolder)磁碟內的目錄。( PS. 必須指定抓取CSV檔的路徑。)
3. 利用 For Each 函式,將 目錄 物件內的檔案(.Files),依序呼叫出來。

[ 程式碼 / 檔案讀取 ] :
Set fileObject = CreateObject("Scripting.FileSystemObject")  ' 建立 FileSystemObject 物件
Set fileFolder = fileObject.GetFolder("D:\2022_VBA_程式教學\借券賣出_歷史CSV檔\202212")  ' 建立目錄物件 
For Each xFile In fileFolder.Files

程式解說 ] :
1. 建立(CreateObject) FileSystemObject 物件,並設定物件名稱為 : fileObject
2. 再設定一個目錄物件 : fileFolder,來取得(GetFolder)指定路徑下的 202212 月份目錄。
3. 最後使用 For EachIn 函式,將 fileFolder ( 202212月份 ) 目錄物件裡的 日期CSV檔 ( Files : TWT93U_20221201.csv ~ TWT93U_20221219.csv ),依序呼叫出來,傳送給 xFile 物件變數。

設計 For Each 迴圈 – 自動抓取單日CSV檔

※ 由上述的檔案處理設定,了解如何使用 For EachIn 函式,將儲存於磁碟的單日CSV檔,呼叫出來運用。如此,套進錄製好的「 取得單日CSV檔資料 – 匯入EXCEL 」的巨集程式碼,便能自動將目錄物件( 202212月 )的所有日期CSV檔,全部載入。

◎ 不過,巨集程式碼是單日的匯入操作,要想轉換成自動匯入,便要將程式碼內有關的 月份/日期格式,改為 : 變數,才能運作。這時,就需要更動二個位置 : 一個月份( xMonth ) / 一個日期 ( xDate )。轉換程式如下 :

[ 程式碼 / 自動抓取單日CSV檔 ] :
Sub 讀取_借券賣出歷史CSV檔()
Dim fileObject As Object, fileFolder As Object
    
    xMonth = "202212"
    Set fileObject = CreateObject("Scripting.FileSystemObject")  ' 建立 FileSystemObject 物件
    Set fileFolder = fileObject.GetFolder("D:\2022_VBA_程式教學\借券賣出_歷史CSV檔\" & xMonth & "")  ' 建立目錄物件
    
    For Each xFile In fileFolder.Files
    
            Sheets("抓取_借券賣出餘額歷史資料").Select
            Range("A:P").Clear
            
            xDate = Mid(xFile.Name, 8, 8)
        
            ActiveWorkbook.Queries.Add Name:="TWT93U_" & xDate & "", Formula:= _
                "let" & Chr(13) & "" & Chr(10) & "    來源 = Csv.Document(File.Contents(""D:\2022_VBA_程式教學\借券賣出_歷史CSV檔\" & xMonth & "\TWT93U_" & xDate & ".csv""),[Delimiter="","", Columns=16, Encoding=950, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    已變更類型 = Table.TransformColumnTypes(來源,{})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    已變更類型" & ""
            
            With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
                "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=TWT93U_" & xDate & ";Extended Properties=""""" _
                , Destination:=Range("$A$1")).QueryTable
                .CommandType = xlCmdSql
                .CommandText = Array("SELECT * FROM [TWT93U_" & xDate & "]")
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .BackgroundQuery = True
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = False
                .SaveData = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .PreserveColumnInfo = True
        '        .ListObject.DisplayName = "TWT93U_20221101"
                .Refresh BackgroundQuery:=False
            End With

            ActiveWorkbook.Queries("TWT93U_" & xDate & "").Delete

    Next

程式解說 ] :
0. Dim fileObject As Object, fileFolder As Object : 宣告 fileObject fileFolder 為 : 物件

1. Set fileFolder = fileObject.GetFolder(“D:\2022_VBA_程式教學\借券賣出_歷史CSV檔\202212“) : 已知 GetFolder 可取得路徑下 202212 月份目錄,若將其改為 : 變數( xMonth ),之後只要在變數前端,給予其他月份資料,便能取得其他的月份目錄。
◎ 程式修改成 : Set fileFolder = fileObject.GetFolder(“D:\2022_VBA_程式教學\借券賣出_歷史CSV檔\” & xMonth & ““) : 利用文字組合功能,將 202212 置換成 : xMonth
( PS. 在設定檔案處理物件之前,添加個 xMonth = “202212” 變數指令,便可利用月份轉換,匯入不同的月份目錄。)

[ xMonth 替代位置圖 ] :


2. ActiveWorkbook.Queries.Add Name:=”TWT93U_20221219“, Formula:= _ …… : 同步驟 1TWT93U_20221219 是錄製巨集程式碼中,代表日期 : 20221219 的查詢名稱。只要將程式碼中的日期部分,全改為 : 變數( xDate ),便能利用 For EachIn 函式,將月份目錄裡所有的日期CSV檔,全部匯入EXCEL。
◎ 程式修改成 : ActiveWorkbook.Queries.Add Name:=”TWT93U_” & xDate & ““, Formula:= _ …… : 利用文字組合功能,將下圖程式碼中的 20221219,全部置換成 : xDate

2-1. xDate 解法 < 1 > :
For Each xFile In fileFolder.Files : 已知此程序,會將 fileFolder(202212)月份目錄裡的 Files : TWT93U_20221201.csv ~ TWT93U_20221219.csv 的CSV檔,依序呼叫出來,傳送給 xFile 物件變數。
→ 此時 [ 注意 ] 傳給 xFile 的值 = “D:\我的資料\股小白\2022_VBA_程式教學\借券賣出_歷史CSV檔\202212\TWT93U_20221219.csv”,這是含路徑的檔案名稱。

2-2. xDate 解法 < 2 > :
xDate = Mid(xFile.Name, 8, 8) : 由於 xFile 含有路徑,所以加上 .Name,只擷取檔案名稱 = “TWT93U_20221219.csv”,再利用 Mid 函數,
“TWT93U_20221219.csv” 字串中的第 8 字元開始,擷取 8 個字元,得到 “20221219“,才是我們要的 xDate 資料。

[ xDate 替代位置圖 ] :

搜尋 – 大盤合計列位置

※ 載入借券賣出餘額歷史CSV檔(如下圖)後,會發現抓不到 大盤合計列(1112列)位置。因為利用快速往下移動( CTRL+↓),游標停留的位置是表格最底層(1139列),這樣無法定位抓取大盤合計列,只好改用VBA的搜尋指令( Range.Find方法 )來定位。

    [ 程式碼 / Range.Find 搜尋方法 ] :
    countRow = Range("B:B").Find("合計").Row

程式解說 ] :
countRow = Range(“B:B”).Find(“合計”).Row : 利用 Range.Find方法,搜尋 : B整欄,是否有 “合計“字元,若有 → 傳回 Row(1112列)值,給 countRow 變數。

利用 NumberFormatLocal 轉換儲存格格式

※ 已搜尋到 大盤合計列 (1112列),便可選取 C1112 : O1112 大盤信用交易餘額表的資料,複製並轉貼至 大盤借券賣出歷史資料 存檔。但 …… 卻發生格式上錯誤,因轉貼的資料,屬 : 文字型態,與需求不符,必須先轉換成 : G/通用格式數值型態,才能轉貼/儲存。

      [ 程式碼 / 轉換儲存格格式 ] :
      Range("C" & countRow & ":O" & countRow).Select
      Selection.NumberFormatLocal = "G/通用格式"  ' 將選取的儲存格格式轉成 : 通用格式。
      Selection.Value = Selection.Value
      Selection.Copy

      Sheets("大盤借券賣出歷史資料").Select
      newRow = [A65536].End(xlUp).Offset(1).Row
      Range("A" & newRow) = Left(xDate, 4) & "/" & Mid(xDate, 5, 2) & "/" & Right(xDate, 2)
      Range("B" & newRow).PasteSpecial Paste:=xlPasteValues

程式解說 ] :
1. Range(“C” & countRow & “:O” & countRow).Select : 選取 C1112 : O1112 的欄位儲存格。
2. Selection.NumberFormatLocal = “G/通用格式” : 將選取的儲存格,設定成 : G/通用格式 的資料格式。
3. Selection.Value = Selection.Value : 將已轉換的 通用格式 置換掉 原資料格式。
4. Selection.Copy : 複製選取的範圍資料( C1112 : O1112 )。
5. Sheets(“大盤借券賣出歷史資料”).Select : 切換至 大盤借券賣出歷史資料 工作表。
6. newRow = [A65536].End(xlUp).Offset(1).Row : 游標移動到歷史資料最新空白列。
7. Range(“A” & newRow) = Left(xDate, 4) & “/” & Mid(xDate, 5, 2) & “/” & Right(xDate, 2) : 將 20221219 日期格式,改為 : 2022/12/19,儲存至 A欄新列
8. Range(“B” & newRow).PasteSpecial Paste:=xlPasteValues : 將複製的資料,轉貼至 B欄新列 開始的位置。( PS. 只貼上 : 值 ( xlPasteValues ))

刪除連線工作表舊資料

刪除連線工作表舊資料 : 上次連線的舊資料,若不刪除,會導致再連線抓取時,產生覆蓋資料的錯誤。
( PS. 刪除指令,必須放在 For Each 函式後面。意思是 : 新開個CSV檔,便將舊資料刪除。)

    [ 程式碼 / 刪除連線工作表舊資料 ] 
    For Each xFile In fileFolder.Files
        Sheets("抓取_借券賣出餘額歷史資料").Select
        Range("A:P").Clear
        xDate = Mid(xFile.Name, 8, 8)

刪除查詢連線

刪除查詢連線 : 避免檔案膨脹,才不會導致系統當機。( PS. 因為每連線一次,就產生一條連線,執行越久,存留在系統內的連線越多。)

    [ 程式碼 / 刪除查詢連線 ]    
    ActiveWorkbook.Queries("TWT93U_" & xDate & "").Delete

程式解說 ] :
ActiveWorkbook.Queries(“TWT93U_” & xDate & “”).Delete : 配合日期( xDate )變數,每完成一次CSV檔的資料載入,便將其連線刪除。

清除物件設定

清除物件設定 : 將已不再使用之設定資料,清除乾淨,避免佔用記憶體。

    [ 程式碼 / 清除物件設定 ]       
    Set fileObject = Nothing
    Set fileFolder = Nothing

程式解說 ] :
Set fileObject = Nothing : 清除 Set fileObject = CreateObject(“Scripting.FileSystemObject”) 的設定。

大盤借券賣出餘額 當日更新

大盤借券賣出餘額 的當日更新,可隨著 製作借券排行榜 的更新,一起完成。只需修改幾個操作步驟,即可。

[ 當日大盤借券賣出餘額資料 轉貼動作 ] :

    [ 程式碼 / 大盤借券賣出餘額 當日更新 ]  
    Sub 更新_大盤信用交易餘額()
            Sheets("當日借券賣出排行").Select
            countRow = Range("B:B").Find("合計").Row
            Range("C" & countRow & ":O" & countRow).Select
            Selection.NumberFormatLocal = "G/通用格式"
            Selection.Value = Selection.Value
            Selection.Copy        
            Sheets("大盤借券賣出歷史資料").Select
            newRow = [A65536].End(xlUp).Offset(1).Row
            Range("A" & newRow) = Left(xDate, 4) & "/" & Mid(xDate, 5, 2) & "/" & Right(xDate, 2)
            Range("A" & newRow) = Format(Sheets("當日借券賣出排行").[A1], "yyyy/mm/dd")
            Range("B" & newRow).PasteSpecial Paste:=xlPasteValues
    End Sub

程式解說 ] :
1. Sheets(“當日借券賣出排行”).Select : 選取 當日借券賣出排行 工作表。因為在 製作借券賣出排行 時,已經將 當日信用交易總量管制餘額表 的資料,載入工作表內。
2. countRow = Range(“B:B”).Find(“合計”).Row : 搜尋 : 合計列。仍可執行,無須更改。( PS. 也可利用快速移動游標定位功能,抓取最後一列號的方式設計。)
3. 以下步驟,是 [ 程式碼 / 轉換儲存格格式 ] 的程序操作。
4. 刪除二行格式轉換的動作。( PS. 因為當日信用交易總量管制餘額表,不是表格型態,故無需更改。)
5. 刪除原日期轉換公式,改成 : Range(“A” & newRow) = Format(Sheets(“當日借券賣出排行”).[A1], “yyyy/mm/dd”),即可。

完整程式碼 / 抓取 大盤借券賣出餘額 歷史資料

Sub 讀取_借券賣出歷史CSV檔()
Dim fileObject As Object, fileFolder As Object
    
    xMonth = "202212"
    Set fileObject = CreateObject("Scripting.FileSystemObject")  ' 建立 FileSystemObject 物件
    Set fileFolder = fileObject.GetFolder("D:\2022_VBA_程式教學\借券賣出_歷史CSV檔\" & xMonth & "")  ' 建立目錄物件
    
    For Each xFile In fileFolder.Files
    
            Sheets("抓取_借券賣出餘額歷史資料").Select
            Range("A:P").Clear
            
            xDate = Mid(xFile.Name, 8, 8)
        
            ActiveWorkbook.Queries.Add Name:="TWT93U_" & xDate & "", Formula:= _
                "let" & Chr(13) & "" & Chr(10) & "    來源 = Csv.Document(File.Contents(""D:\2022_VBA_程式教學\借券賣出_歷史CSV檔\" & xMonth & "\TWT93U_" & xDate & ".csv""),[Delimiter="","", Columns=16, Encoding=950, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    已變更類型 = Table.TransformColumnTypes(來源,{})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    已變更類型" & ""
            
            With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
                "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=TWT93U_" & xDate & ";Extended Properties=""""" _
                , Destination:=Range("$A$1")).QueryTable
                .CommandType = xlCmdSql
                .CommandText = Array("SELECT * FROM [TWT93U_" & xDate & "]")
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .BackgroundQuery = True
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = False
                .SaveData = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .PreserveColumnInfo = True
        '        .ListObject.DisplayName = "TWT93U_20221101"
                .Refresh BackgroundQuery:=False
            End With
            
            ActiveWorkbook.Queries("TWT93U_" & xDate & "").Delete
            
            countRow = Range("B:B").Find("合計").Row
            Range("C" & countRow & ":O" & countRow).Select
            Selection.NumberFormatLocal = "G/通用格式"  ' 將選取的儲存格格式轉成 : 通用格式。
            Selection.Value = Selection.Value
            Selection.Copy
            
            Sheets("大盤借券賣出歷史資料").Select
            newRow = [A65536].End(xlUp).Offset(1).Row
            Range("A" & newRow) = Left(xDate, 4) & "/" & Mid(xDate, 5, 2) & "/" & Right(xDate, 2)
            Range("B" & newRow).PasteSpecial Paste:=xlPasteValues
            
     Next
     
     Set fileObject = Nothing
     Set fileFolder = Nothing

End Sub

結論

大盤借券賣出餘額 是針對大盤所有個股的借券賣出餘額,所作的統計資料。其資料存放於網頁底層,方便投資人參考。同時,證交所也提供歷史資料下載;但測試後發現,連結的網址中,並不像以往的操作方式,可藉由變數來轉換日期,達成歷史資料下載的目的。

所以只好改用 : CSV下載模式,將所有要分析的CSV檔,全部載入電腦,再利用VBA程式,依日期順序將其呼叫 / 匯入 / 轉換格式並存檔,完成 大盤借券賣出餘額 歷史資料的建置。

非常感謝您看到最後,若在閱讀的過程中,有任何疑問,歡迎您利用左下角 Messenger 直接提問或寫信給我,我會盡快回覆您,最後感謝您的閱讀,感恩 !

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

關 聯 文 章

1. 製作借券賣出排行榜 – 分析外資的心態

  • 製作借券賣出排行 的目的 : 是想藉由排行來分析目前外資看空的標的物有哪些。但幾經測試,均無法從WEB匯入資料處理,故採用 XMLHTTP 物件抓取功能,擷取當日信用額度總量管制餘額表的交易原始碼,匯入EXCEL,作資料整理並列表,達成當日借券賣出的排序動作。

2. 3分鐘教會你 – 抓取 大盤借券賣出餘額 歷史資料

  • 大盤借券賣出餘額 是針對大盤所有個股的借券賣出餘額,所作的統計資料。證交所將其存放於網頁底層,並提供 CSV下載;若想完成歷史資料的建置,只要將想分析的CSV檔載入電腦,再利用VBA程式,依日期順序將其呼叫/匯入/轉換格式並存檔,便能達成建置的目的。

3. 製作大盤與借券賣出餘額關係圖

  • 利用圖表展現 大盤借券賣出餘額與加權指數關係 ,可以更清晰看出外資對後市的看法。基於此,本篇文章則採用圖文對照的方式,手把手教會你如何利用VBA圖表的語法–新增圖表/訂定圖表大小/建立數列/變更圖表類型/調整數列位置 等功能,來達成自動完成圖表製作的目的。

V B A 資 源

EXCEL & VBA功能 – 綜合筆記
  • EXCEL & VBA功能 筆記 : 將針對文章中所使用的 EXCEL 及 VBA公式 / 工具操作 / 巨集設定 / 控制項的運用,做個整合記錄,方便大家在學習當下的參考與使用。
VBA指令 – 彙整筆記
  • VBA 提供相當多的指令用法,VBA指令 彙整筆記,將會陸續記錄 VBA文章 中,所用過的 VBA指令,方便學員們對照運用。
VBA程式語法 – 彙整筆記
  • 語法就是程式的文法。 使用者要與電腦溝通,就必須遵守這些規則。VBA程式語法 筆記 : 將針對 VBA文章 中所使用的 VBA程式語法,做個整合記錄,方便大家在學習當下參考與使用。