日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【量化交易笔记】1.数据来源

發布時間:2024/1/1 编程问答 240 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【量化交易笔记】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至當前時間的數據;
可查詢不復權、前復權、后復權數據。

import baostock as bs import pandas as pd#### 登陸系統 #### lg = bs.login() # 顯示登陸返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg)#### 獲取滬深A股歷史K線數據 #### # 詳細指標參數,參見“歷史行情指標參數”章節;“分鐘線”參數與“日線”參數不同。“分鐘線”不包含指數。 # 分鐘線指標:date,time,code,open,high,low,close,volume,amount,adjustflag # 周月線指標:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg rs = bs.query_history_k_data_plus("sh.600000","date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",start_date='2017-07-01', end_date='2017-12-31',frequency="d", adjustflag="3") print('query_history_k_data_plus respond error_code:'+rs.error_code) print('query_history_k_data_plus respond error_msg:'+rs.error_msg)#### 打印結果集 #### data_list = [] while (rs.error_code == '0') & rs.next():# 獲取一條記錄,將記錄合并在一起data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields)#### 結果集輸出到csv文件 #### result.to_csv("D:\\history_A_stock_k_data.csv", index=False) print(result)#### 登出系統 #### bs.logout()

====================================
以下為修改后的新版本,并精簡一些打印信息。

import baostock as bs import pandas as pd#### 登陸系統 #### lg = bs.login() # 顯示登陸返回信息#### 獲取滬深A股歷史K線數據 #### # 詳細指標參數,參見“歷史行情指標參數”章節;“分鐘線”參數與“日線”參數不同。“分鐘線”不包含指數。 # 分鐘線指標:date,time,code,open,high,low,close,volume,amount,adjustflag # 周月線指標:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg rs = bs.query_history_k_data_plus("sh.600000","date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",start_date='2000-01-01', end_date='2023-3-1',frequency="d", adjustflag="1")### 直接獲得 DataFrame對象 result= rs.get_data()#### 結果集輸出到csv文件 #### result.to_csv("./data/sh.600000.csv", index=False) print(result)#### 登出系統 #### bs.logout()

小伙伴,先不要急著執行上面的代碼,先把上面的修改部分的代碼,作一下說明。

參數含義: 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復權因子簡介。

  • 修改了 start 和 end ,這里的時間格式就行,如“2020-01-01” 和 “2023-3-1” 都沒有問題;
  • 修改了 adjustflag=“1” 即修改為向后復權,為什么要選擇“后復權”?如果采用“前復權”,最大好處,可以很直觀的看到當前真實價格,但之前的數據可能會出負值,同時,一旦除權,需要重新采集數據。若采用“后復權”的方式,以后獲得新數據可以追加的方式進行,減少維護成本;
  • 將 while 循環修改為 get_data() 對象,這句話是提升效率關鍵,之前版本沒有,后來新增;
  • 另外要注意,baostock 原始數據包含停牌記錄,而backtrader不需要停牌記錄,所以
    以上程序中要刪除停牌記錄。
  • 關于復權數據的說明:
    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 要少好幾列。

    ts_codetrade_dateopenhighlowclosepre_closechangepct_chgvolamount
    5492600000.SH2000010424.9825.7824.7525.5724.750.823.310044961.00113946.783
    5491600000.SH2000010525.5725.9825.1525.2825.57-0.29-1.130052528.00134465.427
    5490600000.SH2000010625.1826.3025.0525.9925.280.712.810062297.00160059.798
    5489600000.SH2000010726.3027.5026.1226.9025.990.913.5000213553.00575751.082
    5488600000.SH2000011027.0027.8526.7127.2526.900.351.3000165397.00450453.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) 日期開盤收盤最高最低成交量成交額振幅漲跌幅漲跌額換手率
    02000-01-0424.9825.5725.7824.7544960113946000.04.163.310.821.41
    12000-01-0525.5725.2825.9825.1552528134465000.03.25-1.13-0.291.64
    22000-01-0625.1825.9926.3025.0562296160059000.04.942.810.711.95
    32000-01-0726.3026.9027.5026.12213553575751000.05.313.500.916.67
    42000-01-1027.0027.2527.8526.71165397450453000.04.241.300.355.17

    這個返回

    的字段是中文的。
    ‘日期’, ‘開盤’, ‘收盤’, ‘最高’, ‘最低’, ‘成交量’, ‘成交額’, ‘振幅’, ‘漲跌幅’, ‘漲跌額’, ‘換手率’

    其他平臺

    yfinace – yahoo財經數據獲取,需要使用代理訪問。
    easyquotation-- python實時獲取新浪/騰訊的全市場行情,無法獲取歷史數據
    efinance – 用于獲取股票、基金、期貨、債券數據的免費開源 Python 庫。

    總結

  • 上述三個平臺均可以滿足我們入門級需求,根據個人喜好進行選擇,如后續想對基金,期貨做量化研究,不建議使用 baostock;專欄僅僅是A股,因此就選擇 baostock 工具進行研究。
  • 小伙伴們肯定不會僅僅研究一兩支股票,如進行選股操作,因此需要下載大量的本地數據,所以這里有兩種方式,一種下載保存為 csv 格式文件;另一種方式,用數據庫的方式保存。
  • 下一節,我將帶大家學習保存數據的兩種方式。

    總結

    以上是生活随笔為你收集整理的【量化交易笔记】1.数据来源的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。