期交所每日都會公佈三大法人期貨交易資訊,其中大家最為熟知的就是外資未平倉量,因為外資未平倉量具有一定的參考價值,所以有很多做程式交易的朋友也常拿這部分的資料來做為進程式策略出場的依據,以下就來介紹如何匯入外資未平倉量。
由於期交所的資料只能抓到前三年的資料,其餘的資料都需要花錢購買,不過這樣的資料量也足以應付了,使用以下的Excel VBA程式去抓取期交所未平倉資料。
稍微解釋一下Excel VBA程式的功能。
- 抓取三大法人的未平倉口數。
- 挑選外資未平倉口數並複製到工作表中。
- 整理可以餵給MultiCharts QuoteManager的格式。
- 最後輸出成CSV檔案。
Option Explicit
Const xlFilePath As String = "C:\期貨下載資料\"
Sub 執行()
Application.ScreenUpdating = False
取得外資未平倉量抓3年
整理欄位與補0
輸出CSV
Application.ScreenUpdating = True
End Sub
Sub 取得外資未平倉量抓3年()
Dim url As String
Dim i, xlCount, nsYear, nsMonth, nsDay, neYear, neMonth, neDay As Integer
Dim strFilename As String
Dim Tempsheet
Dim Rng As Range
If Dir(xlFilePath, vbDirectory) = "" Then
MkDir (xlFilePath)
End If
With Workbooks(1).Sheets("外資未平倉量")
.UsedRange.ClearContents
End With
For i = 0 To 5
nsYear = Format(Year(Date) - 3, "0000")
nsMonth = Format(Month(Date), "00")
nsDay = Format(Day(Date), "00")
neYear = Format(Year(Date), "0000")
neMonth = Format(Month(Date), "00")
neDay = Format(Day(Date) - i, "00")
url = "http://www.taifex.com.tw/chinese/3/7_12_8dl.asp?goday=&syear=" & nsYear & "&smonth=" & nsMonth & "&sday=" & nsDay & "&eyear=" & neYear & "&emonth=" & neMonth & "&eday=" & neDay & "&COMMODITY_ID=TXF"
strFilename = xlFilePath + "期貨.csv"
下載檔案 url, strFilename
With Workbooks.Open(strFilename)
If InStr(1, .ActiveSheet.Range("A1"), "DOCTYPE") = 0 Then
.Close 0
Exit For
End If
.Close 0
End With
Next
With Workbooks.Open(strFilename)
Set Rng = .ActiveSheet.UsedRange
.ActiveSheet.AutoFilterMode = False
With Rng
.AutoFilter
.AutoFilter Field:=3, Criteria1:="外資及陸資"
End With
Set Tempsheet = Workbooks(1).Worksheets("外資未平倉量")
xlCount = .ActiveSheet.Range("A65536").End(xlUp).Row
.ActiveSheet.Range("A2:A" & xlCount).Copy Destination:=Tempsheet.Range("A1")
.ActiveSheet.Range("N2:N" & xlCount).Copy Destination:=Tempsheet.Range("E1")
Set Tempsheet = Nothing
Set Rng = Nothing
.Close 0
End With
End Sub
Sub 整理欄位與補0()
Dim i As Integer
Dim nCount As Integer
With Sheets("外資未平倉量")
nCount = .Range("A65536").End(xlUp).Row
For i = 1 To nCount
If .Cells(i, 5) > 0 Then
.Cells(i, 4) = .Cells(i, 5)
Else
.Cells(i, 3) = .Cells(i, 5)
End If
Next
For i = 1 To nCount
If .Cells(i, 2) = Empty Then
.Cells(i, 2) = 0
End If
If .Cells(i, 3) = Empty Then
.Cells(i, 3) = 0
End If
If .Cells(i, 4) = Empty Then
.Cells(i, 4) = 0
End If
Next
End With
End Sub
Sub 輸出CSV()
Workbooks.Add
Workbooks(1).Sheets("外資未平倉量").Cells.Copy Destination:=Workbooks(2).Sheets(1).Range("A1")
Application.DisplayAlerts = False
Workbooks(2).Sheets(1).SaveAs ThisWorkbook.Path & "\外資未平倉量.csv", FileFormat:=xlCSV, CreateBackup:=False
Application.DisplayAlerts = True
Workbooks(2).Close 0
End Sub
Sub 下載檔案(url As String, xlFilename As String)
Dim oXMLHTTP, objStream As Object
Set oXMLHTTP = CreateObject("Microsoft.XMLHTTP")
Set objStream = CreateObject("ADODB.stream")
With oXMLHTTP
.Open "POST", url, False
.send
If .readyState = 4 Then '.Status = 200
With objStream
.Type = 1
.Open
.Write oXMLHTTP.ResponseBody
If Dir(xlFilename) <> "" Then Kill xlFilename
.SaveToFile xlFilename
.Close
End With
End If
End With
Set oXMLHTTP = Nothing
Set objStream = Nothing
End Sub
外資未平倉量.xlsm下載以上產的CSV檔格式要特別注意開盤價、最低價、最高價、收盤價的欄位。
產生CSV檔後,開啟MultiCharts QuoteManager,手動新增商品。
設定如下:
- 數據源:ASCII Mapping (重要!!!)
- 商品代碼:外資未平倉量
- 商品類別:期貨
- 交易所:TAIFEX
點選剛剛新增的項目,手動匯入ASCII資料。
最後開啟MultiCharts 設定商品到Data 2中,注意數據源的選項。
最後正確畫面
以上過程要特別注意CSV檔的存放欄位,如果開盤價、最低價、最高價、收盤價的欄位放錯,將會導致匯入MultiCharts 的畫面有誤,如下。
最後感謝群裡的陳立偉老師的協助,幫忙糾正錯誤的地方,才能順利搞懂匯入QuoteManager檔案格式。
參考資料:









