前言
雖然同花順之類的金融理財(cái)應(yīng)用的數(shù)據(jù)足夠好了,但還是有自己定制的沖動(dòng), 數(shù)據(jù)自然不會(huì)不會(huì)比前者好很多,但是按照自己的想法來定制還是不錯(cuò)的。
目標(biāo)
通過免費(fèi)的數(shù)據(jù)接口獲取數(shù)據(jù),每日增量更新標(biāo)的歷史交易數(shù)據(jù), 然后通過Kibana做可視化及數(shù)據(jù)分析.
其實(shí)自己通過echarts之類的可視化框架做可視化也是個(gè)不錯(cuò)的選擇,不過前期成本太大。還有就是pandas+matplotlib已經(jīng)足以應(yīng)付大部分需求了,可是交互感太弱,所以借助一個(gè)可視化應(yīng)用是很有必要的,這里選擇的是kibana, 它的競品有Grafana.
這個(gè)目標(biāo)應(yīng)該會(huì)一直下去吧,大家可以通過以下鏈接獲取代碼
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ù)的方式有很多種,收費(fèi)或者免費(fèi),作為業(yè)余愛好者自然選擇免費(fèi)的,這里選擇 tushare.pro, 但其實(shí)tushare會(huì)有一點(diǎn)限制, 如獲取數(shù)據(jù)的頻率有一定的限制,并且接口也有限制, 需要很多積分。如果大家對(duì)這個(gè)有興趣注冊(cè),就通過我的推薦鏈接注冊(cè)唄, 這樣我可以跟大家分享更多關(guān)于數(shù)據(jù)可視化的內(nèi)容,以及將我下載下來的數(shù)據(jù)分享出來。
https://tushare.pro/register?reg=277890
值得注意的是, tushare其實(shí)也是有幾乎沒限制的免費(fèi)版本的. 但是pro版本數(shù)據(jù)更全,為了避免后期維護(hù)成本,所以選擇pro版本。
其實(shí)還有其他的免費(fèi)的數(shù)據(jù)獲取方式的,大家可以自己嘗試
- pytdx
- fooltrader
- QUANTAXIS
獲取數(shù)據(jù)
配置自己的token
import tushare as ts
ts.set_token("
")
pro = ts.pro_api("
")
關(guān)于Token的獲取可以參考一下鏈接
https://tushare.pro/document/1?doc_id=39
嘗試手動(dòng)獲取數(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ù)的獲取自然是需要自動(dòng)化的,但是由于接口的限制,所以需要考慮以下問題。
- 股票列表
- 判斷是否超出接口限制,如果是,則暫停一段時(shí)間
關(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, 通過以下命令就可以自動(dòng)下載數(shù)據(jù)了
python save_data.py
代碼里面配置的起始時(shí)間是2012-01-01,有需要的課自行更改,值得注意的是需要在同級(jí)目錄配置一個(gè)config.json, 內(nèi)容如下
{
"token": "
"
}
配上自己的token
配置elasticsearch, kibana
這里使用的是docker進(jìn)行配置。
# 拉取鏡像
docker pull sebp/elk:720
# 啟動(dòng)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"]
運(yùn)行代碼
# 上傳股票數(shù)據(jù)
python cmd.py dump
# 上傳上證指數(shù)數(shù)據(jù)
python cmd.py dump_index
可視化
配置kibana是需要一定的時(shí)間的,好在kibana現(xiàn)在是大多數(shù)配置都支持導(dǎo)入導(dǎo)出,所以大家可以通過我倉庫的export.ndjson文件直接導(dǎo)入
效果展示
由于現(xiàn)在接口受限,獲取的股票因子有限,所以等我的積分更多了,我會(huì)加入更多的dashboard, 以及visualization.
后記
希望可以完成自己的從無到有搭建交易系統(tǒng)系列文章, 然后通向工作時(shí)間地點(diǎn)自由之路.
不求絕對(duì)財(cái)富自由, 但愿時(shí)間地點(diǎn)自由^_^
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
