Board logo

標題: 擷取歷史股價 [打印本頁]

作者: white5168    時間: 2012-5-6 19:28     標題: 擷取歷史股價

簡單擷取股價,讓使用者可以輸入自己所要的股票代碼後自動下載從2000/1/1到目前各股每天的歷史股價
作者: chen_cook    時間: 2012-5-7 04:43

這個get web的vba有設定限制,只能抓取固定的時間區段!!!
作者: white5168    時間: 2012-5-7 14:07

The tool supports 2000/1/1~current date
每支股票的上市上櫃日期不一定,所以可能顯示的長短不一樣,請自行確認各股票開始上市上櫃日期
作者: freeffly    時間: 2012-5-8 16:51

有看過人家用類似的方式抓資料
然後直接存檔
作者: diabo    時間: 2012-5-8 18:06

回復 1# white5168

Yahoo Finance 的股價資料,記得鴻海(2317)集團的會有問題....
作者: peter460191    時間: 2012-5-11 10:58

回復 1# white5168


    您這個程式非常不錯,方便分享如何抓取嗎?
作者: jsleee    時間: 2012-5-26 17:14

回復 1# white5168


    感謝大大的分享....
    不知道有無 擷取大盤歷史資料的程式?
    或者能否分享如何自行撰寫?
    不管如何,還是感謝....
作者: diabo    時間: 2012-5-26 19:03

回復 9# jsleee


輸入【 ^TWII】可抓台灣加權指數.......

輸入【USDTWD=x】可抓美元兌台幣的歷史資料.....


其他指數代碼...

台灣證交所
加權指數 ^TWII
不含金融股 ^TIWI
金融保險類 ^TFNI

大陸
深圳綜合 ^SZSC
深圳成份 ^SZSC1
A股指數 ^SZSA
A股成份 ^SZSA1
B股指數 ^SZSB
B股成份 ^SZSB1

綜合指數 ^SSEC
A股指數 ^SSEA
B股指數 ^SSEB
工業指數 ^SSEI
商業指數 ^SSEM
地產指數 ^SSEP
公用事業 ^SSEU

香港證交所
恆生指數 ^HSI
金融指數 ^HSNF
公用事業指數 ^HSNU
地產指數 ^HSNP
工商指數 ^HSNC
中國企業指數 ^HSCE
中資企業指數 ^HSCC

亞太地區
中國 上海綜合指數 000001.SS
香港 恆生指數 ^HSI
台灣 加權指數 ^TWII
日本 Nikkei 225 ^N225
新加坡 海峽時報指數 ^STI
南韓 漢城綜合指數 ^KS11
印度 BSE 30 ^BSESN
印尼 雅加達指數 ^JKSE
馬來西亞 KLSE Composite ^KLSE
澳洲 All Ordinaries ^AORD
菲律賓 PSE Composite ^PSI
斯里蘭卡 All Share ^CSE

歐洲
奧地利 ATX ^ATX
法國 CAC 40 ^FCHI
德國 ^GDAX ^GDAX
英國 FTSE 100 ^FTSE

非洲/中東
埃及 CMA ^CCSI
以色列 TA-100 ^TA100
作者: jsleee    時間: 2012-5-26 20:58

回復 10# diabo


    非常感謝 diabo 大大的說明回復
    受益無窮....
作者: white5168    時間: 2012-5-27 00:28

本帖最後由 white5168 於 2012-5-27 00:48 編輯

應觀眾要求,貼出程式碼,歡迎各位多多指教

在Sheet1貼的內容
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address = "$B$1" Then         '判斷目前使用者所輸入的位置是否在$B$1,如果是,則將B1輸入的代碼傳至GetStockPrice模組中,反之不作動作
  3.     Call GetStockPrice(Range("B1"))         '傳入股票代碼,呼叫GetStockPrice模組
  4.     End If
  5. End Sub
複製代碼
在Module輸入的內容
  1. Sub GetStockPrice(ByVal stockid As String)
  2. '
  3. ' GetStockPrice Macro
  4. ' Amin 在 2012/5/6 錄製的巨集

  5.     Call ClearQueryTablesData
  6.    
  7.     '透過 "外部匯入資料的方法" (就是使用QueryTabls的方法) 將歷史股價從2000/1/1到目前為止的日期,經由 Yahoo finance 抓回來存進excel活頁簿中,如果網站資料有問題,抓回來的也會是錯誤的資料
  8.     With ActiveSheet.QueryTables.Add(Connection:= _
  9.         "TEXT;http://ichart.finance.yahoo.com/table.csv?s=" & stockid & "&a=00&b=4&c=2000&d=" & Month(Date) & "&e=" & Day(Date) & "&f=" & Year(Date) & "&g=d&ignore=.csv" _
  10.         , Destination:=Range("A3"))
  11.         .Name = "stockprice"
  12.         .FieldNames = True
  13.         .RowNumbers = False
  14.         .FillAdjacentFormulas = False
  15.         .PreserveFormatting = True
  16.         .RefreshOnFileOpen = False
  17.         .RefreshStyle = xlOverwriteCells
  18.         .SavePassword = False
  19.         .SaveData = True
  20.         .AdjustColumnWidth = True
  21.         .RefreshPeriod = 0
  22.         .TextFilePromptOnRefresh = False
  23.         .TextFilePlatform = 950
  24.         .TextFileStartRow = 1
  25.         .TextFileParseType = xlDelimited
  26.         .TextFileTextQualifier = xlTextQualifierDoubleQuote
  27.         .TextFileConsecutiveDelimiter = False
  28.         .TextFileTabDelimiter = True
  29.         .TextFileSemicolonDelimiter = False
  30.         .TextFileCommaDelimiter = True
  31.         .TextFileSpaceDelimiter = False
  32.         .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1)
  33.         .TextFileTrailingMinusNumbers = True
  34.         .Refresh BackgroundQuery:=False
  35.     End With
  36. End Sub

  37. Sub ClearQueryTablesData()                          '判斷當前活頁簿中是否有前一筆的資料,若有則清除,反之直接下載股價
  38.     Dim n As Integer                                                   
  39.     If Range("A4") <> "" Then                       '判斷目前的活頁簿是否有資料存在, 這行可以再寫的更謹慎,歡迎各位自行修改
  40.         n = ActiveSheet.Range("A4").End(xlDown).Row '選取目前活頁簿從A4位置到最後一行的範圍
  41.         For Each gt In ActiveSheet.QueryTables      '選取用QueryTables抓取的每一行
  42.             gt.Delete                               '將使用QueryTables方法所產生的行進行刪除,避免QueryTables用久了,造成系統堆積一堆QueryTables的垃圾,如此系統才不會變慢(各位應該都也感覺)
  43.         Next
  44.         ActiveSheet.Range("A4:G" & n).Clear         '清除所選取的資料
  45.      End If
  46. End Sub
複製代碼

作者: jsleee    時間: 2012-5-27 12:02

回復 10# diabo


    不好意思,有辦法查 大盤的成交量金額資料嗎?
作者: diabo    時間: 2012-5-27 15:38

http://finance.yahoo.com/q/hp?s=%5ETWII+Historical+Prices
原始資料就這麼多....
作者: white5168    時間: 2012-6-3 13:44

應jsleee要求

關於大盤成交量可參考http://forum.twbts.com/thread-6750-1-2.html
作者: diabo    時間: 2012-6-5 00:09

大盤的四價(開高低收)資料最好與成交量資料都從TWSE來比較沒問題,不要一下子Yahoo Finance 一下子TWSE

http://www.twse.com.tw/ch/trading/indices/MI_5MINS_HIST/MI_5MINS_HIST.php?myear=101&mmon=05
http://www.twse.com.tw/ch/trading/exchange/FMTQIK/genpage/Report201206/201206_F3_1_2.php?STK_NO=&myear=2012&mmon=06
作者: white5168    時間: 2012-6-5 21:26

diabo大大
有能力請自行寫出來用,不要在抱怨東抱怨西的
作者: diabo    時間: 2012-6-6 23:46

本帖最後由 diabo 於 2012-6-6 23:52 編輯

回復 16# white5168

我是好意提醒,Yahoo finance 處理的日成交資訊,因為沒有特別處理台灣的彈性放假與補修的問題,所以每日成交資料數量與台灣證交所資料有所不同,請自行比較就知道的。

我可以提供自用的Excel範例供參考(程式碼沒鎖,完全公開),請自行下載附件。

[attach]11292[/attach]
作者: mannyhsu    時間: 2012-6-21 01:07

回復 17# diabo


    請問如果是上市、上櫃的歷史股價資料查詢, 是否也能提供? 謝謝。
作者: tsuneng    時間: 2012-8-11 23:25

回復 16# diabo

因我是新手,有不明白處請教  
請  diabo 大大:  說明
        
         Sub 更新大盤資料() 中
            If 最後一筆資料列數 = 1 Then   
         
           1 --> 的用法

         謝謝!!
作者: white945    時間: 2012-8-12 00:09

本帖最後由 GBKEE 於 2012-8-12 06:07 編輯

回復 18# tsuneng

         Sub 更新大盤資料() 中
            If 最後一筆資料列數 = 1 Then   
         
           1 --> 的用法

    雖然看不到完整程式碼
不過從這片段看來,執行這個判斷之前應該會有段計算
最後一筆資料列數=XXX運算式
才來判斷"最後一筆資料列數"這個變數是否等於1
這樣推斷不知對否,請各位前輩指正
作者: tsuneng    時間: 2012-8-12 07:27

回復 19# white945

尊重原作者,只貼出部份程式碼.

With Sheets("TWII")
        資料庫最後一筆資料列數 = .Cells(Rows.Count, "A").End(xlUp).Row
        If 資料庫最後一筆資料列數 = 1 Then
            資料庫最後一筆日期 = DateSerial(1999, 1, 1)
        Else
            資料庫最後一筆日期 = .Cells(資料庫最後一筆資料列數, "A").Value
        End If
        資料庫新資料寫入列數 = 資料庫最後一筆資料列數 + 1
    End With
作者: tsuneng    時間: 2012-8-12 11:41

己明白,  用意在判斷最後己完成下載的最後時間.  tks!
作者: tsuneng    時間: 2012-8-22 09:10

回復 17# mannyhsu

diabo 大大,你好! 謝謝你供上市歷史資料查詢,從中學習許多.
可否請敎上櫃下載CSV.file 要如何處理。

http://www.otc.org.tw/ch/stock/aftertrading/daily_trading_info/st43.php
以下是我由原始網頁資料檔中查詢出來, 試了許久無法解決.  
function query()這段函數
var yy = document.getElementsByName("y_date1")[0].value;
var mm = document.getElementsByName("m_date1")[0].value;
var input_code = document.getElementsByName("input_stock_code")[0].value;
var param = 'ajax=true&yy='+yy+'&mm='+mm+'&input_stock_code='+input_code;

感謝!!!
作者: r2henry    時間: 2012-11-28 16:01

回復 10# white5168

很抱歉,出現如下的錯誤訊息,請教應該如何來做修正???? 感謝您

[attach]13314[/attach]
作者: papamomo    時間: 2012-11-30 21:49

將下列文字 存成 上櫃股價查詢.iqy
在開啟就可以了
WEB
1
http://www.otc.org.tw/ch/stock/aftertrading/daily_trading_info/result_st43.php
ajax=true&yy=["上櫃股票 - 個股日成交資訊","輸入查詢「西元」年份"]&mm=["上櫃股票 - 個股日成交資訊","輸入查詢月份"]&input_stock_code=["上櫃股票 - 個股日成交資訊","輸入股票代碼"]
Formatting=All
DisableDateRecognition=True
作者: hadechen    時間: 2013-9-2 16:50

回復 1# white5168


    沒辦法下載
作者: robin0338    時間: 2013-9-8 20:18

如果需要一次下載全部股票的每天成交資訊,EXCEL 是否會超過處理極限。 有人試過嗎??
作者: ycleec    時間: 2014-1-27 14:16

剛剛加入無法下載大大的傑作 (看起來應該很好用)
起問有甚麼方法可以下載呢 ?
作者: bytegiga168    時間: 2014-2-4 13:12

謝謝大大的分享
作者: chang0833    時間: 2014-2-28 16:49

請問white5168大師:
         如果我要將一個檔設計為一次將同一類股的各別歷史股價,並分別下載放在不同的工作頁面上
        不知道這是否可行?並在我開啟檔案時自動更新到最新日期?
作者: heavenweaver    時間: 2014-2-28 18:40

回復 27# ycleec
請參考#10
http://forum.twbts.com/redirect. ... 1&fromuid=10508
作者: smart3135    時間: 2014-4-22 00:59

回復 10# white5168
大大寫得非常詳細呢?我是剛接觸EXCEL VBA的新手,希望能儘快追上大大的腳步,也能與大家分享自己學習的成果!
作者: 土尼    時間: 2014-4-22 06:33

本帖最後由 土尼 於 2014-4-22 06:34 編輯

請問下載台股CSV資料後裡面有1千多檔股票,問題是這1千多檔股票要如何一支一支抓出來,在匯入本身看盤軟體.(格式也不一樣,一個一個剪貼要瘋了)
01003T        新光R1        18        770,190        12.9        12.9        12.75        12.75
01004T        富邦R2        46        3,301,720        12.01        12.03        12        12
01007T        國泰R2        27        3,967,860        14.55        14.56        14.5        14.53
01008T        駿馬R1        53        7,210,790        17.31        17.39        17.31        17.39
1101        台泥        2,666        248,760,481        48.5        48.8        48.2        48.45
1102        亞泥        5,263        642,469,708        39.6        39.6        39.25        39.5
1103        嘉泥        768        44,964,636        16.1        17.1        16.1        16.8
1104        環泥        313        20,151,814        30.7        30.8        30.5        30.65
1108        幸福        279        8,560,759        9.16        9.23        9.15        9.18
1109        信大        42        1,859,050        13.2        13.2        13.15        13.15
1110        東泥        17        377,607        16.9        16.9        16.75        16.75
1201        味全        711        40,280,386        45.8        46.25        45.8        46.15
1203        味王        55        1,096,081        23.8        23.8        23.7        23.7
1210        大成        2,371        175,781,932        31.3        31.45        30.8        31
1213        大飲        38        1,637,989        22.3        22.4        22.2        22.35
作者: n2143658709    時間: 2014-8-31 12:17

之前在網路上也找到一個抓歷史股價的code,來比較看看他們的差別~
作者: PKKO    時間: 2015-7-3 20:43

好讚!研究一下,謝謝!
謝謝版大以及diabo大大!
作者: wufonna    時間: 2019-1-14 13:30

回復 1# white5168
請教 大大 原始的網頁不見了,可改那一個網址,謝謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)