標題:
[原創]
上市櫃三大法人買賣超日報資料彙整處理
[打印本頁]
作者:
VBALearner
時間:
2016-8-3 11:07
標題:
上市櫃三大法人買賣超日報資料彙整處理
這是小弟我做的上市櫃三大法人買賣超日報資料彙整
不過需要每天去證交所和櫃買中心下載買賣超日報和盤後的價格資料(有人可以改寫自動下載功能並分享的話,小弟我將五體投地佩服至極xD)
例如:上櫃法人買賣超的檔名是SQUO*......
批量匯入或單日更新的資料夾位置也要自行去看我的程式碼做更改xD
不過這是半成品,所以還需要大家的珍貴意見,任何能讓程式加速或更多功能的方法之類的...小弟還要多跟版上高手學習^^
進一步的資料分析功能還沒做,只有做簡單的測試功能
1.法人連買幾日
2.法人區間內買超天數達幾日以上...
大家就自行發揮創意改程式碼再上來分享給吧~~~
感謝各位高手為我解惑,在此將小弟的新手作品貢獻給大家使用~~
也感謝管理群的拔擢與信賴!!![attach]24827[/attach]
作者:
joey0415
時間:
2016-8-4 08:49
回復
1#
VBALearner
如果只計算二三十天,這樣放沒有問題
如果要計算一二年,可能要放直立式的,透過sql語法,放進簡單的資料庫如access sqlite等, 容量大速度快
excel只是下命令與最後資料呈現的地方,讓資料庫自行運算
速度超快
參考看看
例如以下圖片,如果會下指令,可以查出某時間內,外資共買幾次,佔股本多少等,格式建立好,會查多少就看你sql功力
[attach]24832[/attach]
作者:
VBALearner
時間:
2016-8-4 10:22
本帖最後由 VBALearner 於 2016-8-4 10:25 編輯
回復
2#
joey0415
哇......您高手專業...但是我不會寫...sql這個語言?! 不過Access倒是有,他也是用VBA就能操作的沒錯吧? 這樣好像是Access比較容易上手的感覺...
可以請教您在哪裡學習資料庫的程式語言嗎?! 您的法人資料庫附圖應該就是您的大作吧XD?
我再去市面上翻幾本Access的書看看,謝謝您的意見
作者:
joey0415
時間:
2016-8-4 14:17
本帖最後由 joey0415 於 2016-8-4 14:18 編輯
回復
3#
VBALearner
幾萬筆或幾百萬筆資料的整合,放資料庫才是正確
透過excel vba 操作資料庫 並使用sql語法來選取你要的資料才是正確
真的快又有效
sql語法教學
http://www.1keydata.com/tw/sql/sql.html
excel vba connect access 教學
http://tgw1029.blogspot.tw/2010/01/excel-vba-adoaccess_06.html
http://blog.xuite.net/crdotlin/excel/9056917-Access%E8%B3%87%E6%96%99%E5%BA%AB%E7%9A%84%E9%80%A3%E7%B5%90
http://tgw1029.blogspot.tw/2010/01/excel-vba-adoaccess.html
影音教學
https://www.youtube.com/results?search_query=excel+vba+connect+access
作者:
PKKO
時間:
2016-8-4 14:30
回復
3#
VBALearner
您的程式碼只有整理資料的部分
主要下載資料的程式碼,你的Myfile 沒有提供,恐怕網友們無法學習如何下載哦!
Workbooks.Open "C:\三大法人更新區\" & myfile
作者:
VBALearner
時間:
2016-8-4 15:24
本帖最後由 VBALearner 於 2016-8-4 15:26 編輯
回復
5#
PKKO
我的程式碼裡有一段
myfile = Dir("C:\三大法人更新區\201*")
可以從C槽的三大法人更新區資料夾取出XXX開頭的Excel檔檔名作為資料來源"myfile"
不過無法自動下載就是了,要手動下載後把檔案移到C槽更新資料夾裡,還是您願意分享如何從網頁上自動下載檔案OwO?!
作者:
VBALearner
時間:
2016-8-4 15:28
回復
4#
joey0415
喔天啊~~感謝您提供這麼多資料庫的教學網站!!!
我日後再向您努力學習!!!
只能加個好友先xD
作者:
PKKO
時間:
2016-8-4 18:31
回復
6#
VBALearner
了解,是我誤會標題,以為是自動下載,但您的標題已經很明顯是彙整處理
抱歉抱歉~
作者:
c_c_lai
時間:
2016-8-5 14:49
回復
1#
VBALearner
你那 "C:\三大法人更新區\201*" 裡的
檔案內容是否如:
[attach]24841[/attach]
一樣?
是否也請上傳一個 "C:\三大法人更新區\201*"
中之任一檔案做為參考?
作者:
VBALearner
時間:
2016-8-5 15:09
回復
9#
c_c_lai
恩恩BIGD*開頭的是上櫃買賣超日報
201*開頭的是上市買賣超日報
SQUOTE*開頭的是上櫃行情表
A112201*開頭的是上市行情表
作者:
c_c_lai
時間:
2016-8-5 15:20
回復
10#
VBALearner
能否提共另三個網址?
作者:
VBALearner
時間:
2016-8-5 15:50
回復
11#
c_c_lai
上市買賣超日報 : http://www.twse.com.tw/ch/trading/fund/T86/T86.php
上市盤後行情表 : http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX.php
上櫃買賣超日報 : http://www.tpex.org.tw/web/stock/3insti/daily_trade/3itrade_hedge.php?l=zh-tw
上櫃盤後行情表 : http://www.tpex.org.tw/web/stock/aftertrading/otc_quotes_no1430/stk_wn1430.php?l=zh-tw
目前這個彙整Excel還在開發階段哈哈哈,未來能有什麼價值還待琢磨...-w-
作者:
c_c_lai
時間:
2016-8-6 10:34
本帖最後由 c_c_lai 於 2016-8-6 10:36 編輯
回復
12#
VBALearner
我做了一些更動 (整合、以及語法修正), 請參考:
[attach]24848[/attach]
至於自動下載尚在研究、思考中。
上市上櫃交易(tbl As String, tbl2 As String, pos1 As Integer, pos2 As Integer, typ As String, Optional auto As Boolean = False)
中的 auto 即為預留之伏筆。
作者:
c_c_lai
時間:
2016-8-6 11:23
本帖最後由 c_c_lai 於 2016-8-6 11:52 編輯
回復
12#
VBALearner
Option Explicit
Option Base 1
Sub 調整儲存格大小()
Dim cts As Integer
For cts = 1 To Sheets.Count
With Sheets(cts)
.Activate
.Columns.ColumnWidth = 10
.Rows.RowHeight = 15
End With
Next
End Sub
Sub 批量匯入買賣超與價格()
Call 上市上櫃交易("上市外資", "上市投信", 4, 7, "201*") ' 批量匯入買賣超
Call 上市上櫃交易("上櫃外資", "上櫃投信", 4, 7, "BIG*") ' 批量匯入價格
Call 上市上櫃交易("上市收盤價", "", 8, 0, "A112201*") ' 更新買賣超
Call 上市上櫃交易("上櫃收盤價", "", 2, 0, "SQUOTE*") ' 更新價格
Beep
End Sub
Sub 上市上櫃交易(tbl As String, tbl2 As String, pos1 As Integer, pos2 As Integer, typ As String, Optional auto As Boolean = False)
Dim myFile As String, myDate As String
Dim rng As Range, stkNo As Variant
Dim wb As Workbook
Dim cts As Long, xs As Long
Application.ScreenUpdating = False
xs = Sheets(tbl).Range("A" & Rows.Count).End(xlUp).Row
ReDim tget2(xs - 1) As Long
If pos2 > 0 Then
ReDim tget3(xs) As Long
End If
stkNo = Application.Transpose(Range(Sheets(tbl).Range("A2"), Sheets(tbl).[A2].End(xlDown)))
myFile = Dir("C:\三大法人更新區\" & typ)
Do While myFile <> ""
Workbooks.Open "C:\三大法人更新區\" & myFile
Select Case typ
Case "201*" ' (20160802_2by_issue.csv)
myDate = Left(myFile, 8)
Case "BIG*" ' (BIGD_1050802.csv)
myDate = Mid(myFile, 6, 7): myDate = CStr((Val(Left(myDate, 3)) + 1911)) + Mid(myDate, 4, 4)
Case "A112201*" ' (A11220160802ALL.csv)
myDate = Mid(myFile, 5, 8)
Case "SQUOTE*" ' (SQUOTE_AL_1050802.csv)
myDate = Mid(myFile, 11, 7): myDate = CStr((Val(Left(myDate, 3)) + 1911)) + Mid(myDate, 4, 4)
End Select
myDate = Left(myDate, 4) + "/" + Mid(myDate, 5, 2) + "/" + Right(myDate, 2)
myFile = Dir '第二次調用Dir函數而不帶任何參數,則會返回至同一目錄下的下一個文件
Set wb = ActiveWorkbook
With Sheets(1)
For cts = 1 To xs - 1
Set rng = .Range("A:A").Find(stkNo(cts))
If Not rng Is Nothing Then
tget2(cts) = IIf(IsNumeric(rng.Offset(0, pos1).Value), rng.Offset(0, pos1).Value, 0) ' (0, 8)
If pos2 > 0 Then tget3(cts) = IIf(IsNumeric(rng.Offset(0, pos2).Value), rng.Offset(0, pos2).Value, 0) ' (0, 7)
Else
tget2(cts) = 0
If pos2 > 0 Then tget3(cts) = 0
End If
Next
End With
wb.Close SaveChanges:=False
With Sheets(tbl)
.Activate
Set rng = Range(.[A1], .[A1].End(xlToRight)) ' 從 A 欄至最右欄位範圍
Set rng = rng.Find(CDate(myDate), LookIn:=xlValues, LookAt:=xlWhole)
If rng Is Nothing Then
.Range("C:C").Insert
Set rng = .[C1]
rng.Value = myDate
End If
' Range(.Range("C2"), .Range("C" & .[A2].End(xlDown).Row)) = Application.Transpose(tget2)
Range(rng.Offset(1), .Range(Chr(64 + rng.Column) & .[A2].End(xlDown).Row)) = Application.Transpose(tget2)
End With
If tbl2 <> "" Then
With Sheets(tbl2)
.Activate
Set rng = Range(.[A1], .[A1].End(xlToRight)) ' 從 A 欄至最右欄位範圍
Set rng = rng.Find(CDate(myDate), LookIn:=xlValues, LookAt:=xlWhole)
If rng Is Nothing Then
.Range("C:C").Insert
Set rng = .[C1]
rng.Value = myDate
End If
' Range(.Range("C2"), .Range("C" & .[A2].End(xlDown).Row)) = Application.Transpose(tget3)
Range(rng.Offset(1), .Range(Chr(64 + rng.Column) & .[A2].End(xlDown).Row)) = Application.Transpose(tget3)
End With
End If
Loop
Application.ScreenUpdating = True
End Sub
複製代碼
作者:
VBALearner
時間:
2016-8-6 11:56
回復
14#
c_c_lai
哇~縮減好多程式碼 當初也沒想到要用select case~感謝!!! 再過一兩天我把新增加的功能加上去 再Po上來給大家看看~
作者:
zyzzyva
時間:
2016-8-16 22:32
我目前都是用python把資料抓下來,感覺python好像比較好寫一點。
http://forum.twbts.com/thread-18219-1-1.html
可以用shell的方式整合在原來的程式中。
exe_path = ThisWorkbook.Path & "\getTwseOtc\getTwseOtc.exe"
ChDir (exe_path)
Shell (exe_path)
Application.Wait (Now + TimeValue("0:00:05"))
複製代碼
作者:
VBALearner
時間:
2016-8-16 23:35
回復
16#
zyzzyva
阿阿我衝動地先回覆了您的原創文了xD 因為太興奮了哈哈哈
真的很感謝您的努力! 我會好好研究!!! 剛剛我已經執行您的程式,成功了!!! 超厲害的超佩服>w<
真的感激不盡~~~!!!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)