COCO研究院

 找回密碼
 註冊
搜索
查看: 8849|回復: 29

櫃買中心從2013/12/27的資料無法下載啦!

[複製鏈接]
發表於 14-1-1 14:34 | 顯示全部樓層 |閱讀模式
櫃買中心網頁最近改版,從2013/12/27的資料就無法下載CSV檔了。請問有誰可以提供新的下載方式!現在只能一檔一檔的輸入了嗎????
 樓主| 發表於 14-1-1 17:33 | 顯示全部樓層
joey0415 發表於 14-1-1 16:27
日報表嗎?
http://www.gretai.org.tw/ch/stock/aftertrading/broker_trading/download_ALLCSV.php?curstk= ...

感謝你的回應,由於櫃買中心網頁最近改版,從2013/12/27的資料就無法再用TWS4AB程式下載CSV檔了,也不知道還有甚麼方式可以自動下載歷史股價並輸入amibroker。真是苦惱,不知你是否有好建議。
發表於 14-1-2 14:27 | 顯示全部樓層
有沒有 csv的直接連結?以前可以用 wget抓,現在這個不行
發表於 14-1-2 14:30 | 顯示全部樓層
lwhuang 發表於 14-1-2 14:27
有沒有 csv的直接連結?以前可以用 wget抓,現在這個不行

全部證券(不含權證、牛熊證)
http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/stk_wn1430_download.php?d=102/12/30&se=EW&s=0,asc,0
下載檔名 SQUOTE_EW_1021230.csv

全部證券(含權證)
http://www.otc.org.tw/ch/stock/aftertrading/DAILY_CLOSE_quotes/stk_quote_download.php?d=102/12/30&s=0,asc,0
下載檔名 RSTA3104_1021230.csv
發表於 14-1-2 14:43 | 顯示全部樓層
我將 OTC_CLOSE.py 做了些修改,請看標注紅色的部份,因功力不好只能改成自己勉強使用。
直接下載CSV存檔目錄 C:\mySTock\OTC\CLOSE
修改轉成TXT存檔目錄 C:\mySTock\OTC\AB

import sys
import urllib.request
import os.path
import time
import datetime
from datetime import datetime, timedelta
import re
import win32com
from win32com.client import Dispatch, constants
from win32com.client import DispatchEx


p = re.compile('["]([^"]*)["]')

#櫃買 960701   RSTA3104_1021230.csv
# import urllib.request
# strOTCURL='http://www.gretai.org.tw/ch/stock/aftertrading/DAILY_CLOSE_quotes/RSTA3104_' #960702.csv
# http://www.otc.org.tw/ch/stock/a ... 0&se=EW&s=0,asc,0
# SQUOTE_EW_1021230.csv
strOTCURL='http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/stk_wn1430_download.php?d=' #1021230.csv
today = datetime.today()
yesterday=today

dayback=sys.argv[1]   #下載資料日數[以今日起算]
outPATH= sys.argv[2]  #檔案輸出目錄

if dayback=='':
    daynumMAX=1
else:
    if int(dayback)>0:
        daynumMAX=int(dayback)
    else:
        daynumMAX=1


for i in range(1,daynumMAX):
    yesterday = yesterday - timedelta(1)  

#檢查輸出目錄是否存在
cond1=os.path.exists(outPATH)
if (not cond1):
  try:
    os.system('mkdir '+outPATH)
    cond1=1
  except IOError as IOE :
    print ('輸出目錄' +outPATH +' 無法建立')   
    cond1=0

#確認輸出目錄建立成功,才進行

if(cond1):
  #檢查輸出目錄是否存在         
  outDST=outPATH+'CLOSE\\'  
  cond1A=os.path.exists(outDST)
  if (not cond1A):
    try:
      os.system('mkdir '+outDST)
      cond1A=1
    except IOError as IOE :
      print ('輸出目錄' +outDST +' 無法建立')   
      cond1A=0
  #檢查輸出目錄是否存在         
  outAB=outPATH+'AB\\'
  cond2A=os.path.exists(outAB)
  if (not cond2A):
    try:
      os.system('mkdir '+outAB)
      cond2A=1
    except IOError as IOE :
      print ('輸出目錄' +outAB +' 無法建立')   
      cond2A=0
  #開始下載
  for daynum in range(1,daynumMAX+1):
    inputEntry = yesterday.strftime('%Y_%m_%d').split('_')
    #日期檢查   
    YYYY= inputEntry[0]
    MM= inputEntry[1]
    DD=inputEntry[2]
    TAIYYYY=int(YYYY)-1911
    if int(YYYY) >2000:
        if TAIYYYY<100:
            YYYY1='%02d'%(TAIYYYY)
        else:
            if TAIYYYY <1000:
                YYYY1='%03d'%(TAIYYYY)
            else:
                YYYY1='%04d'%(TAIYYYY)   
    else:
        today = datetime.today()
        autoentry=today.strftime('%Y_%m_%d').split('_')
        TAIYYYY1=int(autoentry[0])-1911
        if TAIYYYY1 < 100:
            YYYY1='%02d'%(TAIYYYY1)
        else:
            if TAIYYYY1 < 1000:
                YYYY1='%03d'%(TAIYYYY1)
            else:
                YYYY1='%04d'%(TAIYYYY1)   

    print('\n(%04d'%daynum+'/%04d'%daynumMAX+'):'+YYYY+MM+DD+' 開始')
    #上市每日收盤行情
    condIDX1=0
    condIDX2=0
    strOTCIDX1=strOTCURL+YYYY1+'/'+MM+'/'+DD+'&se=EW&s=0,asc,0'
    strDSTIDX1=outDST+'SQUOTE_EW_'+YYYY+MM+DD+'.csv'
    Cond2=os.path.exists(strDSTIDX1)
    if not Cond2:              
      print ('連線')  
      for retryCount in range(0,3):
        try:
          time.sleep(0.2)  
          condIDX1=urllib.request.urlopen(strOTCIDX1)
          if (condIDX1):
            #strOTCIDX2=strOTCURL+YYYY1+MM+DD+'.csv'
            strOTCIDX2=strOTCIDX1

            condIDX2=urllib.request.urlretrieve(strOTCIDX2,strDSTIDX1)
            break
        except IOError as IOE :
          time.sleep(2)   
          condIDX1=0
          condIDX2=0
          print ('出現連線問題: 嘗試',retryCount)  
      if condIDX1 and condIDX2:
          print('(%03d'%daynum+')  (1): '+strDSTIDX1+' 下載完成')
      else:
          if condIDX1:
            print('(%03d'%daynum+') (1): '+strDSTIDX1+' 下載失敗')  
            condIDX1=0
            condIDX2=0
          else:
            print("  警告 ("+YYYY+MM+DD+") 並不是交易日")  
            condIDX1=0
            condIDX2=0         
    else:
      condIDX2=1
      print(strDSTIDX1+"已經存在")      
      
    if (condIDX2 and os.path.getsize(strDSTIDX1) <=2048):
        print("  警告 ("+strDSTIDX1+") 不是一個有效的檔案, ("+YYYY+MM+DD+") 並不是交易日\n")
        os.remove(strDSTIDX1)
        condIDX1=0
        condIDX2=0
    else:      
        if condIDX2:            
          Cond1=os.path.exists(strDSTIDX1)
          if Cond1:
            sectionstart=0
            u1=open(strDSTIDX1)
            rows = u1.read().split('\n')
            outfileT1=outAB+YYYY+MM+DD+'.txt'
            f1 = open(outfileT1, 'w')
            print('      產生' + outfileT1+' 中')
            #f.write('證券代號,證券名稱,成交股數,成交筆數,成交金額,開盤價,最高價,最低價,收盤價,漲跌(+/-),漲跌價差,最後揭示買價,最後揭示買量,最後揭示賣價,最後揭示賣量,本益比'+'\n')
            for row in rows:
                row=p.sub(lambda m: m.groups()[0].replace(',',''), row)
                row=row.replace('=','')
                #row=row.replace('"','')
                #print(row)
                if ('代號' in row):
                    #代號,名稱,收盤,漲跌,開盤,最高,最低,均價,成交股數 ,成交金額(元),成交筆數 ,最後買價,最後賣價,發行股數 ,次日參考價 , 次日漲停價 ,次日跌停價
                    #代號,名稱,收盤,漲跌,開盤,最高,最低,成交股數,成交金額(元),成交筆數,最後買價,最後賣價,發行股數,次日漲停價,次日跌停價
                    sectionstart=1
                # if ('上櫃家數:' in row):
                if ('共' in row):                    
                  sectionstart=0   
                if (sectionstart==1 and (row!='')):
                    if ('代號' in row):
                        f1.write('證券代號,日期,開盤價,最高價,最低價,收盤價,成交張數\n')   
                    else:   
                        item=row.split(',')
                        if ((len(item[0])<=5) and (item[2]!=" ---") and (item[2]!="0.00") and (item[7]!="0")):
                          #  f1.write(item[0]+'.TW,'+YYYY+'/'+MM+'/'+DD+','+item[4]+','+item[5]+','+item[6]+','+item[2]+','+str(float(item[8])/1000)+','+item[1]+','+item[10]+','+item[9]+','+item[3]+','+item[11]+','+item[12]+'\n')
                            f1.write(item[0]+','+YYYY+'/'+MM+'/'+DD+','+item[4]+','+item[5]+','+item[6]+','+item[2]+','+str(float(item[7])/1000)+'\n')
            f1.close()  
            u1.close()
            print('      OTC盤後資料 (' + outfileT1+') 完成\n')
    yesterday = yesterday + timedelta(1)  
else:
    print('指定輸出目錄: ('+outPATH+') 無法建立')
print('盤後資料下載完成')


發表於 14-1-2 16:44 | 顯示全部樓層
本帖最後由 Sirius 於 14-1-2 16:46 編輯
heavenweaver 發表於 14-1-2 14:30
全部證券(不含權證、牛熊證)
http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/stk_wn1430_download.php?d=102/12/30&se=EW&s=0,asc,0
下載檔名 SQUOTE_EW_1021230.csv

全部證券(含權證)
http://www.otc.org.tw/ch/stock/aftertrading/DAILY_CLOSE_quotes/stk_quote_download.php?d=102/12/30&s=0,asc,0
下載檔名 RSTA3104_1021230.csv

第一個不含定價
第二個含定價與零股交易

發表於 14-1-3 10:51 | 顯示全部樓層
len(item[0])<=5 需考慮修改成 len(item[0])<=6
否則 006201寶富櫃 這檔將永不錄用

if ('代號' in row):
                        f1.write('證券代號,日期,開盤價,最高價,最低價,收盤價,成交張數\n')   
                    else:   
                        item=row.split(',')
                        if ((len(item[0])<=6) and (item[2]!=" ---") and (item[2]!="0.00") and (item[7]!="0")):
                          #  f1.write(item[0]+'.TW,'+YYYY+'/'+MM+'/'+DD+','+item[4]+','+item[5]+','+item[6]+','+item[2]+','+str(float(item[8])/1000)+','+item[1]+','+item[10]+','+item[9]+','+item[3]+','+item[11]+','+item[12]+'\n')
                            f1.write(item[0]+','+YYYY+'/'+MM+'/'+DD+','+item[4]+','+item[5]+','+item[6]+','+item[2]+','+str(float(item[7])/1000)+'\n')
            f1.close()  
            u1.close()
發表於 14-1-5 21:54 | 顯示全部樓層
我也遇到這個問題了~~
不知道有那個大大可以幫忙解決~~~
不然就真的只能一天一天慢慢下了~~~

 樓主| 發表於 14-1-6 14:23 | 顯示全部樓層
heavenweaver 發表於 14-1-2 14:43
我將 OTC_CLOSE.py 做了些修改,請看標注紅色的部份,因功力不好只能改成自己勉強使用。
直接下載CSV存檔目 ...

我跟著你的程式碼修改後,依然沒能下載,請問你更改後能用嗎?有下載到嗎?
發表於 14-1-6 17:54 | 顯示全部樓層
本帖最後由 heavenweaver 於 14-1-6 18:08 編輯
hsiao13 發表於 14-1-6 14:23
我跟著你的程式碼修改後,依然沒能下載,請問你更改後能用嗎?有下載到嗎? ...

我的自動批次執行檔otc3.bat如下,為確認你的程式正確執行,請在"命令提示字元"環境下操作,這樣您可以閱讀程式執行所回應的訊息。
----
REM start "收盤"
C:\python33\python C:\myStock\Python\OTC_CLOSE.py 10 C:\myStock\OTC\
----
所以我的資料下載目錄如下:
CSV存檔目錄 C:\mySTock\OTC\CLOSE
TXT存檔目錄 C:\mySTock\OTC\AB

OTC3.rar (2.44 KB, 下載次數: 474)

請您先檢查存檔目錄是否有資料下載成功?

我的TXT檔上傳到AB格式與TWS4AB相同

# Format definition file generated automatically
# by AmiBroker's ASCII Import Wizard
$FORMAT Ticker, Date_YMD, Open, High, Low, Close, Volume, skip
$SKIPLINES 1
$OVERWRITE 1
$SEPARATOR ,
$CONT 1
$GROUP 254
$AUTOADD 1

評分

參與人數 1金錢 +2 收起 理由
lwhuang + 2 感謝分享

查看全部評分

發表於 14-1-6 19:00 | 顯示全部樓層
依照上面的修改原則,我將Python33的OTC_CLOSE.py作了Python27的降版OTC_C1.py,它的好處是可以套py2exe編譯成執行檔。請自行參考,歡迎功力好的人整合起來。

OTC2A.rar (2.51 KB, 下載次數: 472)
發表於 14-1-6 19:19 | 顯示全部樓層
剛剛請原作大大協助處理新的TWS4AB.
測試正常.
已徵求原作同意放到coco in 給網友分享
但不保證任何資料正確性與往後再次改版是否會有空更新.
有急須的就先用吧!!!!
重點還是要想辦法自己弄資料源比較妥當.



TWS4AB.7z (3.22 MB, 下載次數: 84)

評分

參與人數 1金錢 +2 收起 理由
heavenweaver + 2 感謝分享

查看全部評分

發表於 14-1-6 19:22 | 顯示全部樓層
另外提醒~~記得更改config.ini檔案內的日期與路徑.
不然會從2010開始更新
發表於 14-1-8 19:44 | 顯示全部樓層
本帖最後由 stock009 於 14-1-8 19:52 編輯

感謝 TWS4AB 復活
請問TWS4AB把下載網址包在哪個檔案內啊?
發表於 14-1-9 00:54 | 顯示全部樓層
stock009 發表於 14-1-8 19:44
感謝 TWS4AB 復活
請問TWS4AB把下載網址包在哪個檔案內啊?

當然是在TWS4AB.exe內部,你用UltraEdit就可搜尋到
上市下載網址
http://www.twse.com.tw/ch/trading/exchange/MI_INDEX/MI_INDEX3_print.php?genpage=genpage/Report%s/A112%sALL_1.php&type=csvs
上櫃下載網址
http://www.otc.org.tw/ch/stock/aftertrading/otc_quotes_no1430/SQUOTE_AL_%s%s.CSV

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-22 14:33

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |