2012年3月1日

免費下載十八年的歷史股價

前陣子想要下載恆生指數及一些香港股票的過往股價做點簡單的分析,於是在網上找免費的股價資料。

發現Yahoo!HK所提供的“過往股價”服務可將股價下載成.csv,非常方便。可惜除了恆指以外,其他個股只提供2003年或以後的資料,略嫌不足。

於是我往Google財經尋找,發現它的資料由1999開始,卻沒有提供下載服務。在網上找了一會,決定乾脆從Google那邊將1999-2003年的資料Copy & Paste出來,加進Yahoo的檔案了。

由於Google每頁只會顯示30項資料,因此要在每頁都做一遍Copy & Paste的動作會很費時。但原來只要在URL上稍微改動則可在每頁顯示200項,能省掉不少時間和功夫。

例如, 香港證券市場的匯豐(0005),在沒有選擇需要顯示的期間的情況下,它會自動顯示近一年的資料,URL是這樣的:

http://www.google.com.hk/finance/historical?q=HKG:0005

但只要在後邊加上startdate, enddate和num的數值,則可顯示你所需要的資料。

e.g. 匯豐(0005)由1999-01-01至2003-01-01的股價,每頁顯示200項:

http://www.google.com.hk/finance/historical?q=HKG:0005&startdate=1999-01-01&enddate=2003-01-01&num=200

在以上的句式上換成其他數值,則可得出自己需要的資料:

HKG:xxxx(香港股票編號)
startdate=xxxx-xx-xx(開始顯示日期)
enddate=xxxx-xx-xx(結束顯示日期)
num=xxx(每頁顯示的項數,由1-200)

也蠻容易啦。閣下若有其他更方便下載歷史股價的免費方法,請也告訴我哦~

5 則留言:

  1. 有冇諗過用program 一次過read 曬所有1999年至2013年既data 出黎?

    回覆刪除
  2. SET LIBRARY TO (LOCFILE("vfpconnection.fll","FLL"))
    * SET LIBRARY TO (LOCFILE("c:\stock_graph\vfpconnection.fll","fll"))

    * ichart.finance.yahoo.com/table.csv?s=0005.HK&d=5&e=30&f=2013&g=d&a=0&b=3&c=2000&ignore=.csv

    date_ref=date()
    if date_ref < {2099/01/01}
    date_ref={2099/01/01}
    endif
    date_ref=dtoc(date_ref)
    date_ref_d=substr(date_ref,9,2)
    date_ref_m=substr(date_ref,6,2)
    date_ref_y=substr(date_ref,1,4)
    stock_i_ref=1
    erase ('Yahoo\*.*')
    do while stock_i_ref <=9999
    ? 'Today =',date_ref, ' stock_i_ref',stock_i_ref , 9999
    stock_i_code=str(10000+stock_i_ref,5)
    stock_i_code=substr(stock_i_code,2,4)
    file_code=stock_i_code+'.csv'
    a1='http://ichart.finance.yahoo.com/table.csv?'+'s='
    a2='0005.HK'
    a2=stock_i_code+'.HK'
    a3=chr(38)+'a=00'+chr(38)+'b=1'+chr(38)+'c=1990'+chr(38)
    date_ref_m=val(date_ref_m)
    date_ref_m=date_ref_m-1
    date_ref_m=str(100+date_ref_m,3)
    date_ref_m_minus1=substr(date_ref_m,2,2)
    a4='d='+date_ref_m_minus1+chr(38)+'e='+date_ref_d+chr(38)+'f='+date_ref_y+chr(38)+'g=d'
    * +'d=05'+chr(38)+'e=29'+chr(38)+'f=2013'+chr(38)+'g=d'

    * a3=''
    * a3=chr(38)+'a=00'+chr(38)+'b=1'+chr(38)+'c=1990'+chr(38)+'d=05'+chr(38)+'e=29'+chr(38)+'f=2013'+chr(38)+'g=d'

    a=a1+a2+a3+a4
    ff= "Yahoo\"+file_code
    erase &ff
    dummy=HTTPGet(a,ff, "MyProgress()", "MyTrace()")
    close all
    file_size=GetFileSize(ff)
    do case
    case file_size > 5000
    otherwise
    erase &ff
    endcase
    stock_i_ref=stock_i_ref+1
    enddo

    回覆刪除
  3. 一次最多顯示200列..即使設定超過200. 也只顯示200列

    回覆刪除