【量化交易笔记】1.数据来源
簡介
數據是機器學習的核心,garbage in garbage out,而金融數據是量化的基礎,對數據提出了更高的要求。不僅是數據準確高速(穩定),而且要求數據豐富全面。
金融數據
考慮到金融數據非常豐富,能快速入門,降低門檻,因此,本專欄僅對國內A股金融數據入手,熟悉整個量化流程。公開的金融數據可以通過平臺API的方式或爬蟲抓取的方式獲得,也不排除收費的金融平臺提供高質量數據。
數據平臺
目前國內數據平臺主流有以下幾個,BaoStock,tushare,akshare,efina 下面分別講解各平臺優缺點,以及使用方法。
為了便于以后的使用說明,將所有的數據保存為本地csv格式。
baostock (證券寶)
- 官方網址:http://www.baostock.com/
- Baostock 是 一個免費、開源的證券數據平臺(無需注冊)。
- 完整的證券歷史行情數據、上市公司財務數據。
- python API 方式,數據返回格式pandas DataFrame類型
- 優點是免費,缺點是數據不全
安裝
默認安裝
pip install baostock --upgrade國內安裝
pip install baostock -i https://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.tsinghua.edu.cn使用
以下以日K線為例,官方文檔的內容,值得注意的事,下面的代碼是老版本,新版本可以提升速度。
獲取歷史A股K線數據:query_history_k_data_plus()
方法說明:通過API接口獲取A股歷史交易數據,可以通過參數設置獲取日k線、周k線、月k線,以及5分鐘、15分鐘、30分鐘和60分鐘k線數據,適合搭配均線數據進行選股和分析。
返回類型:pandas的DataFrame類型。
能獲取1990-12-19至當前時間的數據;
可查詢不復權、前復權、后復權數據。
====================================
以下為修改后的新版本,并精簡一些打印信息。
小伙伴,先不要急著執行上面的代碼,先把上面的修改部分的代碼,作一下說明。
參數含義: code:股票代碼,sh或sz.+6位數字代碼,或者指數代碼,如:sh.601398。sh:上海;sz:深圳。此參數不可為空;
fields:指示簡稱,支持多指標輸入,以半角逗號分隔,填寫內容作為返回類型的列。詳細指標列表見歷史行情指標參數章節,日線與分鐘線參數不同。此參數不可為空;
start:開始日期(包含),格式“YYYY-MM-DD”,為空時取2015-01-01;
end:結束日期(包含),格式“YYYY-MM-DD”,為空時取最近一個交易日;
frequency:數據類型,默認為d,日k線;d=日k線、w=周、m=月、5=5分鐘、15=15分鐘、30=30分鐘、60=60分鐘k線數據,不區分大小寫;指數沒有分鐘線數據;周線每周最后一個交易日才可以獲取,月線每月最后一個交易日才可以獲取。
adjustflag:復權類型,默認不復權:3;1:后復權;2:前復權。已支持分鐘線、日線、周線、月線前后復權。
BaoStock提供的是漲跌幅復權算法復權因子,具體介紹見:復權因子簡介或者BaoStock復權因子簡介。
以上程序中要刪除停牌記錄。
關于復權數據的說明:
BaoStock使用“漲跌幅復權法”進行復權,詳細說明參考上文“復權因子簡介”。不同系統間采用復權方式可能不一致,導致數據不一致。
“漲跌幅復權法的”優點:可以計算出資金收益率,確保初始投入的資金運用率為100%,既不會因為分紅而導致投資減少,也不會因為配股導致投資增加。
與同花順、通達信等存在不同。
不同來源的復權數據有時候不一致,tushare 和baostock中600000浦發銀行在2006年5月12日的后復權收盤價相差4元多,大家要自己評估哪個是正確的。baostock 是16. 18,tushare 是21. 03,而雪球網站上是21. 03,同花順軟件里是20.75。
官方baostock的后復權是分紅再投,其他軟件后復權都是現金分紅,用同花順選擇紅利再投資,結果和baostock一致。如果是這樣,那么這種方法是可以接受的。
根據baostock文檔,它采用漲跌幅復權法,假設投資者在除權日前一天賣出全部的股票,然后在除權日用全部資金以昨收盤價買回,即不參加分配。這樣的假設基于如下目的,確保初始投入的資金100%得到使用,既不會因為分紅而導致投資減少,也不會因為配股而導致投資增加。
返回數據說明
| date | 交易所行情日期 | |
| code | 證券代碼 | |
| open | 開盤價 | |
| high | 最高價 | |
| low | 最低價 | |
| close | 收盤價 | |
| preclose | 前收盤價 | 當日發生除權除息時,“前收盤價”不是前一天的實際收盤價,而是根據股權登記日收盤價與分紅現金的數量、配送股的數里和配股價的高低等結合起來算出來的價格。 |
| volume | 成交量(累計 單位:股) | |
| amount | 成交額(單位:人民幣元) | |
| adjustflag | 復權狀態(1:后復權, 2:前復權,3:不復權) | |
| turn | 換手率 | [指定交易日的成交量(股)/指定交易日的股票的流通股總股數(股)]*100% |
| tradestatus | 交易狀態(1:正常交易 0:停牌) | |
| pctChg | 漲跌幅(百分比) | 日漲跌幅=[(指定交易日的收盤價-指定交易日前收盤價)/指定交易日前收盤價]*100% |
| peTTM | 滾動市盈率 | (指定交易日的股票收盤價/指定交易日的每股盈余TTM)=(指定交易日的股票收盤價*截至當日公司總股本)/歸屬母公司股東凈利潤TTM |
| pbMRQ | 市凈率 | (指定交易日的股票收盤價/指定交易日的每股凈資產)=總市值/(最近披露的歸屬母公司股東的權益-其他權益工具) |
| psTTM | 滾動市銷率 | (指定交易日的股票收盤價/指定交易日的每股銷售額)=(指定交易日的股票收盤價*截至當日公司總股本)/營業總收入TTM |
| pcfNcfTTM | 滾動市現率 | (指定交易日的股票收盤價/指定交易日的每股現金流TTM)=(指定交易日的股票收盤價*截至當日公司總股本)/現金以及現金等價物凈增加額TTM |
| isST | 是否ST股,1是,0否 |
tushare
- 官方網址:https://www.tushare.pro/
- 一個半收費的數據平臺,下載數據需要token。
- 數據豐富:擁有豐富的數據內容,如股票、基金、期貨、數字貨幣等行情數據,公司財務、基金經理等基本面數據
- 獲取簡單:SDK開發包支持語言,同時提供HTTP Restful接口,最大程度方便不同人群的使用
- 落地方便: 提供多種數據儲存方式,如Oracle、MySQL,MongoDB、HDF5、CSV等,為數據獲取提供了性能保證
tushare pro 在原來老版的基礎上升級的,老版api只提供基礎日線數據。tushare pro現金積分充值比例是1:10,比如充值50獲取500積分,積分有效期一年, 使用數據積分不減少。A股數據2000積分可以使用,但限頻次,每分鐘限200次請求,每天限10w次api請求。 港美股日線需至少5000積分。
安裝
默認安裝
pip install tushare--upgrade國內安裝
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)值得注意的是按日期降序排列的,所以以上代碼把它轉換了一下,使得按日期升序排列,以符合backtrader的要求。另外,獲取的數據應該是后復權的(參數adj=‘hfq’),這樣保證數據的一致性。
以下是返回數據格式。比 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
- 官方網址:https://github.com/akfamily/akshare
- 基于 Python 的財經數據接口庫, 目的是實現對股票、期貨、期權、基金、外匯、債券、指數、加密貨幣等金融產品的基本面數據、實時和歷史行情數據、衍生數據從數據采集、數據清洗到數據落地的一套工具。
- akshare api接口變動較頻繁,數據格式不通用
安裝
默認安裝
pip install akshare --upgrade國內安裝
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財經數據獲取,需要使用代理訪問。
easyquotation-- python實時獲取新浪/騰訊的全市場行情,無法獲取歷史數據
efinance – 用于獲取股票、基金、期貨、債券數據的免費開源 Python 庫。
總結
下一節,我將帶大家學習保存數據的兩種方式。
總結
以上是生活随笔為你收集整理的【量化交易笔记】1.数据来源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 扫雷游戏的编写
- 下一篇: 漫游者w800bt 电脑不播放一分钟就断