当前位置: 首页 > article >正文

Python+Pyecharts重画基金净值曲线(全)

投资基金之后,发现基金曲线太简陋。

于是想用Pthone把基金曲线丰富一下,加上大盘走势,加上基金近四个季度持仓变化、基金持仓行业饼图和基金涨跌日历。

Python画曲线的库很多,比如Matplotlib、Pandas、Pyecharts和Plotly等等。个人习惯Pyecharts。

1,基金净值曲线

一条曲线主要包括以下参数:名称,x轴,y轴,颜色,宽度,年线,标签,XY名称,标题,背景色,位置,备注等等。

#画曲线
#输入:名称,x轴,y轴,颜色,宽度,年线显示,标签显示,XY显示,标题,背景色,位置,备注
def one_line(sname,x,y,clr_line,wtd,yr_ava,hid_label,hid_xy,top_title,bg_clr,ad_text,ad_pos,title_pos,label_pos,tip_flag):
    pass

    ....
    line = Line()
    line.add_xaxis(x)
    line.add_yaxis(sname,y,is_selected=select,is_smooth=smooth,is_connect_nones=True,
                    #背景色
                    areastyle_opts=opts.AreaStyleOpts(opacity=0.2,color=bg_clr),
                    label_opts=opts.LabelOpts(is_show=False),
                    #曲线粗细和颜色
                    linestyle_opts=opts.LineStyleOpts(width=wtd,color=clr_line),
                    #显示年线
                    markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='average')]),
                    )

设置global参数

        line.set_global_opts(xaxis_opts = opts.AxisOpts(is_show = False,),#缩放is_scale=True,
                     yaxis_opts = opts.AxisOpts(is_show = True,
                         #is_scale=True,#坐标轴缩放
                         #splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=0.8)),
                     ),
                     #datazoom_opts=[opts.DataZoomOpts(pos_bottom="-2%")],

                     tooltip_opts=opts.TooltipOpts(is_show = tooltip,axis_pointer_type= "cross",trigger=label_pos[2]),#axis
                     #标题和位置
                     title_opts=opts.TitleOpts(top_title, pos_left="10%", pos_top=title_pos[1],subtitle = _sbtitle),
                     legend_opts=opts.LegendOpts(pos_left=label_pos[0], pos_top=label_pos[1]),
                      graphic_opts=[opts.GraphicGroup(
                             graphic_item=opts.GraphicItem(left=ad_pos[0],top=ad_pos[1], ),
                             children=[opts.GraphicText( graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                                         text=ad_text, font=ad_pos[2],#基金净值K线显示
                                         graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(fill='black')))])],)

确定了这些参数,加上XY轴数据,就可以画线。如果有多条曲线,用line.overlap(line)叠加。如图:

如果想看其它基金的曲线,替换链接中的基金代码:http://aitouzi.vip/c/基金代码

2,基金季度持仓

下面画基金四个季度的持仓。先看效果图,X轴是季度,Y轴是股票名称,长柱是持股占净值比例。

画图不难,代码如下:

#时间线轮播多图
def one_timeline(name_y1,name_y2,x,y1,y2,top_title):

    bar = Bar()
    
    bar.add_xaxis(x)
    bar.add_yaxis(name_y1,y1,label_opts=opts.LabelOpts(position="right",formatter="{c}%"),
                  itemstyle_opts = opts.ItemStyleOpts(color='#2E8B57'))
    
    bar.add_yaxis(name_y2,y2,label_opts=opts.LabelOpts(position="right",formatter="{c}%"),
                  itemstyle_opts = opts.ItemStyleOpts(color=JsCode(clr_tc)))
    
    bar.reversal_axis() # 转置
    
    bar.set_global_opts(title_opts=opts.TitleOpts(top_title, pos_left="30%", pos_top="1%"),
        legend_opts=opts.LegendOpts(pos_left="40%", pos_top="6%"),
        graphic_opts=[opts.GraphicGroup(
                    graphic_item=opts.GraphicItem(
                        rotation=JsCode("Math.PI / 4"),bounding="raw",right=100,bottom=110,z=100,),
                    children=[opts.GraphicRect(
                            graphic_item=opts.GraphicItem(left="center", top="center", z=100),
                            graphic_shape_opts=opts.GraphicShapeOpts(width=400, height=50),
                            graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(fill="rgba(0,0,0,0)"),),
                        opts.GraphicText(
                            graphic_item=opts.GraphicItem(left="center", top="center", z=100),
                            graphic_textstyle_opts=opts.GraphicTextStyleOpts(
                                text='WX:toberishes',font="bold 16px Microsoft YaHei",
                                graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(fill="#00868B"
                                ),),)],)],)

    return bar 

这里关键是准备每个季度的持仓数据,每个季度画一个图,再叠加。

    for q in the_qts:
        try:y2 = add_zero_st(x,qts[q[1]])
        except:continue
        bar = one_timeline('','',x,[],y2,top_name,0)
        tl.add(bar,"{} 年{}季度".format(q[0],q[1]))
 

3,基金持仓行业

有时看到基金重仓股,不知道属于什么行业。现在有了基金、股票数据,可以用饼图显示基金持仓行业比例:

画饼图简单,难点是准备数据:

#基金持仓饼图
def fund_field_pie(code):

    code = completeCodes(code)
    #基金行业持仓数据
    hy = fund_stock_fd(code,0,3)
    if hy == 'na':return 0

    name = fund_names[code][:6]
    title_name = "{}{}持仓行业.html".format(name,code)
    isub = '\n\n\n\n\n\n\n\n\n\n\n         '+name_fun

    file = down_dir+title_name
    c = Pie()
    c.add("", hy,center=["50%", "60%"],)
    c.set_global_opts(title_opts=opts.TitleOpts(title=title_name[:-5],pos_left="35%",pos_top="5%",subtitle = isub),
            legend_opts=opts.LegendOpts(orient="horizontal", pos_bottom="5%", pos_left="10%",is_show=False),)
    c.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}%"))

    return c

4,基金涨跌日历

A股有两大魔咒,黑四、黑五。是不是这样呢?看下基金日涨跌数据:

只能说,每周四、周五,都有板块下跌,不同板块表现不同。其它基金在链接上修改代码:基金曲线

实现较为简单:

##画股票涨跌日历图
#info = [[日期,涨跌幅度]]
#_height:背景高度,   label_top,颜色标签底部位置
def draw_fund_calr(code,N,_height):

    code = completeCodes(code)

    nvs = get_fund_nvs_newgu(code)[1:N]
    info = [[i[0],round(100*i[3],1)] for i in nvs ]
    name = fund_names[code][:6]

    file = down_dir + name+code+'.html'
    _title = name + '涨跌'
    start = info[0][0];end = info[-1][0]

    calr = one_calr(info,name,_title,_height,file)
    del info

    return calr

这就是个人开发的基金曲线,包括净值曲线、大盘走势、持仓变化、持仓行业和涨跌日历。

喜欢就关注,有问题请留言。


http://www.kler.cn/a/400102.html

相关文章:

  • Visual Studio 圈复杂度评估
  • 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法
  • 微知-DOCA ARGP参数模块的相关接口和用法(config单元、params单元,argp pipe line,回调)
  • 【微软:多模态基础模型】(4)统一视觉模型
  • 微博短链接平台-项目测试用例设计(Xmind)
  • 【代码pycharm】动手学深度学习v2-05 线性代数
  • K8S资源限制之resources
  • 《大数据中的高级 SQL 技巧技》
  • LinuxWEB服务器的部署及优化
  • Jupyter Notebook 与 PyTorch 配置教程
  • 迷你游戏作为电子学习中的趋势工具
  • hadoop3.x 新特性
  • 学习threejs,使用TWEEN插件实现动画
  • 利用正则表达式批量修改文件名
  • Python读取prophesee相机输出的raw文件
  • java itext后端生成pdf导出
  • 企业架构框架之银行业参考架构BIAN
  • 数据分析-50-时间序列信息编码之采用正余弦循环编码
  • kafka-clients之max.block.ms
  • 【时间之外】IT人求职和创业应知【37】-AIGC私有化
  • 关于GCC内联汇编(也可以叫内嵌汇编)的简单学习
  • 基于GPU器件行为的创新分布式功能安全机制为智能驾驶保驾护航
  • 2. kafka 生产者
  • 【python】使用 DrissionPage 库进行网页自动化操作和数据提取
  • 【云原生后端开发流程及详细教程】
  • IDEA 开发工具常用快捷键有哪些?