jq获取input选取的文件名_tushare获取交易数据并可视化分析

获取数据是金融量化分析的第一步,找不到可靠、准确的数据,量化分析就无从谈起。随着信息技术的不断发展,数据获取渠道也越来越多,尤其是Python网络爬虫,近几年愈来愈火。然而,很多人毕竟精力有限,没时间专门去学习网络爬虫技术。当然,不会网络爬虫不要紧,我们还可以借助Python的开源数据包(其本质也是网络爬虫),如:tushare、baostock、pandas_datareader和yahoo等财经数据API,这样可以节省不少精力。本文将以tushare为例,演示如何获取股票数据,并进行简单的可视化分析。

b22c899baa7240fc86e7aeb0e55ef089.png

图1 股票涨跌驱动因素

cb10383b767264700465a58bec92cdc3.png

图2 公司基本面信息源

22a30c50e9e90f2cdbc689a48ea8eeff.png

图3 知名股票论坛

Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然,如果您习惯了用Excel或者关系型数据库做分析,您也可以通过Tushare的数据存储功能,将数据全部保存到本地后进行分析。从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。

使用前提

  • 安装Python

  • 安装pandas

  • lxml也是必须的,正常情况下安装了Anaconda后无须单独安装,如果没有可执行:pip install lxml

建议安装Anaconda(http://www.continuum.io/downloads),一次安装包括了Python环境和全部依赖包,减少问题出现的几率。

下载安装

  • 方式1:pip install tushare

  • 方式2:访问https://pypi.python.org/pypi/Tushare/下载安装

除此之外,新版本需要注册获取token才能免费使用,果想拥有自己的token,可以点击https://tushare.pro/register?reg=300271注册。

#先引入后面分析、可视化等可能用到的库import tushare as tsimport pandas as pd  import matplotlib.pyplot as pltimport numpy as np#正常显示画图时出现的中文和负号from pylab import mplmpl.rcParams['font.sans-serif']=['SimHei']mpl.rcParams['axes.unicode_minus']=False#设置tokentoken='你的token'ts.set_token(token)pro = ts.pro_api(token)

个股行情数据:

pro.stock_basic()

参数:is_hs:是否沪深港通标的,N否、H沪股通、S深股通;list_status:上市状态,L上市、D退市、P暂停上市;exchange:交易所 SSE上交所,SZSE深交所,HKEX港交所。 

pro.daily(ts_code= 或 trade_date=)

日行情:daily;周行情:weekly;月行情:monthly

#获取当前上市的股票代码、简称、注册地、行业、上市时间等数据basic=pro.stock_basic(list_status='L')#查看前五行数据basic.head(5)#获取平安银行日行情数据pa=pro.daily(ts_code='000001.SZ', start_date='20150101',               end_date='20200818')pa.head()

得到如下结果:

b8dbe0763cc8cdee23fffebf7a22c71c.png

#定义获取多只股票函数:def get_stocks_data(stocklist,start,end):    all_data={}    for name,code in stocklist.items():        #qfq,前复权;hfq,后复权        all_data[name]=ts.pro_bar(ts_code=code,start_date=start, end_date=end,adj='qfq')    return all_data#保存本地def save_data(all_data):    for code,data in all_data.items():        data.to_csv('D:/MasterStudy/python/学习/test/实盘/'+code+'.csv',                     header=True, index=False)#以下为本人持有股票stocklist={'四环生物':'000518.SZ','牧原股份':'002714.SZ','恒瑞医药':'600276.SH',           '亨通光电':'600487.SH','中国平安':'601318.SH'}#时间为2015-01-01至2020-08-18all_data=get_stocks_data(stocklist,'20150101','20200818')all_data['牧原股份'].tail()#将数据保存到本地save_data(all_data)#读取本地文件夹里所有文件import os#文件存储路径file='D:/MasterStudy/python/学习/test/实盘/'g=os.walk(file)filenames=[]for path,d,filelist in g:    for filename in filelist:        filenames.append(os.path.join(filename))print(filenames)#将读取的数据文件放入一个字典中df={}#从文件名中分离出股票代码code=[name.split('.')[0] for name in filenames]for i in range(len(filenames)):    filename=file+filenames[i]    df[code[i]]=pd.read_csv(filename)    df[code[i]]['trade_date']=pd.to_datetime(df[code[i]]['trade_date'],format='%Y%m%d')    df[code[i]].set_index("trade_date", inplace=True)#查看第一只股票前五行数据df[code[0]].tail()

b7f91f560b9f554a4dcc305ad864e5a8.png

以上涉及到了复权的概念,那么为什么要设置复权呢?

所谓复权就是对股价和成交量进行权息修复,按照股票的实际涨跌绘制股价走势图,并把成交量调整为相同的股本口径。股票除权、除息之后,股价随之产生了变化,但实际成本并没有变化。

前复权即就是保持现有价位不变,将以前的价格缩减,将除权前的K线向下平移,使图形吻合,保持股价走势的连续性。前复权即就是保持现有价位不变,将以前的价格缩减,将除权前的K线向下平移,使图形吻合,保持股价走势的连续性。

后复权就是在K线图上以除权前的价格为基准来测算除权后股票的市场成本价。就是把除权后的价格按以前的价格换算过来。简单的说,就是保持先前的价格不变,而将以后的价格增加。

简单来说,就是随着公司的发展,股价和市值不断增高,而股价过高会把很多散(jiu)户(cai)挡在门外,这时候进行复权,就是把整个池子里的总的钱保持不变,把每股单价降低,总股数增加,进而降低散(jiu)户(cai)们的入场门槛,已经持股的股东则会得到配股。前复权就是保持现有价位不变,将以前的价格缩减;后复权就是保持以前的价位不变,将现在的价格提高。

plot_pos = [321,322,323,324,325] # 每个子图的位置new_colors = ['#1f77b4','#ff7f0e', '#2ca02c', '#d62728','#9467bd']# 每个子图的颜色fig = plt.figure(figsize=(16,18))fig.suptitle('自选股指走势',fontsize=18)for pos in np.arange(len(plot_pos)):           ax = fig.add_subplot(plot_pos[pos])     y_data =df[code[pos]]['close']      b = ax.plot(y_data,color=new_colors[pos])    ax.set_title(code[pos])        # 将右上边的两条边颜色设置为空,相当于抹掉这两条边    ax = plt.gca()      ax.spines['right'].set_color('none')     ax.spines['top'].set_color('none')plt.show()

7426414c2e2bc9f81d624316bfcaa0e9.png

以上选取了从2015年1月1日开始,到2020年8月18日的股票行情。可以看到,中国平安、恒瑞医药、牧原股份的涨势较好,且较平稳。亨通光电从长时间跨度来看虽然涨幅还可以,但中间回撤幅度较大,非常不稳定,四环生物则涨幅和稳定性都不好。

#累计收益plot_pos = [321,322,323,324,325] # 每个子图的位置new_colors = ['#1f77b4','#ff7f0e', '#2ca02c', '#d62728','#9467bd']fig = plt.figure(figsize=(16,18))fig.suptitle('股票收益率\n 2015-2020',fontsize=18)for pos in np.arange(len(plot_pos)):    ax = fig.add_subplot(plot_pos[pos])     y_data =df[code[pos]]['close']/df[code[pos]]['close'].iloc[-1]-1    b = ax.plot(y_data,color=new_colors[pos])    ax.set_title(code[pos])    # 将右上边的两条边颜色设置为空,相当于抹掉这两条边    ax = plt.gca()      ax.spines['right'].set_color('none')     ax.spines['top'].set_color('none')plt.show()

e8872e9fbebaca4d6787cacdee34918d.png

可以看出,从2015年1月1日至今,收益率从大到小的依次是牧原股份、恒瑞医药、亨通光电、中国平安、四环生物。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值