美文网首页
用plotly搭建自己的A股指数估值监控系统

用plotly搭建自己的A股指数估值监控系统

作者: 吴玉海 | 来源:发表于2020-04-22 21:18 被阅读0次

前段时间看到有朋友在网上分享自己的指数估值监控程序,就是将整个大盘估值的历史数据画成表格,然后定时发往订阅者的邮箱。感觉确实对整个大盘估值还蛮有用的,只不过必须依赖某一个量化数据平台来实现,后期缺乏一定的可扩展性,所以就想脱离平台用tushare的数据做一个类似的功能。

话不多说,直接开干。

首先是选择做图表的工具,以前我用的都是Matplotlib进行表格的绘制,这次我发现一个更强大的绘图库——plotly。
plotly是一个可交互,基于浏览器的绘图库,主打功能是绘制在线可交互的图表,使用plotly绘制图表返回的是一个可以交互操作的网页,这样可以更方便的分享给其他人,另外这些图表还会保存在自己的云端空间中,方便以后再进行查看。

  • 首先安装
pip install plotly

通过tushare获得指数数据,一般是利用PE来进行指数估值,这里就只获取PE数据就好

df = pro.index_dailybasic(ts_code='000001.SH',start_date='2010-06-10',end_date='2020-01-01',files=['pe_ttm','pe'])

为了画图标准,日期我们要做一些处理:

def formatDate(arrLike):  #用来格式化日期的函数
    date_time = datetime.datetime.strptime(arrLike['trade_date'],'%Y%m%d')
    return date_time
df['datetime'] = df.apply(formatDate , axis = 1)

一开始画出来就是这样


image

但这样只能看个大概,为了能更定量分析当前指数估值,我们接下来需要计算并标出整个数据的历史百分位:

_df = pd.DataFrame()
#计算历史百分位
_df["pe"] = df["pe"]
_df = _df.iloc[-n * 244:]  # n是想要计算的年数,244个交易日差不多是一年
p_high = [_df["pe"].quantile(i / 10.0) for i in [3, 5, 7]] 
for p_h, i in zip(p_high, [3, 5, 7]):
    df[str(i / 10 * 100)+'%'] = p_h

画图前先配置个人账号

import plotly 
plotly.tools.set_credentials_file(username='xxxxx', api_key='xxxxxx')

然后绘制图片


import plotly.plotly as py
import plotly.graph_objs as go


# Create a trace
trace = go.Scatter(
    x = df['datetime'],
    y = df['pe'],
    name = 'pe',
    line = dict(width = 1)
)

trace1 = go.Scatter(
    x = df['datetime'],
    y = df['30.0%'],
    line = dict(
        color = ('rgb(205, 12, 24)'), #线段颜色
        width = 4,     #线宽
        dash = 'dot'),              
    name = '30.0%'
)

trace2 = go.Scatter(
    x = df['datetime'],
    y = df['50.0%'],
    line = dict(
        color = ('rgb(25, 120, 24)'),
        width = 3,
        dash = 'dot'),
    name = '50.0%'
)

trace3 = go.Scatter(
    x = df['datetime'],
    y = df['70.0%'],
    line = dict(
        color = ('rgb(5, 12, 240)'),
        width = 2,
        dash = 'dot'),
    name = '70.0%'
)
data = [trace,trace1,trace2,trace3]

layout = dict(title = '上證指數平均PE歷史曲線',#用繁体是因为简体有乱码
              xaxis = dict(title = '月份'),
              yaxis = dict(title = '平均PE'),
              )
fig= dict(data=data, layout=layout)

url = py.plot(fig,filename = 'index', auto_open=True)

根据返回的url 就可以打开一个页面,查看到自己绘制的图片了。
下一步该发送邮件了。

这一步主要是使用email的库给自己的邮箱发送一个html 的邮件,然后将图片加载过来,大致的代码如下:


template = (''
    '<a href="{graph_url}" target="_blank">' # Open the interactive graph when you click on the image
        '<img src="{graph_url}.png">'        # Use the ".png" magic url so that the latest, most-up-to-date image is included
    '</a>'
    '{caption}'                              # Optional caption to include below the graph
    '<br>'                                   # Line break
    '<a href="{graph_url}" style="color: rgb(190,190,190); text-decoration: none; font-weight: 200;" target="_blank">'
        '点击查看交互页面'  # Direct readers to Plotly for commenting, interactive graph
    '</a>'
    '<br>'
    '<hr>'                                   # horizontal line
'')

email_body.format(graph_url= url, caption='')

msg = MIMEMultipart('alternative')
msg['From'] = me
msg['To'] = recipient
msg['Subject'] = subject

msg.attach(MIMEText(email_body, 'html'))

server = smtplib.SMTP(email_server_host, port)
server.ehlo()
server.starttls()
server.login(email_username, email_password)
server.sendmail(me, recipient, msg.as_string())
server.close()

最后就可以收到自己的邮件了:

image

本篇文章由一文多发平台ArtiPub自动发布

相关文章

  • 用plotly搭建自己的A股指数估值监控系统

    前段时间看到有朋友在网上分享自己的指数估值监控程序,就是将整个大盘估值的历史数据画成表格,然后定时发往订阅者的邮箱...

  • 指数基金投资时不得不知的三大指标

    指数基金的投资只需要投资者懂一些指数的估值,比如指数的市盈率估值、市净率估值、股息率以及指数在历史估值中的估值水平...

  • 指数基金常用的三个估值指标

    指数基金跟踪的是指数,指数又是一揽子股票,那么看指数基金的估值事实上就是看指数的估值,指数的估值又是对一揽子股票的...

  • 11.28日指数估值表

    网络上有很多估值数据可供大家查阅和参考。可是过于凌乱和分散。 所以二师父根据指数的分类编制了一套系统的指数估值表,...

  • 11.29日指数估值表

    网络上有很多估值数据可供大家查阅和参考。可是过于凌乱和分散。 所以二师父根据指数的分类编制了一套系统的指数估值表,...

  • 11.30日指数估值表(消费正常估值了)

    网络上有很多估值数据可供大家查阅和参考。可是过于凌乱和分散。 所以二师父根据指数的分类编制了一套系统的指数估值表,...

  • 12.3日指数估值表

    网络上有很多估值数据可供大家查阅和参考。可是过于凌乱和分散。 所以二师父根据指数的分类编制了一套系统的指数估值表,...

  • 二师父11.26日指数估值表

    网络上有很多估值数据可供大家查阅和参考。可是过于凌乱和分散。 所以二师父根据指数的分类编制了一套系统的指数估值表,...

  • 12.26指数估值(中证消费进入低估)

    网络上有很多估值数据可供大家查阅和参考。可是过于凌乱和分散。 所以二师父根据指数的分类编制了一套系统的指数估值表,...

  • 12.11日指数估值表

    网络上有很多估值数据可供大家查阅和参考。可是过于凌乱和分散。 所以二师父根据指数的分类编制了一套系统的指数估值表,...

网友评论

      本文标题:用plotly搭建自己的A股指数估值监控系统

      本文链接:https://www.haomeiwen.com/subject/dwrgihtx.html