Tushare股票數據獲取並用pymongo存儲到MongoDB數據庫

操作環境win10 64位專業版

1、安裝Tushare

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

注意根據新版本要求需要註冊,獲取token,註冊地址

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

2、下載安裝MongoDB,安裝過程可能卡死,不要勾選MongoDB compass,單獨下載安裝即可

https://www.mongodb.com/download-center

運行程序前,需要啓動MongoDB服務,在cmd窗口中運行下列語句,也可以將下邊代碼複製到txt文件中,並修改擴展名爲.bat,每次雙擊文件就行

cd C:\Program Files\MongoDB\Server\4.2\bin #此處路徑爲自己的mongod.exe所在文件夾
mongod.exe --nojournal --dbpath .

看到這一行就說明服務已運行

3、安裝pymongo

pip install pymongo

4、安裝Anaconda(非必須),不過可以省去很多python庫的安裝

https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

5、運行tushare並存儲金融數據,代碼及說明如下

# -*- coding: utf-8 -*-
"""
Created on Tue Sep 17 20:18:41 2019

@author: yutian
"""
import tushare as ts
from pymongo import MongoClient
import time

import json

ts.set_token('XXX')   #XXX爲自己的token
pro = ts.pro_api()

db_name='tushare_storage'#數據庫名
client=MongoClient()
database=client[db_name]#建立數據庫


#所有股票代碼等
stock_list = pro.stock_basic(exchange='', list_status='L', fields='ts_code')#,symbol,name,area,industry,list_date')

sleep_time=0.4

for code in stock_list.ts_code:#
    df=pro.daily(ts_code=code, start_date='20190101')#,end_date='20190925')#單隻區間
    collection=database[code]    #建立以股票名命名的集合
    collection.insert_many(json.loads(df.T.to_json()).values())    #存儲到MongoDB數據庫中
    time.sleep(sleep_time)     #暫停,tushare對積分不足用戶限制每分鐘200次訪問,積分很重要

運行結果在MongoDB compass中查看,如圖所示,建立了名字爲tushare_storage的庫文件,包含了各股票名的集合及指定日期的數據

6、以MovingAverage(滑動平均)方法計算5日,10日,30日均線,並存儲

# -*- coding: utf-8 -*-
"""
Created on Tue Sep 17 20:18:41 2019

@author: yutian
"""
import tushare as ts
import pandas as pd
from pymongo import MongoClient
import time

import json
import numpy as np

def MA(tsPrice,k):     #MovingAverage計算
    Sma=pd.Series(0.0,index=tsPrice.index)
    for i in range(k-1,len(tsPrice)):
        Sma[i]=sum(tsPrice[(i-k+1):(i+1)])/k
    return(Sma)

ts.set_token('XXX) #XXX爲自己的token
pro = ts.pro_api()

db_name='tushare_storage'#數據庫名
client=MongoClient()
database=client[db_name]#建立數據庫


#所有股票代碼等
stock_list = pro.stock_basic(exchange='', list_status='L', fields='ts_code')#,symbol,name,area,industry,list_date')

sleep_time=0.4

for code in stock_list.ts_code:#
    df=pro.daily(ts_code=code, start_date='20190101')#,end_date='20190925')#單隻區間
    collection=database[code]    #建立以股票名命名的集合
    
    time.sleep(sleep_time)     #暫停,tushare對積分不足用戶限制每分鐘200次訪問,積分很重要
    if np.size(df,0)<60:
        time.sleep(sleep_time)
        continue
    
    D5=MA(df.close,5)#5日均線
    df['D5']=pd.DataFrame({'D5':D5})
    D10=MA(df.close,10)#10日均線
    df['D10']=pd.DataFrame({'D10':D10})
    D30=MA(df.close,30)#30日均線
    df['D30']=pd.DataFrame({'D30':D30})
    
    collection.insert_many(json.loads(df.T.to_json()).values())    #存儲到MongoDB數據庫中

運行結果如圖,增加了D5、D10、D30均線數據

7、總結

使用tushare金融工具,能很方便的下載金融數據,可以和MongoDB等許多數據庫結合實現存儲,用python方便的實現數據處理。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章