【量化交易笔记】1.数据来源
簡介
數(shù)據(jù)是機器學習的核心,garbage in garbage out,而金融數(shù)據(jù)是量化的基礎,對數(shù)據(jù)提出了更高的要求。不僅是數(shù)據(jù)準確高速(穩(wěn)定),而且要求數(shù)據(jù)豐富全面。
金融數(shù)據(jù)
考慮到金融數(shù)據(jù)非常豐富,能快速入門,降低門檻,因此,本專欄僅對國內(nèi)A股金融數(shù)據(jù)入手,熟悉整個量化流程。公開的金融數(shù)據(jù)可以通過平臺API的方式或爬蟲抓取的方式獲得,也不排除收費的金融平臺提供高質(zhì)量數(shù)據(jù)。
數(shù)據(jù)平臺
目前國內(nèi)數(shù)據(jù)平臺主流有以下幾個,BaoStock,tushare,akshare,efina 下面分別講解各平臺優(yōu)缺點,以及使用方法。
為了便于以后的使用說明,將所有的數(shù)據(jù)保存為本地csv格式。
baostock (證券寶)
- 官方網(wǎng)址:http://www.baostock.com/
- Baostock 是 一個免費、開源的證券數(shù)據(jù)平臺(無需注冊)。
- 完整的證券歷史行情數(shù)據(jù)、上市公司財務數(shù)據(jù)。
- python API 方式,數(shù)據(jù)返回格式pandas DataFrame類型
- 優(yōu)點是免費,缺點是數(shù)據(jù)不全
安裝
默認安裝
pip install baostock --upgrade國內(nèi)安裝
pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn使用
以下以日K線為例,官方文檔的內(nèi)容,值得注意的事,下面的代碼是老版本,新版本可以提升速度。
獲取歷史A股K線數(shù)據(jù):query_history_k_data_plus()
方法說明:通過API接口獲取A股歷史交易數(shù)據(jù),可以通過參數(shù)設置獲取日k線、周k線、月k線,以及5分鐘、15分鐘、30分鐘和60分鐘k線數(shù)據(jù),適合搭配均線數(shù)據(jù)進行選股和分析。
返回類型:pandas的DataFrame類型。
能獲取1990-12-19至當前時間的數(shù)據(jù);
可查詢不復權(quán)、前復權(quán)、后復權(quán)數(shù)據(jù)。
====================================
以下為修改后的新版本,并精簡一些打印信息。
小伙伴,先不要急著執(zhí)行上面的代碼,先把上面的修改部分的代碼,作一下說明。
參數(shù)含義: code:股票代碼,sh或sz.+6位數(shù)字代碼,或者指數(shù)代碼,如:sh.601398。sh:上海;sz:深圳。此參數(shù)不可為空;
fields:指示簡稱,支持多指標輸入,以半角逗號分隔,填寫內(nèi)容作為返回類型的列。詳細指標列表見歷史行情指標參數(shù)章節(jié),日線與分鐘線參數(shù)不同。此參數(shù)不可為空;
start:開始日期(包含),格式“YYYY-MM-DD”,為空時取2015-01-01;
end:結(jié)束日期(包含),格式“YYYY-MM-DD”,為空時取最近一個交易日;
frequency:數(shù)據(jù)類型,默認為d,日k線;d=日k線、w=周、m=月、5=5分鐘、15=15分鐘、30=30分鐘、60=60分鐘k線數(shù)據(jù),不區(qū)分大小寫;指數(shù)沒有分鐘線數(shù)據(jù);周線每周最后一個交易日才可以獲取,月線每月最后一個交易日才可以獲取。
adjustflag:復權(quán)類型,默認不復權(quán):3;1:后復權(quán);2:前復權(quán)。已支持分鐘線、日線、周線、月線前后復權(quán)。
BaoStock提供的是漲跌幅復權(quán)算法復權(quán)因子,具體介紹見:復權(quán)因子簡介或者BaoStock復權(quán)因子簡介。
以上程序中要刪除停牌記錄。
關(guān)于復權(quán)數(shù)據(jù)的說明:
BaoStock使用“漲跌幅復權(quán)法”進行復權(quán),詳細說明參考上文“復權(quán)因子簡介”。不同系統(tǒng)間采用復權(quán)方式可能不一致,導致數(shù)據(jù)不一致。
“漲跌幅復權(quán)法的”優(yōu)點:可以計算出資金收益率,確保初始投入的資金運用率為100%,既不會因為分紅而導致投資減少,也不會因為配股導致投資增加。
與同花順、通達信等存在不同。
不同來源的復權(quán)數(shù)據(jù)有時候不一致,tushare 和baostock中600000浦發(fā)銀行在2006年5月12日的后復權(quán)收盤價相差4元多,大家要自己評估哪個是正確的。baostock 是16. 18,tushare 是21. 03,而雪球網(wǎng)站上是21. 03,同花順軟件里是20.75。
官方baostock的后復權(quán)是分紅再投,其他軟件后復權(quán)都是現(xiàn)金分紅,用同花順選擇紅利再投資,結(jié)果和baostock一致。如果是這樣,那么這種方法是可以接受的。
根據(jù)baostock文檔,它采用漲跌幅復權(quán)法,假設投資者在除權(quán)日前一天賣出全部的股票,然后在除權(quán)日用全部資金以昨收盤價買回,即不參加分配。這樣的假設基于如下目的,確保初始投入的資金100%得到使用,既不會因為分紅而導致投資減少,也不會因為配股而導致投資增加。
返回數(shù)據(jù)說明
| date | 交易所行情日期 | |
| code | 證券代碼 | |
| open | 開盤價 | |
| high | 最高價 | |
| low | 最低價 | |
| close | 收盤價 | |
| preclose | 前收盤價 | 當日發(fā)生除權(quán)除息時,“前收盤價”不是前一天的實際收盤價,而是根據(jù)股權(quán)登記日收盤價與分紅現(xiàn)金的數(shù)量、配送股的數(shù)里和配股價的高低等結(jié)合起來算出來的價格。 |
| volume | 成交量(累計 單位:股) | |
| amount | 成交額(單位:人民幣元) | |
| adjustflag | 復權(quán)狀態(tài)(1:后復權(quán), 2:前復權(quán),3:不復權(quán)) | |
| turn | 換手率 | [指定交易日的成交量(股)/指定交易日的股票的流通股總股數(shù)(股)]*100% |
| tradestatus | 交易狀態(tài)(1:正常交易 0:停牌) | |
| pctChg | 漲跌幅(百分比) | 日漲跌幅=[(指定交易日的收盤價-指定交易日前收盤價)/指定交易日前收盤價]*100% |
| peTTM | 滾動市盈率 | (指定交易日的股票收盤價/指定交易日的每股盈余TTM)=(指定交易日的股票收盤價*截至當日公司總股本)/歸屬母公司股東凈利潤TTM |
| pbMRQ | 市凈率 | (指定交易日的股票收盤價/指定交易日的每股凈資產(chǎn))=總市值/(最近披露的歸屬母公司股東的權(quán)益-其他權(quán)益工具) |
| psTTM | 滾動市銷率 | (指定交易日的股票收盤價/指定交易日的每股銷售額)=(指定交易日的股票收盤價*截至當日公司總股本)/營業(yè)總收入TTM |
| pcfNcfTTM | 滾動市現(xiàn)率 | (指定交易日的股票收盤價/指定交易日的每股現(xiàn)金流TTM)=(指定交易日的股票收盤價*截至當日公司總股本)/現(xiàn)金以及現(xiàn)金等價物凈增加額TTM |
| isST | 是否ST股,1是,0否 |
tushare
- 官方網(wǎng)址:https://www.tushare.pro/
- 一個半收費的數(shù)據(jù)平臺,下載數(shù)據(jù)需要token。
- 數(shù)據(jù)豐富:擁有豐富的數(shù)據(jù)內(nèi)容,如股票、基金、期貨、數(shù)字貨幣等行情數(shù)據(jù),公司財務、基金經(jīng)理等基本面數(shù)據(jù)
- 獲取簡單:SDK開發(fā)包支持語言,同時提供HTTP Restful接口,最大程度方便不同人群的使用
- 落地方便: 提供多種數(shù)據(jù)儲存方式,如Oracle、MySQL,MongoDB、HDF5、CSV等,為數(shù)據(jù)獲取提供了性能保證
tushare pro 在原來老版的基礎上升級的,老版api只提供基礎日線數(shù)據(jù)。tushare pro現(xiàn)金積分充值比例是1:10,比如充值50獲取500積分,積分有效期一年, 使用數(shù)據(jù)積分不減少。A股數(shù)據(jù)2000積分可以使用,但限頻次,每分鐘限200次請求,每天限10w次api請求。 港美股日線需至少5000積分。
安裝
默認安裝
pip install tushare--upgrade國內(nèi)安裝
pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host=mirrors.aliyun.com --upgrade使用
import tushare as ts pro = ts.pro_api('6a0899533f8a5996f738183dbdf63c0afb3fcc931f08e1233575a339') #token,請注冊后替換為自己的token。 df = pro.daily(ts_code='600000.SH', adj='hfq', start_date='20000101', end_date='20230301') #顛倒順序,使得按日期升序排。backtrader要求日期升序 df.sort_index(inplace=True, ascending=False) print('Tushare行情獲取\n',df) df.to_csv("./data/sh.600000tuhfq.csv", index=False)值得注意的是按日期降序排列的,所以以上代碼把它轉(zhuǎn)換了一下,使得按日期升序排列,以符合backtrader的要求。另外,獲取的數(shù)據(jù)應該是后復權(quán)的(參數(shù)adj=‘hfq’),這樣保證數(shù)據(jù)的一致性。
以下是返回數(shù)據(jù)格式。比 Baostock 要少好幾列。
| 5492 | 600000.SH | 20000104 | 24.98 | 25.78 | 24.75 | 25.57 | 24.75 | 0.82 | 3.3100 | 44961.00 | 113946.783 |
| 5491 | 600000.SH | 20000105 | 25.57 | 25.98 | 25.15 | 25.28 | 25.57 | -0.29 | -1.1300 | 52528.00 | 134465.427 |
| 5490 | 600000.SH | 20000106 | 25.18 | 26.30 | 25.05 | 25.99 | 25.28 | 0.71 | 2.8100 | 62297.00 | 160059.798 |
| 5489 | 600000.SH | 20000107 | 26.30 | 27.50 | 26.12 | 26.90 | 25.99 | 0.91 | 3.5000 | 213553.00 | 575751.082 |
| 5488 | 600000.SH | 20000110 | 27.00 | 27.85 | 26.71 | 27.25 | 26.90 | 0.35 | 1.3000 | 165397.00 | 450453.518 |
| … | … | … | … | … | … | … | … | … | … | … | … |
akshare
- 官方網(wǎng)址:https://github.com/akfamily/akshare
- 基于 Python 的財經(jīng)數(shù)據(jù)接口庫, 目的是實現(xiàn)對股票、期貨、期權(quán)、基金、外匯、債券、指數(shù)、加密貨幣等金融產(chǎn)品的基本面數(shù)據(jù)、實時和歷史行情數(shù)據(jù)、衍生數(shù)據(jù)從數(shù)據(jù)采集、數(shù)據(jù)清洗到數(shù)據(jù)落地的一套工具。
- akshare api接口變動較頻繁,數(shù)據(jù)格式不通用
安裝
默認安裝
pip install akshare --upgrade國內(nèi)安裝
pip install akshare -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com --upgrade使用
import akshare as akdf = ak.stock_zh_a_hist(symbol="300750", period="daily", start_date="20210101", end_date='20220715', adjust="qfq")print('AKshare行情獲取\n',df)| 0 | 2000-01-04 | 24.98 | 25.57 | 25.78 | 24.75 | 44960 | 113946000.0 | 4.16 | 3.31 | 0.82 | 1.41 |
| 1 | 2000-01-05 | 25.57 | 25.28 | 25.98 | 25.15 | 52528 | 134465000.0 | 3.25 | -1.13 | -0.29 | 1.64 |
| 2 | 2000-01-06 | 25.18 | 25.99 | 26.30 | 25.05 | 62296 | 160059000.0 | 4.94 | 2.81 | 0.71 | 1.95 |
| 3 | 2000-01-07 | 26.30 | 26.90 | 27.50 | 26.12 | 213553 | 575751000.0 | 5.31 | 3.50 | 0.91 | 6.67 |
| 4 | 2000-01-10 | 27.00 | 27.25 | 27.85 | 26.71 | 165397 | 450453000.0 | 4.24 | 1.30 | 0.35 | 5.17 |
| … | … | … | … | … | … | … | … | … | … | … | … |
這個返回
的字段是中文的。
‘日期’, ‘開盤’, ‘收盤’, ‘最高’, ‘最低’, ‘成交量’, ‘成交額’, ‘振幅’, ‘漲跌幅’, ‘漲跌額’, ‘換手率’
其他平臺
yfinace – yahoo財經(jīng)數(shù)據(jù)獲取,需要使用代理訪問。
easyquotation-- python實時獲取新浪/騰訊的全市場行情,無法獲取歷史數(shù)據(jù)
efinance – 用于獲取股票、基金、期貨、債券數(shù)據(jù)的免費開源 Python 庫。
總結(jié)
下一節(jié),我將帶大家學習保存數(shù)據(jù)的兩種方式。
總結(jié)
以上是生活随笔為你收集整理的【量化交易笔记】1.数据来源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 扫雷游戏的编写
- 下一篇: linebreak_WPF:LineBr