【数据可视化】Pyecharts 绘制K线图及交易信号

获取原始数据

通过tushare接口获取600848股票行情,包括ohlc数据及相关因子。

import tushare as ts
data=ts.get_hist_data("600848")
print(data.head())

在这里插入图片描述

使用Pyecharts绘制K线图
绘制OHLC蜡烛图

在这里插入图片描述

def plot_kline(data):
    kline = (
        Kline(init_opts=opts.InitOpts(width="1800px",height="1000px")) # 设置画布大小
        .add_xaxis(xaxis_data=list(data.index)) # 将原始数据的index转化为list作为横坐标
        .add_yaxis(series_name="klines",y_axis=data[["open","close","low","high"]].values.tolist(), # 纵坐标采用OPEN、CLOSE、LOW、HIGH,注意顺序
        itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),)
        .set_global_opts(legend_opts=opts.LegendOpts(is_show=True, pos_bottom=10, pos_left="center"),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    xaxis_index=[0],
                    range_start=98,
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    xaxis_index=[0],
                    type_="slider",
                    pos_top="85%",
                    range_start=98,
                    range_end=100,
                ),
            ],
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                ),
            ),
            tooltip_opts=opts.TooltipOpts(
                trigger="axis",
                axis_pointer_type="cross",
                background_color="rgba(245, 245, 245, 0.8)",
                border_width=1,
                border_color="#ccc",
                textstyle_opts=opts.TextStyleOpts(color="#000"),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                dimension=2,
                series_index=5,
                is_piecewise=True,
                pieces=[
                    {"value": 1, "color": "#00da3c"},
                    {"value": -1, "color": "#ec0000"},
                ],
            ),
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{"xAxisIndex": "all"}],
                label=opts.LabelOpts(background_color="#777"),
            ),
            brush_opts=opts.BrushOpts(
                x_axis_index="all",
                brush_link="all",
                out_of_brush={"colorAlpha": 0.1},
                brush_type="lineX",
            ),
        )
    )
    kline.render("kline.html")    #导出成html文件

if __name__=="__main__":
    data=get_hist_data()
    plot_kline(data)
绘制OHLC蜡烛图+成交量图

一般在OHLC蜡烛图下面绘制交易量柱状图
在这里插入图片描述

def plot_kline_volume(data):
    kline = (
        Kline(init_opts=opts.InitOpts(width="1800px",height="1000px"))
        .add_xaxis(xaxis_data=list(data.index))
        .add_yaxis(
            series_name="klines",
            y_axis=data[["open","close","low","high"]].values.tolist(),
            itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),
        )
        .set_global_opts(legend_opts=opts.LegendOpts(is_show=True, pos_bottom=10, pos_left="center"),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    xaxis_index=[0,1],  # 这里需要修改可缩放的x轴坐标编号
                    range_start=98,
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    xaxis_index=[0,1],  # 这里需要修改可缩放的x轴坐标编号
                    type_="slider",
                    pos_top="85%",
                    range_start=98,
                    range_end=100,
                ),
            ],
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                ),
            ),
            tooltip_opts=opts.TooltipOpts(
                trigger="axis",
                axis_pointer_type="cross",
                background_color="rgba(245, 245, 245, 0.8)",
                border_width=1,
                border_color="#ccc",
                textstyle_opts=opts.TextStyleOpts(color="#000"),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                dimension=2,
                series_index=5,
                is_piecewise=True,
                pieces=[
                    {"value": 1, "color": "#00da3c"},
                    {"value": -1, "color": "#ec0000"},
                ],
            ),
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{"xAxisIndex": "all"}],
                label=opts.LabelOpts(background_color="#777"),
            ),
            brush_opts=opts.BrushOpts(
                x_axis_index="all",
                brush_link="all",
                out_of_brush={"colorAlpha": 0.1},
                brush_type="lineX",
            ),
        )
    )

    bar = (
        Bar()
        .add_xaxis(xaxis_data=list(data.index))
        .add_yaxis(
            series_name="volume",
            y_axis=data["volume"].tolist(),
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(
                color=JsCode(
                    """
                function(params) {
                    var colorList;
                    if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) {
                        colorList = '#ef232a';
                    } else {
                        colorList = '#14b143';
                    }
                    return colorList;
                }
                """
                )
            ),
        )
        .set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

    #kline.render("kline.html")   #test
    
    grid_chart = Grid(
        init_opts=opts.InitOpts(
            width="1800px",
            height="1000px",
            animation_opts=opts.AnimationOpts(animation=False),
        )
    )

    grid_chart.add_js_funcs("var barData={}".format(data[["open","close"]].values.tolist())) # 导入open、close数据到barData改变交易量每个bar的颜色
    grid_chart.add(
        #overlap_kline_line,
        kline,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="8%", height="40%"),
    )
    grid_chart.add(
        bar,
        grid_opts=opts.GridOpts(
            pos_left="10%", pos_right="8%", pos_top="60%", height="20%"
        ),
    )
    grid_chart.render("kline_volume.html")

if __name__=="__main__":
    data=get_hist_data()
    plot_kline_volume(data)
绘制技术指标(交易信号)

画出5日、10日、20日均线,其他交易信号同理,如下图。
在这里插入图片描述

ef plot_kline_volume_signal(data):
    kline = (
        Kline(init_opts=opts.InitOpts(width="1800px",height="1000px"))
        .add_xaxis(xaxis_data=list(data.index))
        .add_yaxis(
            series_name="klines",
            y_axis=data[["open","close","low","high"]].values.tolist(),
            itemstyle_opts=opts.ItemStyleOpts(color="#ec0000", color0="#00da3c"),
        )
        .set_global_opts(legend_opts=opts.LegendOpts(is_show=True, pos_bottom=10, pos_left="center"),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    xaxis_index=[0,1],
                    range_start=98,
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    xaxis_index=[0,1],
                    type_="slider",
                    pos_top="85%",
                    range_start=98,
                    range_end=100,
                ),
            ],
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                ),
            ),
            tooltip_opts=opts.TooltipOpts(
                trigger="axis",
                axis_pointer_type="cross",
                background_color="rgba(245, 245, 245, 0.8)",
                border_width=1,
                border_color="#ccc",
                textstyle_opts=opts.TextStyleOpts(color="#000"),
            ),
            visualmap_opts=opts.VisualMapOpts(
                is_show=False,
                dimension=2,
                series_index=5,
                is_piecewise=True,
                pieces=[
                    {"value": 1, "color": "#00da3c"},
                    {"value": -1, "color": "#ec0000"},
                ],
            ),
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{"xAxisIndex": "all"}],
                label=opts.LabelOpts(background_color="#777"),
            ),
            brush_opts=opts.BrushOpts(
                x_axis_index="all",
                brush_link="all",
                out_of_brush={"colorAlpha": 0.1},
                brush_type="lineX",
            ),
        )
    )

    bar = (
        Bar()
        .add_xaxis(xaxis_data=list(data.index))
        .add_yaxis(
            series_name="volume",
            y_axis=data["volume"].tolist(),
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(
                color=JsCode(
                    """
                function(params) {
                    var colorList;
                    if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) {
                        colorList = '#ef232a';
                    } else {
                        colorList = '#14b143';
                    }
                    return colorList;
                }
                """
                )
            ),
        )
        .set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )
    
    line=(Line()
        .add_xaxis(xaxis_data=list(data.index))
        .add_yaxis(
            series_name="ma5",
            y_axis=data["ma5"].tolist(),
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
    ).add_yaxis(
            series_name="ma10",
            y_axis=data["ma10"].tolist(),
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
    ).add_yaxis(
            series_name="ma20",
            y_axis=data["ma20"].tolist(),
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
    )
    )
    

    grid_chart = Grid(
        init_opts=opts.InitOpts(
            width="1800px",
            height="1000px",
            animation_opts=opts.AnimationOpts(animation=False),
        )
    )

    grid_chart.add_js_funcs("var barData={}".format(data[["open","close"]].values.tolist()))
    overlap_kline_line = kline.overlap(line)
    grid_chart.add(
        overlap_kline_line,
        #kline,
        grid_opts=opts.GridOpts(pos_left="11%", pos_right="8%", height="40%"),
    )
    grid_chart.add(
        bar,
        grid_opts=opts.GridOpts(
            pos_left="10%", pos_right="8%", pos_top="60%", height="20%"
        ),
    )
    grid_chart.render("kline_volume_signal.html")

if __name__=="__main__":
    data=get_hist_data()
    plot_kline_volume_signal(data)
  • 10
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Python数据可视化pyecharts是一个基于Python语言的数据可视化库,它提供了丰富的图表类型和交互式功能,可以帮助用户快速地创建各种类型的图表,包括折线图、柱状图、散点图、地图等。同时,它还支持多种数据格式的导入和导出,包括CSV、Excel、JSON等,方便用户进行数据处理和分析。pyecharts的使用非常简单,只需要几行代码就可以生成一个漂亮的图表,因此它被广泛应用于数据分析、商业智能、科学研究等领域。 ### 回答2: Python数据可视化Python中重要的数据处理和分析技术,它允许将数据转换为可视的图形或更具体的图表。Pyecharts是一个可视化库,它利用了echarts支持的全部功能,并集成了jupyter和pandas,并可以快速创建交互式的图表。 Pyecharts可以实现各种类型的图表,包括散点图、雷达图、热力图、地图、仪表盘、散点图矩阵、面积图等。同时,pyecharts支持SVG/HTML5渲染,实现了网页内快速响应、流畅的动画效果,同时也支持跨平台的使用(如Jupyter Notebook)我们可以通过安装pip install pyecharts快速配置来实现自己的可视化需求。 在实际应用中,Python数据可视化pyecharts的应用广泛,比如在数据分析领域,为了能够更直观地展示数据情况,需要使用可视化方式。可视化方案pyecharts就是其中比较优秀的一种开源可视化方案,基于Python的应用使用方便、图表美观、交互性强,适合于各种个数据方案的可视化处理。 总的来说,Python数据可视化pyecharts提供了一种简单、快捷、美观的图示工具,适用于工程师、分析师、学者等不同领域的数据分析任务。如果您在数据分析和可视化方面有涉及到相关的需求,学习和使用python数据可视化pyecharts将会提高您的工作效率,同时为您的工作增色不少。 ### 回答3: Pyecharts是一种基于Python编程语言的高级数据可视化工具,它提供了丰富的图表类型和大量的数据可视化功能,能够使数据更加生动直观,方便用户更好地理解和分析数据。 Pyecharts支持各种常见图表类型,包括折线图、柱状图、散点图、地图等。通过Pyecharts,用户可以轻松实现二维图表和三维图表的绘制,支持数据的多维显示,数据展示更加具有灵活性。 Pyecharts采用Python语言编写并使用了前端技术,因此操作简单,交互性强,具有良好的可扩展性。用户可以使用Python语言实现数据的导入、预处理和分析,并使用Pyecharts绘制图表,从而更好地获取数据信息,帮助用户做出更明智的决策。 Pyecharts还支持自定义配色方案、标签显示格式、图表上的文字等功能,帮助用户更好地展示数据并制作出更具有艺术性的图表。另外,Pyecharts的图表支持自由调整,可供用户在图表空间内进行缩放、平移等操作,从而更好地控制数据呈现的信息量。 总之,Python数据可视化Pyecharts是一种功能强大的数据可视化工具,可以帮助用户制作高质量、丰富多彩的图表,使数据更具可读性和可视化效果。其简单易用、可扩展性强、图表样式多样等特点受到了很多用户的青睐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值