溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python股票市場數(shù)據(jù)探索指北

發(fā)布時間:2020-07-20 19:30:46 來源:網(wǎng)絡(luò) 閱讀:9555 作者:youerning 欄目:大數(shù)據(jù)

前言

雖然同花順之類的金融理財應(yīng)用的數(shù)據(jù)足夠好了,但還是有自己定制的沖動, 數(shù)據(jù)自然不會不會比前者好很多,但是按照自己的想法來定制還是不錯的。

目標(biāo)

通過免費的數(shù)據(jù)接口獲取數(shù)據(jù),每日增量更新標(biāo)的歷史交易數(shù)據(jù), 然后通過Kibana做可視化及數(shù)據(jù)分析.

其實自己通過echarts之類的可視化框架做可視化也是個不錯的選擇,不過前期成本太大。還有就是pandas+matplotlib已經(jīng)足以應(yīng)付大部分需求了,可是交互感太弱,所以借助一個可視化應(yīng)用是很有必要的,這里選擇的是kibana, 它的競品有Grafana.

這個目標(biāo)應(yīng)該會一直下去吧,大家可以通過以下鏈接獲取代碼

https://github.com/youerning/stock_playground

環(huán)境配置

Python3(推薦Anaconda安裝)

安裝相關(guān)依賴:

pip install -r requirement.txt

配置eleasticsearch, kibana環(huán)境(推薦使用docker)

Elasticsearch, Logstash, Kibana 7.2.0

數(shù)據(jù)源

獲取數(shù)據(jù)的方式有很多種,收費或者免費,作為業(yè)余愛好者自然選擇免費的,這里選擇 tushare.pro, 但其實tushare會有一點限制, 如獲取數(shù)據(jù)的頻率有一定的限制,并且接口也有限制, 需要很多積分。如果大家對這個有興趣注冊,就通過我的推薦鏈接注冊唄, 這樣我可以跟大家分享更多關(guān)于數(shù)據(jù)可視化的內(nèi)容,以及將我下載下來的數(shù)據(jù)分享出來。

https://tushare.pro/register?reg=277890

值得注意的是, tushare其實也是有幾乎沒限制的免費版本的. 但是pro版本數(shù)據(jù)更全,為了避免后期維護成本,所以選擇pro版本。

其實還有其他的免費的數(shù)據(jù)獲取方式的,大家可以自己嘗試

  1. pytdx
  2. fooltrader
  3. QUANTAXIS

獲取數(shù)據(jù)

配置自己的token

import tushare as ts
ts.set_token("<your_token>")
pro = ts.pro_api("<your_token>")

關(guān)于Token的獲取可以參考一下鏈接

https://tushare.pro/document/1?doc_id=39

嘗試手動獲取數(shù)據(jù)

通過日期取歷史某一天的全部歷史
df = pro.daily(trade_date='20190725')

df.head()
ts_code trade_date  open    high    low close   pre_close   change  pct_chg vol amount  value
0   000032.SZ   20190725    9.49    9.60    9.47    9.56    9.49    0.07    0.7376  12658.35    12075.625   8906.981000
1   000060.SZ   20190725    4.39    4.40    4.35    4.36    4.39    -0.03   -0.6834 129331.65   56462.292   -38586.330353
2   000078.SZ   20190725    3.37    3.38    3.35    3.38    3.37    0.01    0.2967  76681.00    25795.633   7653.564311
3   000090.SZ   20190725    5.66    5.66    5.56    5.61    5.64    -0.03   -0.5319 105582.72   59215.389   -31496.665409
4   000166.SZ   20190725    4.97    4.98    4.93    4.96    4.97    -0.01   -0.2012 268122.48   132793.120  -26717.975744

獲取某一只股票的日線行情數(shù)據(jù)
data = ts.pro_bar(ts_code="601668.SH", adj='qfq', start_date="20120101")
data.head()
ts_code trade_date  open    high    low close   pre_close   change  pct_chg vol amount
0   601668.SH   20190726    6.01    6.06    5.98    6.03    6.04    -0.01   -0.17   696833.16   419634.547
1   601668.SH   20190725    6.05    6.07    6.02    6.04    6.04    0.00    0.00    543074.55   327829.380
2   601668.SH   20190724    6.09    6.11    6.02    6.04    6.05    -0.01   -0.17   788228.12   477542.609
3   601668.SH   20190723    5.93    6.07    5.92    6.05    5.94    0.11    1.85    1077243.46  650250.021
4   601668.SH   20190722    6.02    6.03    5.92    5.94    6.00    -0.06   -1.00   811369.73   485732.343

數(shù)據(jù)的獲取自然是需要自動化的,但是由于接口的限制,所以需要考慮以下問題。

  1. 股票列表
  2. 判斷是否超出接口限制,如果是,則暫停一段時間

關(guān)鍵代碼部分

def save_data(code, start_date, fp):
    print("下載股票(%s)日線數(shù)據(jù)到 %s" % (code, fp))

    try:
        data = ts.pro_bar(ts_code=code, adj='qfq', start_date=start_date)
        # 當(dāng)超過調(diào)用次數(shù)限制返回None
        if data is None:
            time.sleep(10)
            return
        pass_set.add(code)
    except Exception:
        time.sleep(10)
        print("股票: %s 下載失敗" % code)
        return

    if len(data) == 0:
        pass_set.add(code)
        return

    try:
        data.trade_date = pd.to_datetime(data.trade_date)
        data = data.sort_values("trade_date")
        if path.exists(fp):
            data.to_csv(fp, mode="a", header=False, index=False)
        else:
            data.to_csv(fp, index=False)
    except Exception:
        print("股票:%s 保存失敗" % code)

大家可以參考我GitHub倉庫的save_data.py, 通過以下命令就可以自動下載數(shù)據(jù)了

python save_data.py

代碼里面配置的起始時間是2012-01-01,有需要的課自行更改,值得注意的是需要在同級目錄配置一個config.json, 內(nèi)容如下

{
    "token": "<your_token>"
}

配上自己的token

配置elasticsearch, kibana

這里使用的是docker進行配置。

# 拉取鏡像
docker pull sebp/elk:720

# 啟動docker環(huán)境
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -v /home/elasticsearch/:/var/lib/elasticsearch -itd  sebp/elk:720

轉(zhuǎn)存數(shù)據(jù)

將數(shù)據(jù)上傳到elasticsearch里面以便數(shù)據(jù)分析

配置settings.py

# 將ip:port改成自己elasticsearch地址,如192.168.56.102:9200
config["es_host"] = ["ip:port"]

運行代碼

# 上傳股票數(shù)據(jù)
python cmd.py dump

# 上傳上證指數(shù)數(shù)據(jù)
python cmd.py dump_index

可視化

配置kibana是需要一定的時間的,好在kibana現(xiàn)在是大多數(shù)配置都支持導(dǎo)入導(dǎo)出,所以大家可以通過我倉庫的export.ndjson文件直接導(dǎo)入

python股票市場數(shù)據(jù)探索指北

效果展示

python股票市場數(shù)據(jù)探索指北

python股票市場數(shù)據(jù)探索指北

由于現(xiàn)在接口受限,獲取的股票因子有限,所以等我的積分更多了,我會加入更多的dashboard, 以及visualization.

后記

希望可以完成自己的從無到有搭建交易系統(tǒng)系列文章, 然后通向工作時間地點自由之路.

不求絕對財富自由, 但愿時間地點自由^_^

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI