櫃買中心從2013/12/27的資料無法下載啦!
櫃買中心網頁最近改版,從2013/12/27的資料就無法下載CSV檔了。請問有誰可以提供新的下載方式!現在只能一檔一檔的輸入了嗎???? joey0415 發表於 14-1-1 16:27 static/image/common/back.gif日報表嗎?
http://www.gretai.org.tw/ch/stock/aftertrading/broker_trading/download_ALLCSV.php?curstk= ...
感謝你的回應,由於櫃買中心網頁最近改版,從2013/12/27的資料就無法再用TWS4AB程式下載CSV檔了,也不知道還有甚麼方式可以自動下載歷史股價並輸入amibroker。真是苦惱,不知你是否有好建議。 有沒有 csv的直接連結?以前可以用 wget抓,現在這個不行
lwhuang 發表於 14-1-2 14:27 static/image/common/back.gif
有沒有 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
我將 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/aftertrading/otc_quotes_no1430/stk_wn1430_download.php?d=102/12/30&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 #下載資料日數[以今日起算]
outPATH= sys.argv#檔案輸出目錄
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
MM= inputEntry
DD=inputEntry
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)-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().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)<=5) and (item!=" ---") and (item!="0.00") and (item!="0")):
#f1.write(item+'.TW,'+YYYY+'/'+MM+'/'+DD+','+item+','+item+','+item+','+item+','+str(float(item)/1000)+','+item+','+item+','+item+','+item+','+item+','+item+'\n')
f1.write(item+','+YYYY+'/'+MM+'/'+DD+','+item+','+item+','+item+','+item+','+str(float(item)/1000)+'\n')
f1.close()
u1.close()
print(' OTC盤後資料 (' + outfileT1+') 完成\n')
yesterday = yesterday + timedelta(1)
else:
print('指定輸出目錄: ('+outPATH+') 無法建立')
print('盤後資料下載完成')
本帖最後由 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
第一個不含定價
第二個含定價與零股交易
len(item)<=5 需考慮修改成 len(item)<=6
否則 006201寶富櫃 這檔將永不錄用
if ('代號' in row):
f1.write('證券代號,日期,開盤價,最高價,最低價,收盤價,成交張數\n')
else:
item=row.split(',')
if ((len(item)<=6) and (item!=" ---") and (item!="0.00") and (item!="0")):
#f1.write(item+'.TW,'+YYYY+'/'+MM+'/'+DD+','+item+','+item+','+item+','+item+','+str(float(item)/1000)+','+item+','+item+','+item+','+item+','+item+','+item+'\n')
f1.write(item+','+YYYY+'/'+MM+'/'+DD+','+item+','+item+','+item+','+item+','+str(float(item)/1000)+'\n')
f1.close()
u1.close()
我也遇到這個問題了~~
不知道有那個大大可以幫忙解決~~~
不然就真的只能一天一天慢慢下了~~~
{:4_138:} heavenweaver 發表於 14-1-2 14:43 static/image/common/back.gif
我將 OTC_CLOSE.py 做了些修改,請看標注紅色的部份,因功力不好只能改成自己勉強使用。
直接下載CSV存檔目 ...
我跟著你的程式碼修改後,依然沒能下載,請問你更改後能用嗎?有下載到嗎? 本帖最後由 heavenweaver 於 14-1-6 18:08 編輯
hsiao13 發表於 14-1-6 14:23 static/image/common/back.gif
我跟著你的程式碼修改後,依然沒能下載,請問你更改後能用嗎?有下載到嗎? ...
我的自動批次執行檔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
請您先檢查存檔目錄是否有資料下載成功?
我的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
依照上面的修改原則,我將Python33的OTC_CLOSE.py作了Python27的降版OTC_C1.py,它的好處是可以套py2exe編譯成執行檔。請自行參考,歡迎功力好的人整合起來。
剛剛請原作大大協助處理新的TWS4AB.
測試正常.
已徵求原作同意放到coco in 給網友分享
但不保證任何資料正確性與往後再次改版是否會有空更新.
有急須的就先用吧!!!!
重點還是要想辦法自己弄資料源比較妥當.
另外提醒~~記得更改config.ini檔案內的日期與路徑.
不然會從2010開始更新
本帖最後由 stock009 於 14-1-8 19:52 編輯
感謝 TWS4AB 復活 {:4_161:}
請問TWS4AB把下載網址包在哪個檔案內啊?
stock009 發表於 14-1-8 19:44 static/image/common/back.gif
感謝 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
頁:
[1]
2