轉自:http://bbs./forum.php?mod=viewthread&tid=4804415&page=1
平時我們在做 離線的模型 回溯測試時候,需要歷史的k線數(shù)據(jù),。
可是通達信 的日線數(shù)據(jù)如下:
日線數(shù)據(jù)在
通達信的安裝目錄: vipdoc\sh\lday 下面
本地的通達信 是沒有開放api和外部的 自己的交易回溯測試
工具或框架 進行交互的,。
雖然 我們也可以 通過 sina 的api ,或者 yahoo,,或者 juhe聚合數(shù)據(jù),,或者 wind 或者 tushare (http:///index.html),或者 通聯(lián)金融大數(shù)據(jù) 等 網(wǎng)絡的api接口 獲取 股票的 歷史K線數(shù)據(jù),, 但是網(wǎng)絡的開銷總是會比較耗時一些,。
其實可以通過 Python來 解析 通達信 的這些 day 文件的數(shù)據(jù),變成 我們熟悉的csv格式的數(shù)據(jù),。
- #!/usr/bin/python
- def exactStock(fileName, code):
- ofile = open(fileName,'rb')
- buf=ofile.read()
- ofile.close()
- num=len(buf)
- no=num/32
- b=0
- e=32
- items = list()
- for i in range(int(no)):
- a=unpack('IIIIIfII',buf[b:e])
- year = int(a[0]/10000);
- m = int((a[0]%10000)/100);
- month = str(m);
- if m <10 :
- month = "0" + month;
- d = (a[0]%10000)%100;
- day=str(d);
- if d< 10 :
- day = "0" + str(d);
- dd = str(year)+"-"+month+"-"+day
- openPrice = a[1]/100.0
- high = a[2]/100.0
- low = a[3]/100.0
- close = a[4]/100.0
- amount = a[5]/10.0
- vol = a[6]
- unused = a[7]
- if i == 0 :
- preClose = close
- ratio = round((close - preClose)/preClose*100, 2)
- preClose = close
- item=[code, dd, str(openPrice), str(high), str(low), str(close), str(ratio), str(amount), str(vol)]
- items.append(item)
- b=b+32
- e=e+32
-
- return items
-
- exactStock('E:\\new_tdx\\vipdoc\\sh\\lday\\sh000001.day',"000001")
然后調用 這個方法,,就可以把day文件變成csv文件,方便pandas來處理,。
(在調用這個py文件前,, 先在通達信的 軟件 菜單里面 ,把通達信的 歷史日K線數(shù)據(jù)都下載到本地,,一次即可下載整個市場所有股票品種的數(shù)據(jù),。。)
批量處理的,,請參考下面腳本
調用示例:
pathdir='/vipdoc/sh/lday'
targetDir='/python_data_gupiao/sh/lday'
listfile=os.listdir(pathdir)
for f in listfile:
day2csv_data(pathdir,f,targetDir)
最終的效果如下:
打開這些文件如下:
是不是很熟悉的csv或者excel的格式,。,。,。
這個格式的數(shù)據(jù),
大家就 可以用 python的數(shù)據(jù)分析的庫 pandas 的 pd.read_csv 方法來讀取了,。
這樣速度回比較快,,而且python調用 通達信的歷史數(shù)據(jù) ,就很方便了,。
|