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方便的实现数据处理。

 

 

 

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