PYTHON量化交易之股票數(shù)據(jù)的獲取——同花順軟件[程序化老手]
?
前言
數(shù)據(jù)是進(jìn)行量化交易的基礎(chǔ)和關(guān)鍵,目前國內(nèi)做量化產(chǎn)品的金融機(jī)構(gòu)大部分是從券商獲取高頻實(shí)時(shí)行情數(shù)據(jù)的,另外很多金融網(wǎng)站也提供了數(shù)據(jù)接口,可以調(diào)用接口方式獲取,也可以用爬蟲的方式獲取。文本講述一種更經(jīng)濟(jì)便捷的方式來獲取數(shù)據(jù),即通過同花順交易軟件來導(dǎo)出股票數(shù)據(jù),并且將數(shù)據(jù)轉(zhuǎn)換為DataFrame 表格型的數(shù)據(jù)結(jié)構(gòu),以csv的格式存儲(chǔ),便于后續(xù)進(jìn)行量化交易分析。
同花順交易數(shù)據(jù)導(dǎo)出
1.打開同花順軟件,點(diǎn)擊“分析”欄,選擇“歷史成交”,此時(shí)會(huì)出現(xiàn)股票的日線交易數(shù)據(jù)。
2.點(diǎn)擊“右鍵”,選擇“數(shù)據(jù)導(dǎo)出”—>“導(dǎo)出所有數(shù)據(jù)”,選擇導(dǎo)出的類型為Excel,執(zhí)行下一步直到完成,即得到了2004年至今的該股交易數(shù)據(jù)。
3.打開EXCEL文檔已經(jīng)可以查看到導(dǎo)出的數(shù)據(jù)了,不過在量化領(lǐng)域中最常用使用的是CSV格式,這里將EXCEL另存為CSV格式。CSV文件是一種文本文件,用記事本就能打開。文件的數(shù)據(jù)列以半角逗號(hào)分隔,每一行數(shù)據(jù)都以回車符結(jié)束。它可以非常容易地被導(dǎo)入各種PC表格及數(shù)據(jù)庫中。將EXCEL另存為CSV格式時(shí),CSV文件將EXCEL工作表中的單元格所顯示的文本和數(shù)值以逗號(hào)分離進(jìn)行保存。
注:如果單元格中包含逗號(hào),則該單元格中的內(nèi)容以雙引號(hào)引起。
轉(zhuǎn)換為DataFrame格式
在Python中,pandas是數(shù)據(jù)處理方面功能最為強(qiáng)大的擴(kuò)展模塊了,包含了高級(jí)的數(shù)據(jù)結(jié)構(gòu)Series和DataFrame,使得在Python中處理數(shù)據(jù)變得非常方便、快速和簡單,后續(xù)我們在應(yīng)用中會(huì)深有體會(huì)。
方法1:通過pandas模塊自帶的read_csv函數(shù)可直接得到DataFrame格式數(shù)據(jù),注意編碼格式為“GB2132”,否則控制臺(tái)會(huì)將中文解析為亂碼。
df_csvload?= pd.read_csv('C:\programPY\CSV_RWdata_ForNewFile\DataChange.csv',parse_dates=True,index_col=0,encoding='gb2312')
方法2:此處使用CSV模塊的DictReader函數(shù)讀取CSV文件,DictReader函數(shù)以字典形式返回,字典的鍵則是這個(gè)單元格的標(biāo)題(即列頭),每一個(gè)單元格內(nèi)容放在字典的值內(nèi)。DataFrame的創(chuàng)建方式有numpy二維數(shù)組、列表、Series序列以及字典方式等,此處DictReader函數(shù)返回的字典形式數(shù)據(jù)可直接創(chuàng)建,字典中的keys就是DataFrame里面的columns,但是沒有index的值,默認(rèn)是從零開始計(jì)數(shù)。
f=codecs.open('C:\programPY\CSV_RWdata_ForNewFile\DataChange.csv','rb','gb2312')#GB2312編碼 reader = csv.DictReader(f) rows = [row for row in reader] df = pd.DataFrame(rows) f.close()
該方法需要增加額外的處理,將“時(shí)間”列作為index索引,同時(shí)將日期信息去除星期幾
df.rename(columns={ "時(shí)間":'time' },inplace=True)#替換為英文columns for index,colstr in enumerate(df['time']): colstr = colstr.split(',',1)#去除日期中的星期幾 df.loc[index, 'time'] = colstr[0] df.index = df['time'].tolist()#time作為index del df['time']#數(shù)據(jù)中刪除time列
數(shù)據(jù)保存
數(shù)據(jù)處理后使用pandas模塊自帶的to_csv可將數(shù)據(jù)直接存儲(chǔ)為CSV。
df.to_csv('C:\programPY\CSV_RWdata_ForNewFile\DataCheck.csv',columns=df.columns,index=True)
轉(zhuǎn)自:segmentfault
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 511411198 或微信:cxhjy888 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)
- 上一篇:如何捕捉趨勢,讓盈利持續(xù)?
- 下一篇:沒有了!
相關(guān)文章
-
沒有相關(guān)內(nèi)容