示例#1
0
 def draw(self,freq=""):
     kdata=[]
     ktime=[]
     kvol=[]
     for i in range(len(self.klines_merge)):
         current_kline = self.klines_merge[i]
         onedata=[]
         onedata.append(current_kline['open'])
         onedata.append(current_kline['close'])
         onedata.append(current_kline['low'])
         onedata.append(current_kline['high'])
         kdata.append(onedata)
         ktime.append(current_kline['date'])
         kvol.append(current_kline['volume'])
     kline=(Kline().add_xaxis(ktime)
            .add_yaxis(series_name= self.klines_merge[0]['code'],y_axis= kdata,
                       markline_opts=opts.MarkLineOpts(label_opts=opts.LabelOpts(position="middle", color="blue", font_size=15),
                                                       data=self.split_data_part(),
                                                       symbol=["circle", "none"],),
                       )
            .set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True),
                             yaxis_opts=opts.AxisOpts(is_scale=True,
                                                      splitarea_opts=opts.SplitAreaOpts(is_show=True,areastyle_opts=opts.AreaStyleOpts(opacity=1)),
                                                      ),
                             datazoom_opts = [opts.DataZoomOpts()],
                             title_opts=opts.TitleOpts(title=self.klines_merge[0]['code']) ,
                             ) 
            .set_series_opts(
                markarea_opts=opts.MarkAreaOpts(is_silent=True, data=self.split_data_part())
                )
            )
     
     bar = (Bar().add_xaxis(ktime).add_yaxis("",kvol))
     path =self.klines_merge[0]['code']+"-"+freq+".html";
     kline.render(path)
示例#2
0
    def candle(self, data, label="", xaxis=None, zoom_setting=[], position=0, show_rgb=False, mark_point=[], mark_line=[]):
        zoomopt = []
        for setting in zoom_setting:
            zoomopt.append(
                opts.DataZoomOpts(**setting)
            )

        if not xaxis: xaxis = self.xaxis
        rgb_color = {
            "itemstyle_opts": opts.ItemStyleOpts(
                color="#ef232a",
                color0="#14b143",
                border_color="#ef232a",
                border_color0="#14b143",
            ),
        }
        if not show_rgb: rgb_color = {}
        mark_point_item = []
        for point in mark_point:
            mark_point_item.append(
                opts.MarkPointItem(**point),
            )
        return (Kline(init_opts=opts.InitOpts(**self.chart_opt))
            .add_xaxis(xaxis_data=xaxis)
            .add_yaxis(
                series_name=label,
                y_axis=data,
                markpoint_opts=opts.MarkPointOpts(data=mark_point_item),
                markline_opts=opts.MarkLineOpts(
                    label_opts=opts.LabelOpts(
                        position="middle", color="blue", font_size=15
                    ),
                    data=mark_line,
                    symbol=["circle", "none"],
                ),
                **rgb_color
            )
            .set_series_opts(
                markarea_opts=opts.MarkAreaOpts(is_silent=True, data=[])
            )
            .set_global_opts(
                title_opts=opts.TitleOpts(title="Candle Chart", pos_left="0"),
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    grid_index=position,
                    is_scale=True,
                    boundary_gap=False,
                    axislabel_opts=opts.LabelOpts(is_show=True),
                ),
                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"),
                datazoom_opts=zoomopt,
            )
        )
def line_with_mark_area():
    line = Line(
        init_opts=opts.InitOpts(theme='light', width='1000px', height='600px'))
    line.add_xaxis(x_data)
    line.add_yaxis('', y_data)
    line.set_series_opts(markarea_opts=opts.MarkAreaOpts(
        data=[opts.MarkAreaItem(name="黄金周", x=("2020/10/1", "2020/10/8"))]))

    return line
示例#4
0
    def kline(self,
              data,
              title="K线图",
              open="open",
              close="close",
              high="high",
              low="low",
              date=None,
              blist=None,
              slist=None,
              positlist=None):
        if type(data) != pd.DataFrame:
            return None

        if data.empty:
            return None

        if date == None:
            xaxis = pd.Series(
                data.index).apply(lambda x: x.strftime("%Y-%m-%d")).to_list()
        else:
            xaxis = pd.Series(data["date"]).apply(
                lambda x: x.strftime("%Y-%m-%d")).to_list()

        yaxis = data[[open, close, high, low]].values.tolist()

        chart = Kline(init_opts=opts.InitOpts())
        chart.add_xaxis(xaxis)
        chart.add_yaxis(
            "kline",
            yaxis,
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ec0000",
                color0="#00da3c",
                border_color="#8A0000",
                border_color0="#008F28",
            ),
            markline_opts=opts.MarkLineOpts(
                data=[opts.MarkLineItem(type_="max", value_dim="close")]),
            markpoint_opts=bsopts(blist=blist, slist=slist))

        chart.set_series_opts(markarea_opts=opts.MarkAreaOpts(
            data=positionsArea(positlist)))
        # chart = maline(data).overlap(chart)
        # chart.set_global_opts(
        #     xaxis_opts=opts.AxisOpts(is_scale=True),
        #     yaxis_opts=opts.AxisOpts(
        #         is_scale=True,
        #         splitarea_opts=opts.SplitAreaOpts(
        #             is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
        #         ),
        #     ),
        #     # datazoom_opts=datazoom,
        #     title_opts=opts.TitleOpts(title=title),
        # )
        return chart
示例#5
0
    def __draw_zs_area(_ka):
        lines = []
        scatters = []
        for _zs in _ka.zs_list:
            x_start = _zs['start_point']['dt']

            if _zs['zs_finished']:# 中枢完成
                x_end = _zs['end_point']['dt']

                chart_b = EffectScatter()

                if 'buy3' in _zs:
                    chart_b.add_xaxis([_zs['buy3']['dt']])
                    chart_b.add_yaxis(series_name=_ka.freq if aggregation else "B", y_axis=[_zs['buy3']['xd']], is_selected=False, symbol="circle", symbol_size=8,
                                itemstyle_opts=opts.ItemStyleOpts(color="red",))
                    chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
                    scatters.append(chart_b)
                elif 'sell3' in _zs:
                    chart_b.add_xaxis([_zs['sell3']['dt']])
                    chart_b.add_yaxis(series_name=_ka.freq if aggregation else "S", y_axis=[_zs['sell3']['xd']], is_selected=False, symbol="circle", symbol_size=8,
                                itemstyle_opts=opts.ItemStyleOpts(color="green",))
                    chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts, legend_opts=legend_not_show_opts)
                    scatters.append(chart_b)
            elif len(_zs['points'])>=5:# 中枢成立但未完成,有3笔或段以上
                x_end = _zs['points'][-1]['dt']
            else:                       # 中枢未完成,且未确定
                continue
            
            ZD = _zs['ZD']
            ZG = _zs['ZG']
            area_data=[[ {'xAxis': x_start, 'yAxis': ZD, 'value': ZD }, {'xAxis': x_end, 'yAxis': ZG, 'value': ZG }]]
            line = (Line()
            .add_xaxis([x_start, x_end])
            .add_yaxis(series_name=_ka.freq if aggregation else "ZS", y_axis=[ZD, ZG], symbol='none' 
            """        
            , markpoint_opts = opts.MarkPointOpts(
                data=[
                    opts.MarkPointItem(type_="max", name="ZG"),
                    opts.MarkPointItem(type_="min", name="ZD"),
                ]
            )
            """
            , markline_opts=opts.MarkLineOpts(
                label_opts=opts.LabelOpts(
                    position="middle", color="blue", font_size=15,
                ),
                linestyle_opts=opts.LineStyleOpts(type_="dashed"),
                data=area_data,
                symbol=["none", "none"],
            )
            )
            .set_series_opts(
                markarea_opts=opts.MarkAreaOpts(data=area_data, itemstyle_opts=opts.ItemStyleOpts(color="#dcdcdc",opacity=0.1))
            ))
            lines.append(line)
        return lines, scatters
示例#6
0
def line_with_mark_area():
    line = Line(init_opts=opts.InitOpts(theme='essos', width='1600px', height='450px'))
    line.add_xaxis(x_data)
    line.add_yaxis('百天情感趋势图', y_data)

    # 设置标记区域
    line.set_series_opts(
        markarea_opts=opts.MarkAreaOpts(
            data=[
                opts.MarkAreaItem(name="情绪低落期", x=("1.20", "2.8"))
            ]
        )
    )
    return line
示例#7
0
def kline(data, buy=[], sell=[], zone=[], title="K线图", height="250px"):
    if data.empty:
        return Kline(init_opts=opts.InitOpts(width="100%", height=height))

    xaxis = pd.Series(
        data.index).apply(lambda x: x.strftime("%Y-%m-%d")).to_list()
    yaxis = data[["open", "close", "high", "low"]].values.tolist()

    chart = Kline(init_opts=opts.InitOpts(width="100%", height=height))
    chart.add_xaxis(xaxis)
    chart.add_yaxis(
        "kline",
        yaxis,
        itemstyle_opts=opts.ItemStyleOpts(
            color="#ec0000",
            color0="#00da3c",
            border_color="#8A0000",
            border_color0="#008F28",
        ),
        # markline_opts=opts.MarkLineOpts(
        #     data=[opts.MarkLineItem(type_="max", value_dim="close")]
        # ),
        markpoint_opts=opts.MarkPointOpts(
            data=buy.apply(buypoint, axis=1).values.tolist() +
            (sell.apply(sellpoint, axis=1).values.tolist())),
    )
    chart.set_series_opts(markarea_opts=opts.MarkAreaOpts(
        data=zone.apply(bszone, axis=1).values.tolist()))
    # chart = chart.overlap(maline(data))

    # chart.set_global_opts(
    #     xaxis_opts=opts.AxisOpts(is_scale=True),
    #     yaxis_opts=opts.AxisOpts(
    #         is_scale=True,
    #         splitarea_opts=opts.SplitAreaOpts(
    #             is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
    #         ),
    #     ),
    #     datazoom_opts=[opts.DataZoomOpts(
    #         pos_bottom="0px",
    #         range_start= 100.00-(5000.00/len(xaxis)),
    #         range_end= 100.00,
    #         )],
    #         title_opts=opts.TitleOpts(title=title),
    # )

    return chart
示例#8
0
def kline(data, title="K线图", height="250px"):

    # logging.debug(data)
    if data.empty:
        return Kline(init_opts=opts.InitOpts(width="100%", height=height))

    xaxis = pd.Series(
        data.index).apply(lambda x: x.strftime("%Y-%m-%d")).to_list()
    yaxis = data[["open", "close", "high", "low"]].values.tolist()

    chart = Kline(init_opts=opts.InitOpts(width="100%", height=height))
    chart.add_xaxis(xaxis)
    chart.add_yaxis(
        "kline",
        yaxis,
        itemstyle_opts=opts.ItemStyleOpts(
            color="#ec0000",
            color0="#00da3c",
            border_color="#8A0000",
            border_color0="#008F28",
        ),
        markline_opts=opts.MarkLineOpts(
            data=[opts.MarkLineItem(type_="max", value_dim="close")]),
        markpoint_opts=opts.MarkPointOpts(
            data=bspoint(data),
            label_opts=opts.LabelOpts(
                position="top",
                color="#000",
                font_size=8,
            ),
        ),
    )

    chart.set_series_opts(markarea_opts=opts.MarkAreaOpts(data=bsArea))
    chart = maline(data).overlap(chart)
    chart.set_global_opts(
        xaxis_opts=opts.AxisOpts(is_scale=True),
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),
        ),
        datazoom_opts=datazoom,
        title_opts=opts.TitleOpts(title=title),
    )
    return chart
示例#9
0
 def geoStation(self, data) -> Geo:
     """
     -- 全国火车站及开行列车数量分布图
     设置主题:theme=ThemeType.DARK,背景颜色:bg_color="#e0f0e9",设置高亮状态下的样式
     :param data:list:[(车站名称,值)]
     :return: Geo
     """
     station_map = (
         Geo(init_opts=opts.InitOpts(
             width='1000px', height='500px',
             theme=ThemeType.DARK)).add_schema(
                 maptype="china",
                 zoom=1.2,
                 itemstyle_opts=opts.ItemStyleOpts(color="#323c48",
                                                   border_color="#111"),
                 emphasis_itemstyle_opts=opts.ItemStyleOpts(
                     color="#323c48"),  # 高亮状态下的多边形样式(省份)
                 emphasis_label_opts=opts.LabelOpts(
                     is_show=False)  # 高亮状态下的标签样式(省份名称)
             ).add_coordinate_json(self.file_json)  # 从json文件导入坐标值
         .add('', data[:2990], symbol_size=2,
              color='#057748').set_series_opts(
                  label_opts=opts.LabelOpts(is_show=False),
                  markarea_opts=opts.MarkAreaOpts(
                      is_silent=False))  # 关闭各省名称显示
         .set_global_opts(
             visualmap_opts=opts.VisualMapOpts(type_='color',
                                               min_=0,
                                               max_=100),
             title_opts=opts.TitleOpts(
                 title='全国火车站及开行列车数量分布图',
                 title_textstyle_opts=opts.TextStyleOpts(
                     font_size=20),  # 设置标题大小
                 subtitle='全国3500+个车站,开行列车最多的前三个车站是:{},{},{}...  {}'.format(
                     data[0][0], data[1][0], data[2][0],
                     self.data_source))))
     return station_map
            axispointer_opts=opts.AxisPointerOpts(is_show=True)
            
            # 分隔线
            splitline_opts=opts.SplitLineOpts(is_show=True),
        )
    )
    
    .set_series_opts(
        # 区域标记
        markarea_opts=opts.MarkAreaOpts(
            is_silent=False,
            data=[
                opts.MarkAreaItem(
                    name='',
                    x=(year-0.5,year+0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                    itemstyle_opts=opts.ItemStyleOpts(
                        color="#aaaaaa", opacity=0.1
                    ),
                )
            ]
        )
    )
)

#------------------------------------- 配件及其他常用格式详解 -------------------------------------#
line=(
    Line(                                                                                          # 官方说明链接 下同 
        # 初始化                                                                                   https://pyecharts.org/#/zh-cn/global_options?id=initopts%ef%bc%9a%e5%88%9d%e5%a7%8b%e5%8c%96%e9%85%8d%e7%bd%ae%e9%a1%b9
        width = "900px",
        height = "500px",
示例#11
0
def positionsArea(list):
    # 持仓范围
    return opts.MarkAreaOpts(
        data=list.apply(positionsitem, axis=1).values.tolist())
示例#12
0
import datetime
import math
import pyecharts.options as opts
import random
from pyecharts.charts import *
from pyecharts.components import Table
from pyecharts.faker import POPULATION
from pyecharts.globals import CurrentConfig
CurrentConfig.ONLINE_HOST = "https://cdn.kesci.com/lib/pyecharts_assets/"
# %%
# 直角坐标系图表
# 直方图
x_data = ['apple', 'huawei', 'xiaomi', 'oppo', 'vivo', 'meizu']
y_data = [123, 312, 89, 107, 82, 23]
bar = (Bar().add_xaxis(x_data).add_yaxis('', y_data))
bar.render()
# %%
# 折线图
x_data = ['apple', 'huawei', 'xiaomi', 'oppo', 'vivo', 'meizu']
y_data = [123, 312, 89, 107, 82, 23]
bar = (Line().add_xaxis(x_data).add_yaxis('', y_data))
bar.render()
# %%
# 折线图
x_data = ['apple', 'huawei', 'xiaomi', 'oppo', 'vivo', 'meizu']
y_data = [[random.randint(100, 200) for i in range(10)] for item in x_data]
Box = Boxplot()
Box.add_xaxis(x_data)
Box.add_yaxis('', Box.prepare_data(y_data))
bar.render()
示例#13
0
          )
bar.add_xaxis(month_columns)
bar.add_yaxis(
    '降水量',  # 设置系列名。
    data_precipitation,  # 配置数据源。
    itemstyle_opts=opts.ItemStyleOpts(  # 配置图形。
        color='CornFlowerBlue'))
bar.add_yaxis('蒸发量', data_evaporation)
bar.set_global_opts(
    title_opts=opts.TitleOpts(  # 设置标题和副标题,或用字典形式也可。
        title='条形图示例', subtitle='降水量、蒸发量显示'),
    datazoom_opts=opts.DataZoomOpts(is_show=True),  # 设置显示滚动条。
    yaxis_opts=opts.AxisOpts(max_=200),  # 配置y轴最大值为200,类似方法可配置x轴。
    toolbox_opts=opts.ToolboxOpts(),  # 配置工具箱栏。
)

bar.set_series_opts(
    label_opts=opts.LabelOpts(is_show=False),  # 设置在图表上显示具体数值,默认为True,此处设置为不显示。
    markpoint_opts=opts.MarkAreaOpts(  # 设置显示数据标记点。
        data=[
            opts.MarkPointItem(type_='max'),  # 标记最大值点。
            opts.MarkPointItem(type_='min'),  # 标记最小值点。
        ]),
    markline_opts=opts.MarkLineOpts(  # 设置显示数据标记线。
        data=[
            opts.MarkLineItem(type_='average',
                              name='平均')  # 标记平均值线和线名称,线名称会在鼠标浮于其上时显示。
        ]))

bar.render('{}.html'.format(__file__))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="一天用电量分布", subtitle="纯属虚构"),
        tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
        xaxis_opts=opts.AxisOpts(boundary_gap=False),
        yaxis_opts=opts.AxisOpts(
            axislabel_opts=opts.LabelOpts(formatter="{value} W"),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
        visualmap_opts=opts.VisualMapOpts(
            is_piecewise=True,
            dimension=0,
            pieces=[
                {"lte": 6, "color": "green"},
                {"gt": 6, "lte": 8, "color": "red"},
                {"gt": 8, "lte": 14, "color": "green"},
                {"gt": 14, "lte": 17, "color": "red"},
                {"gt": 17, "color": "green"},
            ],
        ),
    )
    .set_series_opts(
        markarea_opts=opts.MarkAreaOpts(
            data=[
                opts.MarkAreaItem(name="早高峰", x=("07:30", "10:00")),
                opts.MarkAreaItem(name="晚高峰", x=("17:30", "21:15")),
            ]
        )
    )
    .render("distribution_of_electricity.html")
)
示例#15
0
        ),
        title_opts=opts.TitleOpts(title="各时段的订单数量与销售额"),
        tooltip_opts=opts.TooltipOpts(trigger="axis",
                                      axis_pointer_type="cross"),
    ))

line = (
    Line().add_xaxis(x_data).add_yaxis(
        "销售额",
        t3["analyze_t3.sales"].values.tolist(),
        yaxis_index=0,
        #color="#ff5798",
        #color="#BFEFFF",
        label_opts=opts.LabelOpts(is_show=False),
    ).set_series_opts(markarea_opts=opts.MarkAreaOpts(data=[
        opts.MarkAreaItem(name="午高峰", x=("12", "15")),
        opts.MarkAreaItem(name="晚高峰", x=("17", "20")),
    ])))

# x_data = ["{}月".format(i) for i in range(1, 13)]
# line = (
#     Line()
#     .add_xaxis(x_data)
#     .add_yaxis(
#         "平均温度",
#         [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
# #         yaxis_index=2,
# #         color="#675bba",
# #         label_opts=opts.LabelOpts(is_show=False),
#     )
# )
                pieces=[
                    {
                        "lte": 6,
                        "color": "green"
                    },
                    {
                        "gt": 6,
                        "lte": 8,
                        "color": "red"
                    },
                    {
                        "gt": 8,
                        "lte": 14,
                        "color": "green"
                    },
                    {
                        "gt": 14,
                        "lte": 17,
                        "color": "red"
                    },
                    {
                        "gt": 17,
                        "color": "green"
                    },
                ],
            ),
        ).set_series_opts(markarea_opts=opts.MarkAreaOpts(data=[
            opts.MarkAreaItem(name="早高峰", x=("07:30", "10:00")),
            opts.MarkAreaItem(name="晚高峰", x=("17:30", "21:15")),
        ])).render("distribution_of_electricity.html"))
示例#17
0
    def draw_chart(df,
                   extend_field,
                   save_path="",
                   trade_list=None,
                   point_list=None,
                   area_list=None,
                   kline_title="买卖点K线图",
                   is_smooth=True,
                   is_connect_nones=False):
        datetime_array = df.datetime.tolist()
        volume_array = df.volume.tolist()
        # open close low high
        kline_data = df[["open", "close", "low", "high"]].values.tolist()

        # 绘制买卖点
        _point_list = []
        # 绘制标志点
        if point_list is not None and len(point_list) > 1:
            for point in point_list:
                if type(point["datetime"]) == str:
                    point_datetime = point["datetime"]
                else:
                    point_datetime = point["datetime"].strftime(
                        "%Y-%m-%d %H:%M:%S.%f")

                point_name = point.get("name", "")
                _point_list.append(
                    opts.MarkPointItem(
                        name=point_name,
                        coord=[point_datetime, point["y"]],
                        value=point_name if point_name else point["y"],
                        itemstyle_opts=opts.ItemStyleOpts(
                            color=point.get("color", "#ef232a"))))

        else:
            if trade_list is not None and len(trade_list) > 1:
                for trade in trade_list:
                    # 开多
                    if type(trade[0]) == str:
                        trade_datetime = trade[0]
                    else:
                        trade_datetime = trade[0].strftime(
                            "%Y-%m-%d %H:%M:%S.%f")

                    if trade_datetime < datetime_array[0]:
                        continue

                    if trade[1] == "多" and trade[4] == "开":
                        _point_list.append(
                            opts.MarkPointItem(
                                name="开多",
                                coord=[trade_datetime, trade[6]],
                                value="开多",
                                itemstyle_opts=opts.ItemStyleOpts(
                                    color="#ef232a")))
                    # 开空
                    elif trade[1] == "空" and trade[4] == "开":
                        _point_list.append(
                            opts.MarkPointItem(
                                name="开空",
                                coord=[trade_datetime, trade[6]],
                                value="开空",
                                itemstyle_opts=opts.ItemStyleOpts(
                                    color="#ef232a")))
                    # 平多
                    elif trade[1] == "多" and (trade[4] == "平" or trade[4]
                                              == "平今" or trade[4] == "平昨"):
                        _point_list.append(
                            opts.MarkPointItem(
                                name="平空",
                                coord=[trade_datetime, trade[6]],
                                value="平空",
                                itemstyle_opts=opts.ItemStyleOpts(
                                    color="#14b143")))
                    # 平空
                    elif trade[1] == "空" and (trade[4] == "平" or trade[4]
                                              == "平今" or trade[4] == "平昨"):
                        _point_list.append(
                            opts.MarkPointItem(
                                name="平多",
                                coord=[trade_datetime, trade[6]],
                                value="平多",
                                itemstyle_opts=opts.ItemStyleOpts(
                                    color="#14b143")))

        # 绘制矩形
        _area_list = []
        if area_list is not None and len(area_list) > 1:
            for item in area_list:
                _area_list.append(
                    opts.MarkAreaItem(
                        x=item["x"],
                        y=item["y"],
                        itemstyle_opts=opts.ItemStyleOpts(
                            color="transparent",
                            border_color=item.get("border_color", "#4D0099"),
                            border_width=3,
                            border_type="dashed"),
                    ))

        kline = (Kline().add_xaxis(xaxis_data=datetime_array).add_yaxis(
            series_name="Kline",
            y_axis=kline_data,
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ef232a",
                color0="#14b143",
                border_color="#ef232a",
                border_color0="#14b143",
            ),
            markpoint_opts=opts.MarkPointOpts(data=_point_list),
        ).set_series_opts(markarea_opts=opts.MarkAreaOpts(
            data=_area_list, )).set_global_opts(
                title_opts=opts.TitleOpts(title=kline_title,
                                          pos_left="2%",
                                          pos_top="1%"),
                legend_opts=opts.LegendOpts(is_show=True,
                                            pos_top=10,
                                            pos_left="center"),
                datazoom_opts=[
                    opts.DataZoomOpts(
                        is_show=False,
                        type_="inside",
                        xaxis_index=[0, 1],
                        range_start=0,
                        range_end=100,
                    ),
                    opts.DataZoomOpts(
                        is_show=True,
                        xaxis_index=[0, 1],
                        type_="slider",
                        pos_top="88%",
                        range_start=0,
                        range_end=100,
                    ),
                ],
                yaxis_opts=opts.AxisOpts(
                    is_scale=True,
                    splitline_opts=opts.SplitLineOpts(is_show=True)),
                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"),
                ),
            ))

        bar = (Bar().add_xaxis(xaxis_data=datetime_array).add_yaxis(
            series_name="Volume",
            y_axis=volume_array,
            xaxis_index=1,
            yaxis_index=1,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                grid_index=1,
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                is_scale=True,
                split_number=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
                axisline_opts=opts.AxisLineOpts(is_show=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

        if len(extend_field) > 0:
            line = (Line().add_xaxis(
                xaxis_data=datetime_array).set_global_opts(
                    xaxis_opts=opts.AxisOpts(type_="category"),
                    legend_opts=opts.LegendOpts(is_show=True),
                ))
            for field in extend_field:
                field_value_array = df[field].tolist()
                line.add_yaxis(
                    series_name=field,
                    y_axis=field_value_array,
                    is_smooth=is_smooth,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(width=2, opacity=0.8),
                    label_opts=opts.LabelOpts(is_show=False),
                    is_connect_nones=is_connect_nones,
                )

            # Kline And Line
            kline = kline.overlap(line)

        # Grid Overlap + Bar
        grid_chart = Grid(init_opts=opts.InitOpts(
            width="100%",
            height="760px",
            animation_opts=opts.AnimationOpts(animation=False),
        ))
        grid_chart.add(
            kline,
            grid_opts=opts.GridOpts(pos_left="3.5%",
                                    pos_right="3.5%",
                                    height="60%"),
        )
        grid_chart.add(
            bar,
            grid_opts=opts.GridOpts(pos_left="3.5%",
                                    pos_right="3.5%",
                                    pos_top="70%",
                                    height="16%"),
        )

        grid_chart.render(os.path.join(save_path, "KLineChart.html"))
示例#18
0
def signal_overview(price,
                    trades=None,
                    supplements=None,
                    plot_options={},
                    f_name="1213.html"):
    figs_counts = len(supplements)
    legends_heights = (figs_counts * 5)
    left = 90 - legends_heights
    height = left / figs_counts

    sub_plots = []

    fig_size = plot_options.setdefault("fig_size", ("1000px", "600px"))

    x_data = price.index.tolist()
    y_data = price.values.tolist()

    marks = supplements.get("marks")

    with_marks = True if marks is not None else False

    if with_marks:
        _ = pd.Series(index=price.index, data=np.arange(len(price)))

        marks_data = [
            opts.MarkPointItem(coord=[(x_data[int(l)]), (y_data[int(l)])],
                               itemstyle_opts=opts.ItemStyleOpts(
                                   color=plot_options.setdefault(
                                       v[0], colors[i]),
                                   opacity=0.6),
                               symbol_size=20,
                               symbol="pin")
            for i, v in enumerate(marks.items())
            for l in _.reindex(v[1]).dropna().values.tolist()
        ]
    else:
        marks_data = []
    with_trades = True if isinstance(trades, pd.Series) else False

    if with_trades:
        e_loc = [
            price.index.get_loc(i)
            for i in trades.index.get_level_values(0).unique()
        ]
        ex_loc = [
            price.index.get_loc(i)
            for i in trades.index.get_level_values(1).unique()
        ]
        pairs_loc = list(zip(e_loc, ex_loc))
        (pairs_loc)
        _b = [{"gt": p[0], "lte": p[1], "color": "#CD6839"} for p in pairs_loc]
        _c = [{
            "gt": pairs_loc[i][-1],
            "lte": p[0],
            "color": "#4A708B"
        } for i, p in enumerate(pairs_loc[1:])]
        _a = [{
            "lte": pairs_loc[0][0],
            "color": "#4A708B"
        }, {
            "gt": pairs_loc[-1][-1],
            "color": colors[0]
        }]
        pieces = _a + _b + _c
    else:
        pieces = []

    ds = np.unique(price.index.date)

    decor_ = price.groupby(
        price.index.date).apply(lambda x: [x.index[0], x.index[-1]]).loc[[
            l[1] for l in list(filter(lambda x: x[0] % 2 == 0, enumerate(ds)))
        ]]
    data_zoom_axis = np.arange(figs_counts).astype(int).tolist()

    line = (Line(
        init_opts=opts.InitOpts(width=fig_size[0], height=fig_size[1])
    ).add_xaxis(xaxis_data=x_data).add_yaxis(
        series_name="价格",
        y_axis=y_data,
        yaxis_index=0,
        is_smooth=True,
        is_symbol_show=False,
        is_hover_animation=False,
        linestyle_opts=opts.LineStyleOpts(width=2),
        markpoint_opts=opts.MarkPointOpts(data=marks_data, ),
    ).set_global_opts(
        title_opts=opts.TitleOpts(title="价格",
                                  pos_left='center',
                                  pos_top=str(figs_counts * 5) + "%"),
        toolbox_opts=opts.ToolboxOpts(is_show=True),
        tooltip_opts=opts.TooltipOpts(
            trigger="axis",
            axis_pointer_type="cross",
            border_width=1,
        ),
        legend_opts=opts.LegendOpts(pos_left="left"),
        axispointer_opts=opts.AxisPointerOpts(is_show=True,
                                              link=[{
                                                  "xAxisIndex": "all"
                                              }]),
        datazoom_opts=[
            opts.DataZoomOpts(is_show=True,
                              is_realtime=True,
                              xaxis_index=data_zoom_axis,
                              pos_top="5%",
                              range_start=0,
                              range_end=100,
                              orient="horizontal",
                              type_="inside"),
            opts.DataZoomOpts(type_="slider",
                              xaxis_index=data_zoom_axis,
                              pos_bottom="bottom"),
        ],
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            axistick_opts=opts.AxisTickOpts(is_inside=False),
            axispointer_opts=opts.AxisPointerOpts(is_show=True),
            axisline_opts=opts.AxisLineOpts(symbol='none'),
            splitline_opts=opts.SplitLineOpts(is_show=True)),
        xaxis_opts=opts.AxisOpts(is_show=False, ),
        visualmap_opts=opts.VisualMapOpts(
            is_show=False,
            is_piecewise=with_trades,
            dimension=0,
            pieces=pieces,
        ),
    ).set_series_opts(markarea_opts=opts.MarkAreaOpts(data=[
        opts.MarkAreaItem(
            name="",
            x=(d[0], d[1]),
            itemstyle_opts=opts.ItemStyleOpts(color="#A1A9AF", opacity=0.2),
        ) for d in decor_
    ])))

    sub_plots.append(line)

    if with_marks:
        _ = supplements.pop("marks")

    if len(supplements) > 0:

        last_pic = list(supplements.keys())[-1]

        for i, s_1 in enumerate(supplements.items()):

            k, v = s_1[0], s_1[1]
            print(k)
            ls = Line(
                init_opts=opts.InitOpts(width=fig_size[0], height=fig_size[1]))
            ls = ls.add_xaxis(xaxis_data=price.index.tolist())
            for j, s_2 in enumerate(v.items()):
                n, l = s_2[0], s_2[1]
                print(n)
                num = i * len(s_1) + j
                ls.add_yaxis(
                    series_name=n,
                    y_axis=l.tolist(),
                    yaxis_index=len(sub_plots),
                    linestyle_opts=opts.LineStyleOpts(
                        width=2, color=plot_options.setdefault(n,
                                                               colors[num])),
                    label_opts=opts.LabelOpts(is_show=False),
                )
            s = legends_heights + height * len(sub_plots)
            ls = ls.set_global_opts(
                title_opts=opts.TitleOpts(title=k,
                                          pos_left='center',
                                          pos_top=str(s) + "%"),
                legend_opts=opts.LegendOpts(pos_left="left",
                                            pos_top=str(len(sub_plots) * 5) +
                                            "%"),
                yaxis_opts=opts.AxisOpts(
                    is_scale=True,
                    axistick_opts=opts.AxisTickOpts(is_inside=False),
                    axispointer_opts=opts.AxisPointerOpts(is_show=True),
                    axisline_opts=opts.AxisLineOpts(symbol='none'),
                    splitline_opts=opts.SplitLineOpts(is_show=True)),
                xaxis_opts=opts.AxisOpts(is_show=(k == last_pic), ),
            ).set_series_opts(markarea_opts=opts.MarkAreaOpts(
                data=[
                    opts.MarkAreaItem(
                        name="",
                        x=(d[0], d[1]),
                        itemstyle_opts=opts.ItemStyleOpts(color="#A1A9AF",
                                                          opacity=0.2),
                    ) for d in decor_
                ],
                is_silent=False,
            ))
            sub_plots.append(ls)

    pos = [
        i + "%" for i in (height * np.arange(len(sub_plots)) +
                          legends_heights + 4.3).astype(str)
    ]

    g = (Grid(init_opts=opts.InitOpts(width=fig_size[0], height=fig_size[1])))
    for i, v in enumerate(sub_plots):
        g.add(
            chart=v,
            grid_opts=opts.GridOpts(pos_left=50,
                                    pos_right=50,
                                    pos_top=pos[i],
                                    height=str(height - 5) + "%"),
        )
    g.render(f_name)
示例#19
0
def line(delivery_dates, df):
    # line the vix
    FLINE_OPT = opts.LineStyleOpts(opacity=1, width=1.5)
    OLINE_OPT = opts.LineStyleOpts(opacity=0.9, width=1.2, type_='dashed')
    df['delivery'] = [10 + 5 * (idx in delivery_dates) for idx in df.index]
    warning_areas = get_warning_areas(df)
    # there is a bug in pyecharts, the colors are reversed
    # line.colors = ['crimson', 'gold', 'green', 'fuchsia', 'orchid', 'plum']
    line = (
        Line().add_xaxis(xaxis_data=df.index).add_yaxis(
            "vix",
            df[0],
            is_symbol_show=False,
            areastyle_opts=opts.AreaStyleOpts(opacity=0.2),
            linestyle_opts=FLINE_OPT,
            color='powderblue',
            markline_opts=opts.MarkLineOpts(data=[
                opts.MarkLineItem(type_="min", name="ivl"),
                opts.MarkLineItem(type_="max", name="ivh"),
            ])).add_yaxis('gvz',
                          df['gvz'],
                          is_symbol_show=False,
                          linestyle_opts=FLINE_OPT,
                          color='olive',
                          markline_opts=opts.MarkLineOpts(data=[
                              opts.MarkLineItem(type_="min", name="ivl"),
                              opts.MarkLineItem(type_="max", name="ivh"),
                          ])).add_yaxis(
                              'ovx',
                              df['ovx'],
                              is_symbol_show=False,
                              linestyle_opts=FLINE_OPT,
                              color='tan',
                              # is_selected = False,
                              markline_opts=opts.MarkLineOpts(data=[
                                  opts.MarkLineItem(type_="min", name="ivl"),
                                  opts.MarkLineItem(type_="max", name="ivh"),
                              ])).add_yaxis(
                                  "1",
                                  df[1],
                                  is_symbol_show=False,
                                  color='plum',
                                  linestyle_opts=OLINE_OPT).add_yaxis(
                                      "2",
                                      df[2],
                                      is_symbol_show=False,
                                      color='orchid',
                                      linestyle_opts=OLINE_OPT,
                                      is_selected=False).add_yaxis(
                                          "3",
                                          df[3],
                                          is_symbol_show=False,
                                          color='fuchsia',
                                          linestyle_opts=OLINE_OPT).add_yaxis(
                                              "4",
                                              df[4],
                                              is_symbol_show=False,
                                              color='green',
                                              linestyle_opts=OLINE_OPT,
                                              is_selected=False).add_yaxis(
                                                  "5",
                                                  df[5],
                                                  is_symbol_show=False,
                                                  color='gold',
                                                  linestyle_opts=OLINE_OPT)
        # add delivery date mark, not a good idea, but worked.
        .add_yaxis("delivery",
                   df['delivery'],
                   is_symbol_show=False,
                   color='crimson',
                   is_step=True).set_series_opts(
                       label_opts=opts.LabelOpts(is_show=False),
                       markarea_opts=opts.MarkAreaOpts(
                           is_silent=True,
                           data=[
                               opts.MarkAreaItem(name="warn", x=(xs, xe))
                               for xs, xe in warning_areas
                           ],
                           itemstyle_opts=opts.ItemStyleOpts(
                               color='#FFA54F10'))).set_global_opts(
                                   title_opts=opts.TitleOpts(title="vix",
                                                             pos_left="0"),
                                   xaxis_opts=opts.AxisOpts(
                                       type_="category",
                                       is_scale=True,
                                       boundary_gap=False,
                                       axisline_opts=opts.AxisLineOpts(
                                           is_on_zero=False),
                                       splitline_opts=opts.SplitLineOpts(
                                           is_show=False),
                                       split_number=20,
                                       min_="dataMin",
                                       max_="dataMax",
                                   ),
                                   yaxis_opts=opts.AxisOpts(
                                       is_scale=True,
                                       splitline_opts=opts.SplitLineOpts(
                                           is_show=True)),
                                   tooltip_opts=opts.TooltipOpts(
                                       trigger="axis",
                                       axis_pointer_type="line"),
                                   datazoom_opts=opts.DataZoomOpts(
                                       type_="slider",
                                       range_start=50,
                                       range_end=100),
                               ))
    return line
示例#20
0
    def draw_chart(cls, data):
        kline = (
            Kline().add_xaxis(xaxis_data=data["times"]).add_yaxis(
                series_name="",
                y_axis=data["datas"],
                itemstyle_opts=opts.ItemStyleOpts(
                    color="#ef232a",
                    color0="#14b143",
                    border_color="#ef232a",
                    border_color0="#14b143",
                ),
                markpoint_opts=opts.MarkPointOpts(data=[
                    opts.MarkPointItem(type_="max", name="最大值"),
                    opts.MarkPointItem(type_="min", name="最小值"),
                ]),
                markline_opts=opts.MarkLineOpts(
                    label_opts=opts.LabelOpts(position="middle",
                                              color="blue",
                                              font_size=15),
                    data=cls.split_data_part(data),
                    symbol=["circle", "none"],
                ),
            ).set_series_opts(markarea_opts=opts.MarkAreaOpts(
                is_silent=True, data=cls.split_data_part(data))).
            set_global_opts(
                title_opts=opts.TitleOpts(title="K线周期图表", pos_left="0"),
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    is_scale=True,
                    boundary_gap=False,
                    axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False),
                    split_number=20,
                    min_="dataMin",
                    max_="dataMax",
                ),
                yaxis_opts=opts.AxisOpts(
                    is_scale=True,
                    splitline_opts=opts.SplitLineOpts(is_show=True)),
                tooltip_opts=opts.TooltipOpts(trigger="axis",
                                              axis_pointer_type="line"),
                datazoom_opts=[
                    opts.DataZoomOpts(is_show=False,
                                      type_="inside",
                                      xaxis_index=[0,
                                                   0],
                                      range_end=100),
                    opts.DataZoomOpts(is_show=True,
                                      xaxis_index=[0,
                                                   1],
                                      pos_top="97%",
                                      range_end=100),
                    opts.DataZoomOpts(is_show=False,
                                      xaxis_index=[0,
                                                   2],
                                      range_end=100),
                    opts.DataZoomOpts(is_show=False,
                                      xaxis_index=[0,
                                                   3],
                                      range_end=100),
                ],
                # 三个图的 axis 连在一块
                # axispointer_opts=opts.AxisPointerOpts(
                #     is_show=True,
                #     link=[{"xAxisIndex": "all"}],
                #     label=opts.LabelOpts(background_color="#777"),
                # ),
            ))

        kline_line = (
            Line().add_xaxis(xaxis_data=data["times"])
            # # EMA10
            # .add_yaxis(
            #     series_name="EMA10",
            #     y_axis=data["ema10"],
            #     xaxis_index=2,
            #     yaxis_index=2,
            #     label_opts=opts.LabelOpts(is_show=False),
            # )

            # EMA144
            # .add_yaxis(
            #     series_name="EMA144",
            #     y_axis=data["ema144"],
            #     xaxis_index=2,
            #     yaxis_index=2,
            #     label_opts=opts.LabelOpts(is_show=False),
            # )
            # boll_median
            .add_yaxis(
                series_name="median",
                y_axis=data["boll_median"],
                xaxis_index=2,
                yaxis_index=2,
                label_opts=opts.LabelOpts(is_show=False),
            )
            # boll_upper
            .add_yaxis(
                series_name="upper",
                y_axis=data["boll_upper"],
                xaxis_index=2,
                yaxis_index=2,
                label_opts=opts.LabelOpts(is_show=False),
            )
            # boll_lower
            .add_yaxis(
                series_name="lower",
                y_axis=data["boll_lower"],
                xaxis_index=2,
                yaxis_index=2,
                label_opts=opts.LabelOpts(is_show=False),
            ).set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    grid_index=1,
                    axislabel_opts=opts.LabelOpts(is_show=False),
                ),
                yaxis_opts=opts.AxisOpts(
                    grid_index=1,
                    split_number=3,
                    axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                    axistick_opts=opts.AxisTickOpts(is_show=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False),
                    axislabel_opts=opts.LabelOpts(is_show=True),
                ),
            ))
        # Overlap Kline + Line
        overlap_kline_line = kline.overlap(kline_line)

        # Bar-1
        bar_1 = (
            Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(
                series_name="Volumn",
                yaxis_data=data["vols"],
                xaxis_index=1,
                yaxis_index=1,
                label_opts=opts.LabelOpts(is_show=False),
                # 根据 echarts demo 的原版是这么写的
                # itemstyle_opts=opts.ItemStyleOpts(
                #     color=JsCode("""
                #     function(params) {
                #         var colorList;
                #         if (data.datas[params.dataIndex][1]>data.datas[params.dataIndex][0]) {
                #           colorList = '#ef232a';
                #         } else {
                #           colorList = '#14b143';
                #         }
                #         return colorList;
                #     }
                #     """)
                # )
                # 改进后在 grid 中 add_js_funcs 后变成如下
                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),
            ))

        # Bar-2 (Overlap Bar + Line)
        bar_2 = (Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(
            series_name="MACD",
            yaxis_data=data["macds"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
                            function(params) {
                                var colorList;
                                if (params.data >= 0) {
                                  colorList = '#ef232a';
                                } else {
                                  colorList = '#14b143';
                                }
                                return colorList;
                            }
                            """)),
        ).set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=2,
                split_number=4,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        ))

        line_2 = (Line().add_xaxis(xaxis_data=data["times"]).add_yaxis(
            series_name="DIF",
            y_axis=data["difs"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="DEA",
            y_axis=data["deas"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False)))

        rsi_line = (Line().add_xaxis(xaxis_data=data["times"]).add_yaxis(
            series_name="rsi6",
            y_axis=data["rsi6"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="rsi12",
            y_axis=data["rsi12"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).add_yaxis(
            series_name="rsi24",
            y_axis=data["rsi24"],
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False)))

        # MACD
        overlap_bar_line = bar_2.overlap(line_2)

        # 最后的 Grid
        grid_chart = Grid(
            init_opts=opts.InitOpts(width="1400px", height="800px"))

        # 这个是为了把 data.datas 这个数据写入到 html 中,还没想到怎么跨 series 传值
        # demo 中的代码也是用全局变量传的
        grid_chart.add_js_funcs("var barData = {}".format(data["datas"]))

        # K线图和 MA5 的折线图
        grid_chart.add(
            overlap_kline_line,
            grid_opts=opts.GridOpts(pos_left="4%",
                                    pos_right="1%",
                                    height="45%"),
        )
        # Volumn 柱状图
        grid_chart.add(
            bar_1,
            grid_opts=opts.GridOpts(pos_left="4%",
                                    pos_right="1%",
                                    pos_top="56%",
                                    height="10%"),
        )
        # MACD DIFS DEAS
        grid_chart.add(
            overlap_bar_line,
            grid_opts=opts.GridOpts(pos_left="4%",
                                    pos_right="1%",
                                    pos_top="68%",
                                    height="14%"),
        )
        # rsi6
        grid_chart.add(
            rsi_line,
            grid_opts=opts.GridOpts(pos_left="4%",
                                    pos_right="1%",
                                    pos_top="84%",
                                    height="10%"),
        )
        return grid_chart.render_embed()
示例#21
0
def draw(df, file_png="test.png"):
    x = df.dt.to_list()
    kline = (
        Kline()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="",
            y_axis=df[['open', 'close', 'low', 'high']].values.tolist(),
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ef232a",
                color0="#14b143",
                border_color="#ef232a",
                border_color0="#14b143",
            ),
        )
            .set_series_opts(
            markarea_opts=opts.MarkAreaOpts(is_silent=True)
        )
            .set_global_opts(
            title_opts=opts.TitleOpts(title="K线周期图表", pos_left="0"),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                is_scale=True, splitline_opts=opts.SplitLineOpts(is_show=True),
                axislabel_opts=opts.LabelOpts(is_show=True, position="inside")
            ),
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False, type_="inside", xaxis_index=[0, 0], range_end=100
                ),
                opts.DataZoomOpts(
                    is_show=True, xaxis_index=[0, 1], pos_top="97%", range_end=100
                ),
                opts.DataZoomOpts(is_show=False, xaxis_index=[0, 2], range_end=100),
            ],
            # 三个图的 axis 连在一块
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{"xAxisIndex": "all"}],
                label=opts.LabelOpts(background_color="#777"),
            ),
        )
    )

    kline_line = (
        Line()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="笔",
            y_axis=df.bi.tolist(),
            is_smooth=False,
            is_connect_nones=True,
            symbol='diamond',
            symbol_size=8,
            linestyle_opts=opts.LineStyleOpts(opacity=1, type_='dotted', width=1.5),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="线段",
            y_axis=df.xd.tolist(),
            is_smooth=False,
            is_connect_nones=True,
            symbol='triangle',
            symbol_size=12,
            linestyle_opts=opts.LineStyleOpts(opacity=1, type_='solid', width=1.5),
            label_opts=opts.LabelOpts(is_show=True, position='right'),
        )
            .set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                split_number=3,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True, position="inside"),
            ),
        )
    )
    # Overlap Kline + Line
    overlap_kline_line = kline.overlap(kline_line)

    df1 = df[df['基准价格'] > 0]
    c = (
        Scatter()
            .add_xaxis(df1['出现时间'].to_list())
            .add_yaxis(
            "买卖点",
            df1['基准价格'].to_list(),
            label_opts=opts.LabelOpts(
                is_show=True,
                position="left",
                formatter=JsCode(
                    "function(params){return bsName[params.dataIndex][0];}"
                )
            ),
        ))
    overlap_kline_line = overlap_kline_line.overlap(c)

    # draw volume
    bar_1 = (
        Bar()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="Volumn",
            yaxis_data=df.vol.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),
            ),
            yaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(is_show=True, position='inside')
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

    # Bar-2 (Overlap Bar + Line)
    bar_2 = (
        Bar()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="MACD",
            yaxis_data=df.macd.tolist(),
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(
                color=JsCode(
                    """
                        function(params) {
                            var colorList;
                            if (params.data >= 0) {
                              colorList = '#ef232a';
                            } else {
                              colorList = '#14b143';
                            }
                            return colorList;
                        }
                        """
                )
            ),
        )
            .set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=2,
                split_number=4,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True, position="inside"),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

    line_2 = (
        Line()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="DIF",
            y_axis=df['diff'].tolist(),
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="DEA",
            y_axis=df['dea'].tolist(),
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        )
            .set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
    )

    # draw MACD
    overlap_bar_line = bar_2.overlap(line_2)

    # 最后的 Grid
    grid_chart = Grid(init_opts=opts.InitOpts(width="1400px", height="680px"))
    grid_chart.add_js_funcs("var barData = {}".format(df[['open', 'close', 'low', 'high']].values.tolist()))
    grid_chart.add_js_funcs("var bsName = {}".format(df1[["操作提示", "基准价格"]].values.tolist()))
    grid_chart.add(
        overlap_kline_line,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", height="60%"),
    )
    grid_chart.add(
        bar_1,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="71%", height="10%"),
    )
    grid_chart.add(
        overlap_bar_line,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="82%", height="14%"),
    )
    file_html = file_png.replace(".png", '.html')
    make_snapshot(snapshot, grid_chart.render(path=file_html), file_png)
示例#22
0
def plot_kline(ka, bs=None, file_html="kline.html", width="1400px", height="680px"):
    """

    :param ka: KlineAnalyze
    :param bs: pd.DataFrame
        买卖点,包含三个字段 ["操作提示", "交易时间", "交易价格"]
    :param file_html: str
    :param width: str
    :param height: str
    :return: None
    """
    df = ka.to_df(use_macd=True, ma_params=(5, 20,))
    x = df.dt.to_list()
    title = "%s | %s 至 %s" % (ka.symbol, ka.start_dt, ka.end_dt)
    kline = (
        Kline()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="",
            y_axis=df[['open', 'close', 'low', 'high']].values.tolist(),
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ef232a",
                color0="#14b143",
                border_color="#ef232a",
                border_color0="#14b143",
            ),
        )
            .set_series_opts(
            markarea_opts=opts.MarkAreaOpts(is_silent=True)
        )
            .set_global_opts(
            title_opts=opts.TitleOpts(title=title, pos_left="0"),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                is_scale=True, splitline_opts=opts.SplitLineOpts(is_show=True),
                axislabel_opts=opts.LabelOpts(is_show=True, position="inside")
            ),
            tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="line"),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False, type_="inside", xaxis_index=[0, 0], range_end=100
                ),
                opts.DataZoomOpts(
                    is_show=True, xaxis_index=[0, 1], pos_top="96%", range_end=100
                ),
                opts.DataZoomOpts(is_show=False, xaxis_index=[0, 2], range_end=100),
            ],
            # 三个图的 axis 连在一块
            axispointer_opts=opts.AxisPointerOpts(
                is_show=True,
                link=[{"xAxisIndex": "all"}],
                label=opts.LabelOpts(background_color="#777"),
            ),
        )
    )

    kline_line = (
        Line()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="笔",
            y_axis=df.bi.tolist(),
            is_smooth=False,
            is_connect_nones=True,
            symbol='diamond',
            symbol_size=8,
            linestyle_opts=opts.LineStyleOpts(opacity=1, type_='dotted', width=2),
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="线段",
            y_axis=df.xd.tolist(),
            is_smooth=False,
            is_connect_nones=True,
            symbol='triangle',
            symbol_size=12,
            linestyle_opts=opts.LineStyleOpts(opacity=1, type_='solid', width=2),
            label_opts=opts.LabelOpts(is_show=True, position='right'),
        )
            .set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=1,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=1,
                split_number=3,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True, position="inside"),
            ),
        )
    )
    # Overlap Kline + Line
    overlap_kline_line = kline.overlap(kline_line)

    if isinstance(bs, pd.DataFrame) and len(bs) > 0:
        c = (
            Scatter()
                .add_xaxis(bs['交易时间'].to_list())
                .add_yaxis(
                "买卖点",
                bs['交易价格'].to_list(),
                label_opts=opts.LabelOpts(
                    is_show=True,
                    position="left",
                    formatter=JsCode(
                        "function(params){return bsName[params.dataIndex][0];}"
                    )
                ),
            ))
        overlap_kline_line = overlap_kline_line.overlap(c)

    # draw volume
    bar_1 = (
        Bar()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="Volumn",
            yaxis_data=df.vol.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),
            ),
            yaxis_opts=opts.AxisOpts(
                axislabel_opts=opts.LabelOpts(is_show=True, position='inside')
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

    # Bar-2 (Overlap Bar + Line)
    bar_2 = (
        Bar()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="MACD",
            yaxis_data=df.macd.tolist(),
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(
                color=JsCode(
                    """
                        function(params) {
                            var colorList;
                            if (params.data >= 0) {
                              colorList = '#ef232a';
                            } else {
                              colorList = '#14b143';
                            }
                            return colorList;
                        }
                        """
                )
            ),
        )
            .set_global_opts(
            xaxis_opts=opts.AxisOpts(
                type_="category",
                grid_index=2,
                axislabel_opts=opts.LabelOpts(is_show=False),
            ),
            yaxis_opts=opts.AxisOpts(
                grid_index=2,
                split_number=4,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                axistick_opts=opts.AxisTickOpts(is_show=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                axislabel_opts=opts.LabelOpts(is_show=True, position="inside"),
            ),
            legend_opts=opts.LegendOpts(is_show=False),
        )
    )

    line_2 = (
        Line()
            .add_xaxis(xaxis_data=x)
            .add_yaxis(
            series_name="DIF",
            y_axis=df['diff'].tolist(),
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        )
            .add_yaxis(
            series_name="DEA",
            y_axis=df['dea'].tolist(),
            xaxis_index=2,
            yaxis_index=2,
            label_opts=opts.LabelOpts(is_show=False),
        )
            .set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
    )

    # draw MACD
    overlap_bar_line = bar_2.overlap(line_2)

    # 最后的 Grid
    grid_chart = Grid(init_opts=opts.InitOpts(width=width, height=height, page_title=title))
    grid_chart.add_js_funcs("var barData = {}".format(df[['open', 'close', 'low', 'high']].values.tolist()))
    if isinstance(bs, pd.DataFrame) and len(bs) > 0:
        grid_chart.add_js_funcs("var bsName = {}".format(bs[["操作提示", "交易价格"]].values.tolist()))

    grid_chart.add(
        overlap_kline_line,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", height="60%"),
    )
    grid_chart.add(
        bar_1,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="71%", height="10%"),
    )
    grid_chart.add(
        overlap_bar_line,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="82%", height="14%"),
    )
    grid_chart.render(path=file_html)
示例#23
0
def draw_chan(stock, stock_df, kc, end_time, period):  #
    stock_df_original = stock_df[[
        'date', 'open', 'close', 'low', 'high', 'money'
    ]]
    stock_df_bi = kc.getFenBI_df()[['date', 'chan_price']]
    stock_df_xd = kc.getFenDuan_df()[['date', 'chan_price']]

    kline = (
        #         Kline({"theme": ThemeType.DARK})
        Kline().add_xaxis(
            xaxis_data=stock_df_original['date'].tolist(),
        ).add_yaxis(
            series_name=stock,
            y_axis=stock_df_original[['open', 'close', 'low',
                                      'high']].tolist(),
            itemstyle_opts=opts.ItemStyleOpts(
                color="#ec0000",
                color0="#00da3c"),  #添加用 Hex 字符串表示的红和绿两种颜色,对应着 K线涨和跌的颜色。
        ).set_global_opts(
            title_opts=opts.TitleOpts(title="缠论", ),
            xaxis_opts=opts.AxisOpts(type_="category"),
            # 分割线
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitarea_opts=opts.SplitAreaOpts(
                    is_show=True,
                    areastyle_opts=opts.AreaStyleOpts(opacity=1)),
            ),
            legend_opts=opts.LegendOpts(is_show=True),
            toolbox_opts=opts.ToolboxOpts(),
            datazoom_opts=[
                opts.DataZoomOpts(
                    is_show=False,
                    type_="inside",
                    #xaxis_index=[0, 1],
                    range_start=
                    0,  #添加两个「数据区域缩放」功能,一个看的到(用鼠标拉缩图最下面的 slider),一个看不到(用鼠标直接在图中拉缩),并且设置 xaxis_index =[0,1],表示用 K 线图(index 0)来控制柱状图(index 1)。
                    range_end=100,
                ),
                opts.DataZoomOpts(
                    is_show=True,
                    #xaxis_index=[0, 1],
                    type_="slider",
                    pos_top="90%",
                    range_start=
                    0,  #index为1和2的两幅图的数据局部伸缩跟着index0那幅图,这样就实现了用一根x轴的slider可以任意缩放三幅图的数据
                    range_end=100,
                ),
            ],
            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=3,
                is_piecewise=True,
                pieces=[
                    {
                        "value": -1,
                        "color": "#ec0000"
                    },
                    {
                        "value": 1,
                        "color": "#00da3c"
                    },
                ],
            ),  #坐标轴指示器配置和区域选择组件配置使得数据和轴可以一起联动。
            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",
            ),
        ))

    Biline = (
        Line().add_xaxis(xaxis_data=stock_df_bi['date'].tolist()).add_yaxis(
            series_name='笔',
            y_axis=stock_df_bi['chan_price'].tolist(),
            is_smooth=False,
            is_connect_nones=True,
            is_hover_animation=False,
            #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"),
            linestyle_opts=opts.LineStyleOpts(color="red",
                                              width=2,
                                              opacity=0.5),
            label_opts=opts.LabelOpts(is_show=True),
        )
        #         .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
    )

    overlap = kline.overlap(Biline)

    crp = CentralRegionProcess(kc.getFenDuan_df(), kc, isdebug=False)
    crp.define_central_region()
    stock_zs_x, stock_zs_y = crp.convert_to_graph_data()

    if (stock_df_xd is not None) and (len(stock_zs_x) != 0):
        # print('if')
        for i in range(0, len(stock_zs_x), 2):
            XD_line = (
                Line().add_xaxis(xaxis_data=stock_df_xd['date'].tolist()).
                add_yaxis(
                    series_name='段',
                    y_axis=stock_df_xd['chan_price'].tolist(),
                    is_smooth=False,
                    is_connect_nones=True,
                    is_hover_animation=False,
                    #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"),
                    linestyle_opts=opts.LineStyleOpts(color="blue",
                                                      width=2,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_series_opts(markarea_opts=opts.MarkAreaOpts(
                    is_silent=True,
                    data=[[{
                        'xAxis': stock_zs_x[i],
                        'yAxis': stock_zs_y[i]
                    }, {
                        'xAxis': stock_zs_x[i + 1],
                        'yAxis': stock_zs_y[i + 1]
                    }]]))
                #             .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
            )
    elif stock_df_xd is not None:
        # print('elif')
        XD_line = (
            Line().add_xaxis(xaxis_data=stock_df_xd['date'].tolist()).
            add_yaxis(
                series_name='段',
                y_axis=stock_df_xd['chan_price'].tolist(),
                is_smooth=False,
                is_connect_nones=True,
                is_hover_animation=False,
                #linestyle_opts=opts.LineStyleOpts(color="red",width=2, type_="dashed"),
                linestyle_opts=opts.LineStyleOpts(color="blue",
                                                  width=2,
                                                  opacity=0.5),
                label_opts=opts.LabelOpts(is_show=False),
            ))
    overlap = overlap.overlap(XD_line)
    #     MA_line = (
    #         Line()
    #         .add_xaxis(xaxis_data=stock_df_original['date'].tolist(),)
    #         .add_yaxis(
    #             series_name="MA5",
    #             y_axis= talib.SMA(stock_df['close'],timeperiod = 5).tolist(),
    #             is_smooth=True,
    #             is_hover_animation=False,
    #             linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .add_yaxis(
    #             series_name="MA10",
    #             y_axis= talib.SMA(stock_df['close'],timeperiod = 10).tolist(),
    #             is_smooth=True,
    #             is_hover_animation=False,
    #             linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .add_yaxis(
    #             series_name="MA13",
    #             y_axis= talib.SMA(stock_df['close'],timeperiod = 13).tolist(),
    #             is_smooth=True,
    #             is_hover_animation=False,
    #             linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .add_yaxis(
    #             series_name="MA34",
    #             y_axis= talib.SMA(stock_df['close'],timeperiod = 34).tolist(),
    #             is_smooth=True,
    #             is_hover_animation=False,
    #             linestyle_opts=opts.LineStyleOpts(width=1, opacity=0.5),
    #             label_opts=opts.LabelOpts(is_show=False),
    #         )
    #         .set_global_opts(xaxis_opts=opts.AxisOpts(type_="category"))
    #     )

    #     Volume_Bar = (
    #         Bar()
    #         .add_xaxis(xaxis_data=stock_df_original['date'].tolist())
    #         .add_yaxis(
    #             series_name="money",
    #             yaxis_data=stock_df_original['money'].tolist(),
    #             xaxis_index=2,
    #             yaxis_index=2,
    #             label_opts=opts.LabelOpts(is_show=False),
    #             markline_opts=opts.MarkLineOpts(
    #                 data=[opts.MarkLineItem(type_="average", name="平均值")]
    #             ),
    #             itemstyle_opts=opts.ItemStyleOpts(
    #                 color=JsCode(
    #                     """
    #                         function(params) {
    #                             var colorList;
    #                             if (params.data >= 0) {
    #                               colorList = '#ef232a';
    #                             } else {
    #                               colorList = '#14b143';
    #                             }
    #                             return colorList;
    #                         }
    #                     """
    #                 #     """
    #                 # function(params) {
    #                 #     var colorList;
    #                 #     if (barData[params.dataIndex][1] > barData[params.dataIndex][0]) {
    #                 #         colorList = '#ef232a';
    #                 #     } else {
    #                 #         colorList = '#14b143';
    #                 #     }
    #                 #     return colorList;
    #                 # }
    #                 # """
    #                 )
    #             ),
    #         )
    #             .set_global_opts(
    #             title_opts=opts.TitleOpts(
    #                 title='',
    #             ),
    #             xaxis_opts=opts.AxisOpts(
    #                 type_="category",
    #                 grid_index=2,
    #                 is_scale=True,
    #                 # axislabel_opts=opts.LabelOpts(is_show=False),
    #                 boundary_gap=False,
    #                 axisline_opts=opts.AxisLineOpts(is_on_zero=False),
    #                 axistick_opts=opts.AxisTickOpts(is_show=False),
    #                 splitline_opts=opts.SplitLineOpts(is_show=False),
    #                 axislabel_opts=opts.LabelOpts(is_show=False),
    #                 split_number=20,
    #                 min_="dataMin",
    #                 max_="dataMax",
    #             ),
    #             yaxis_opts=opts.AxisOpts(
    #                 grid_index=2,
    #                 is_scale=True,
    #                 split_number=2,
    #                 axislabel_opts=opts.LabelOpts(is_show=False),
    #                 axisline_opts=opts.AxisLineOpts(is_show=False),
    #                 axistick_opts=opts.AxisTickOpts(is_show=False),
    #                 splitarea_opts=opts.SplitAreaOpts(
    #                     is_show=True,
    #                     areastyle_opts=opts.AreaStyleOpts(opacity=1)
    #                 ),
    #             ),
    #             # xaxis_opts=opts.AxisOpts(is_scale=True),
    #             legend_opts=opts.LegendOpts(is_show=False),
    #             datazoom_opts=opts.DataZoomOpts(type_="inside"),
    #         )
    #     )
    #
    #     overlap = overlap.overlap(Volume_Bar)
    print("it's here")

    if len(stock_zs_x) != 0:
        for i in range(0, len(stock_zs_x), 2):
            zs1_line = (Line().add_xaxis(
                xaxis_data=stock_zs_x[i:i + 2], ).add_yaxis(
                    series_name="中枢",
                    y_axis=np.append(stock_zs_y[i], stock_zs_y[i]),
                    is_smooth=False,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(color="red",
                                                      width=1.5,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

            zs2_line = (Line().add_xaxis(
                xaxis_data=stock_zs_x[i:i + 2], ).add_yaxis(
                    series_name="中枢",
                    y_axis=np.append(stock_zs_y[i + 1:i + 2],
                                     stock_zs_y[i + 1:i + 2]),
                    is_smooth=False,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(color="red",
                                                      width=1.5,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

            zs3_line = (Line().add_xaxis(xaxis_data=np.append(
                stock_zs_x[i:i + 1], stock_zs_x[i:i + 1])).add_yaxis(
                    series_name="中枢",
                    y_axis=stock_zs_y[i:i + 2],
                    is_smooth=False,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(color="red",
                                                      width=1.5,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

            zs4_line = (Line().add_xaxis(xaxis_data=np.append(
                stock_zs_x[i + 1:i + 2], stock_zs_x[i + 1:i + 2])).add_yaxis(
                    series_name="中枢",
                    y_axis=stock_zs_y[i:i + 2],
                    is_smooth=False,
                    is_hover_animation=False,
                    linestyle_opts=opts.LineStyleOpts(color="red",
                                                      width=1.5,
                                                      opacity=0.5),
                    label_opts=opts.LabelOpts(is_show=False),
                ).set_global_opts(xaxis_opts=opts.AxisOpts(type_="category")))

            zs1 = zs1_line.overlap(zs2_line)
            zs2 = zs3_line.overlap(zs4_line)
            zs = zs1.overlap(zs2)
            overlap.overlap(zs)

    overlap.render("diagram/{0}@{1}#{2}.html".format(stock[0:6],
                                                     end_time[0:10], period))
    print("it's done")
示例#24
0
def draw_chart():
    kline = (Kline().add_xaxis(xaxis_data=data["times"]).add_yaxis(
        series_name="",
        y_axis=data["datas"],
        itemstyle_opts=opts.ItemStyleOpts(color="#ef232a",
                                          color0="#14b143",
                                          border_color="#ef232a",
                                          border_color0="#14b143"),
        markpoint_opts=opts.MarkPointOpts(data=[
            opts.MarkPointItem(type_="max", name="最大值"),
            opts.MarkPointItem(type_="min", name="最小值"),
        ]),
        markline_opts=opts.MarkLineOpts(
            label_opts=opts.LabelOpts(position="middle",
                                      color="blue",
                                      font_size=15),
            data=split_data_part(),
            symbol=["circle", "none"],
        ),
    ).set_series_opts(markarea_opts=opts.MarkAreaOpts(
        is_silent=True, data=split_data_part())).set_global_opts(
            title_opts=opts.TitleOpts(title="K线周期图表", pos_left="0"),
            xaxis_opts=opts.AxisOpts(
                type_="category",
                is_scale=True,
                boundary_gap=False,
                axisline_opts=opts.AxisLineOpts(is_on_zero=False),
                splitline_opts=opts.SplitLineOpts(is_show=False),
                split_number=20,
                min_="dataMin",
                max_="dataMax",
            ),
            yaxis_opts=opts.AxisOpts(
                is_scale=True,
                splitline_opts=opts.SplitLineOpts(is_show=True)),
            tooltip_opts=opts.TooltipOpts(trigger="axis",
                                          axis_pointer_type="line"),
            datazoom_opts=[
                opts.DataZoomOpts(is_show=True,
                                  type_="inside",
                                  xaxis_index=[0, 0],
                                  range_end=100),
                opts.DataZoomOpts(is_show=True,
                                  xaxis_index=[0, 1],
                                  pos_top="97%",
                                  range_end=100),
                opts.DataZoomOpts(is_show=False,
                                  xaxis_index=[0, 2],
                                  range_end=100),
            ],
        ))
    kline_line = (Line().add_xaxis(xaxis_data=data["times"]).add_yaxis(
        series_name="MA5",
        y_axis=calculate_ma(day_count=5),
        is_smooth=True,
        linestyle_opts=opts.LineStyleOpts(opacity=0.5),
        label_opts=opts.LabelOpts(is_show=False),
    ).set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            split_number=3,
            axisline_opts=opts.AxisLineOpts(is_on_zero=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=True),
        ),
    ))

    overlap_kline_line = kline.overlap(kline_line)

    bar_1 = (Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(
        series_name="Volumn",
        y_axis=data["vols"],
        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",
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    ))
    bar_2 = (Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(
        series_name="MACD",
        y_axis=data["macds"],
        label_opts=opts.LabelOpts(is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""
						function(params){
							var colorList;
							if(params.data >= 0){
								colorList = '#ef232a';
							}else{
								colorList = '#14b143';
							}
							return colorList;
						}
					""")),
    ).set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            split_number=4,
            axisline_opts=opts.AxisLineOpts(is_on_zero=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=True),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    ))
    line_2 = (Line().add_xaxis(xaxis_data=data["times"]).add_yaxis(
        series_name="DIF",
        y_axis=data["difs"],
        label_opts=opts.LabelOpts(is_show=False),
    ).set_global_opts(legend_opts=opts.LegendOpts(is_show=False)))
    overlap_bar_line = bar_2.overlap(line_2)

    grid_chart = Grid(init_opts=opts.InitOpts(
        width="1400px", height="800px", theme=ThemeType.ESSOS))
    grid_chart.add_js_funcs("var barData={}".format(data["datas"]))
    grid_chart.add(
        overlap_kline_line,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", height="60%"),
    )

    grid_chart.add(
        bar_1,
        grid_opts=opts.GridOpts(pos_left="3%",
                                pos_right="1%",
                                pos_top="71%",
                                height="10%"),
    )

    grid_chart.add(overlap_bar_line,
                   grid_opts=opts.GridOpts(pos_left="3%",
                                           pos_right="1%",
                                           pos_top="82%",
                                           height="14%"))

    grid_chart.render("professional_kline_chart.html")
示例#25
0
def grid_vertical(xaxis, taixin_yaxis, yali_yaxis, td_yaxis):
    max_taixin = max(taixin_yaxis) + 20
    min_taixin = min(taixin_yaxis) - 60
    if min_taixin <= 0:
        min_taixin = 0

    line1 = (Line().add_xaxis(xaxis).add_yaxis(
        "胎心率",
        taixin_yaxis,
        label_opts=opts.LabelOpts(is_show=False),
        is_symbol_show=False,
        markline_opts=opts.MarkLineOpts(
            data=[opts.MarkLineItem(type_="average", name="胎心率平均值")]),
        markpoint_opts=opts.MarkPointOpts(data=[
            opts.MarkPointItem(type_="max", name="胎心率最大值"),
        ]),
    ).add_yaxis("下限", [120, 120],
                markline_opts=opts.MarkLineOpts(
                    data=[opts.MarkLineItem(type_="average")])).add_yaxis(
                        "上限", [160, 160],
                        markline_opts=opts.MarkLineOpts(
                            data=[opts.MarkLineItem(type_="average")])).
             add_yaxis(
                 "胎动",
                 td_yaxis,
                 label_opts=opts.LabelOpts(is_show=False),
                 markpoint_opts=opts.MarkPointOpts(data=[
                     opts.MarkPointItem(type_="None", name="胎动"),
                 ]),
             ).set_global_opts(
                 xaxis_opts=opts.AxisOpts(
                     type_='value',
                     interval=120,
                     splitline_opts=opts.SplitLineOpts(is_show=True),
                     axislabel_opts=opts.LabelOpts(formatter="{value}秒"),
                 ),
                 yaxis_opts=opts.AxisOpts(
                     type_='value',
                     interval=10,
                     min_=min_taixin,
                     max_=max_taixin,
                     splitline_opts=opts.SplitLineOpts(is_show=True)),
                 title_opts=opts.TitleOpts(title="eFM-60超声多普勒胎儿监护仪监测曲线图"),
                 tooltip_opts=opts.TooltipOpts(trigger="axis"),
                 toolbox_opts=opts.ToolboxOpts(is_show=True, ),
             ).set_series_opts(
                 label_opts=opts.LabelOpts(is_show=False),
                 markarea_opts=opts.MarkAreaOpts(data=[
                     opts.MarkAreaItem(name="合理区间",
                                       y=(120, 160),
                                       itemstyle_opts=opts.ItemStyleOpts(
                                           color="#A0D897", opacity=0.2)),
                 ])))
    line2 = (
        Line().add_xaxis(xaxis).add_yaxis(
            "宫内压力",
            yali_yaxis,
            label_opts=opts.LabelOpts(is_show=False),
            is_symbol_show=False).set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    type_='value',
                    interval=120,
                    splitline_opts=opts.SplitLineOpts(is_show=True),
                    axislabel_opts=opts.LabelOpts(formatter="{value}秒"),
                ),
                yaxis_opts=opts.AxisOpts(
                    type_='value',
                    interval=10,
                    min_=0,
                    max_=100,
                    splitline_opts=opts.SplitLineOpts(is_show=True)),
                # title_opts=opts.TitleOpts(title="")
                tooltip_opts=opts.TooltipOpts(trigger="axis"),
                toolbox_opts=opts.ToolboxOpts(is_show=True),
                legend_opts=opts.LegendOpts(pos_top="50%"),
            ).set_series_opts(label_opts=opts.LabelOpts(is_show=False), ))

    # 把上面生成的两个图放进grid中并通过pos_top,pos_bottom, pos_left, pos_right设置其位置
    grid = (Grid(init_opts=opts.InitOpts(width="3000px", height="600px")).add(
        line2, grid_opts=opts.GridOpts(pos_top='60%', pos_left='2%')).add(
            line1, grid_opts=opts.GridOpts(pos_bottom="60%", pos_left='2%')))
    # 生成到本地网页形式打开,也可自己设置保存成png图片,因为网页的使用更方便,自己按情况使用
    grid.render('1.html')
    # 输出保存为图片
    make_snapshot(snapshot, grid.render(), "1.png")
    print(">>图表生成完毕!")
示例#26
0
def kline_pro(kline: List[dict],
              fx: List[dict] = None,
              xd=None,
              bs: List[dict] = None,
              title: str = "缠中说禅K线分析",
              width: str = "1400px",
              height: str = '580px') -> Grid:
    """绘制缠中说禅K线分析结果

    :param kline: K线
    :param fx: 分型识别结果
    :param bi: 笔识别结果
    :param xd: 线段识别结果
    :param zs: 中枢
    :param bs: 买卖点
    :param title: 图表标题
    :param width: 图表宽度
    :param height: 图表高度
    :return: 用Grid组合好的图表
    """
    # 配置项设置
    # ------------------------------------------------------------------------------------------------------------------
    bg_color = "#1f212d"  # 背景
    up_color = "#F9293E"
    down_color = "#00aa3b"

    init_opts = opts.InitOpts(bg_color=bg_color,
                              width=width,
                              height=height,
                              animation_opts=opts.AnimationOpts(False))
    title_opts = opts.TitleOpts(
        title=title,
        pos_top="1%",
        title_textstyle_opts=opts.TextStyleOpts(color=up_color, font_size=20),
        subtitle_textstyle_opts=opts.TextStyleOpts(color=down_color,
                                                   font_size=12))

    label_not_show_opts = opts.LabelOpts(is_show=False)
    legend_not_show_opts = opts.LegendOpts(is_show=False)
    red_item_style = opts.ItemStyleOpts(color=up_color)
    green_item_style = opts.ItemStyleOpts(color=down_color)
    k_style_opts = opts.ItemStyleOpts(color=up_color,
                                      color0=down_color,
                                      border_color=up_color,
                                      border_color0=down_color,
                                      opacity=0.8)

    legend_opts = opts.LegendOpts(is_show=True,
                                  pos_top="1%",
                                  pos_left="30%",
                                  item_width=14,
                                  item_height=8,
                                  textstyle_opts=opts.TextStyleOpts(
                                      font_size=12, color="#0e99e2"))
    brush_opts = opts.BrushOpts(tool_box=["rect", "polygon", "keep", "clear"],
                                x_axis_index="all",
                                brush_link="all",
                                out_of_brush={"colorAlpha": 0.1},
                                brush_type="lineX")

    axis_pointer_opts = opts.AxisPointerOpts(is_show=True,
                                             link=[{
                                                 "xAxisIndex": "all"
                                             }])

    range_start = int(100 - 216 / len(kline) * 100)
    dz_inside = opts.DataZoomOpts(False,
                                  "inside",
                                  xaxis_index=[0, 1, 2],
                                  range_start=range_start,
                                  range_end=100)
    dz_slider = opts.DataZoomOpts(True,
                                  "slider",
                                  xaxis_index=[0, 1, 2],
                                  pos_top="96%",
                                  pos_bottom="0%",
                                  range_start=range_start,
                                  range_end=100)

    yaxis_opts = opts.AxisOpts(is_scale=True,
                               axislabel_opts=opts.LabelOpts(
                                   color="#c7c7c7",
                                   font_size=8,
                                   position="inside"))

    grid0_xaxis_opts = opts.AxisOpts(
        type_="category",
        grid_index=0,
        axislabel_opts=label_not_show_opts,
        split_number=20,
        min_="dataMin",
        max_="dataMax",
        is_scale=True,
        boundary_gap=False,
        axisline_opts=opts.AxisLineOpts(is_on_zero=False))

    tool_tip_opts = opts.TooltipOpts(
        trigger="axis",
        axis_pointer_type="cross",
        background_color="rgba(245, 245, 245, 0.8)",
        border_width=1,
        border_color="#ccc",
        position=JsCode("""
                    function (pos, params, el, elRect, size) {
    					var obj = {top: 10};
    					obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
    					return obj;
    				}
                    """),
        textstyle_opts=opts.TextStyleOpts(color="#000"),
    )

    # 数据预处理
    # ------------------------------------------------------------------------------------------------------------------
    # dts = [x.get('dt', x['date']) for x in kline]
    try:
        dts = [x['date'] for x in kline]
    except:
        dts = [x['dt'] for x in kline]
    # k_data = [[x['open'], x['close'], x['low'], x['high']] for x in kline]
    k_data = [
        opts.CandleStickItem(
            name=i, value=[x['open'], x['close'], x['low'], x['high']])
        for i, x in enumerate(kline)
    ]

    vol = []
    for i, row in enumerate(kline):
        item_style = red_item_style if row['close'] > row[
            'open'] else green_item_style
        bar = opts.BarItem(name=i,
                           value=row['volume'],
                           itemstyle_opts=item_style,
                           label_opts=label_not_show_opts)
        vol.append(bar)

    close = np.array([x['close'] for x in kline], dtype=np.double)
    diff, dea, macd = MACD(close)

    ma5 = SMA(close, timeperiod=5)
    ma34 = SMA(close, timeperiod=34)
    ma55 = SMA(close, timeperiod=55)
    ma233 = SMA(close, timeperiod=233)

    macd_bar = []
    for i, v in enumerate(macd.tolist()):
        item_style = red_item_style if v > 0 else green_item_style
        bar = opts.BarItem(name=i,
                           value=round(v, 4),
                           itemstyle_opts=item_style,
                           label_opts=label_not_show_opts)
        macd_bar.append(bar)

    diff = diff.round(4)
    dea = dea.round(4)

    # K 线主图
    # ------------------------------------------------------------------------------------------------------------------
    chart_k = Kline()
    chart_k.add_xaxis(xaxis_data=dts)
    chart_k.add_yaxis(series_name="Kline",
                      y_axis=k_data,
                      itemstyle_opts=k_style_opts)

    chart_k.set_global_opts(legend_opts=legend_opts,
                            datazoom_opts=[dz_inside, dz_slider],
                            yaxis_opts=yaxis_opts,
                            tooltip_opts=tool_tip_opts,
                            axispointer_opts=axis_pointer_opts,
                            brush_opts=brush_opts,
                            title_opts=title_opts,
                            xaxis_opts=grid0_xaxis_opts)

    if xd:
        index = 0
        zs_colors = [
            "yellow", "white", '#f034c1', "#7944b7", "#468b58", "#c17f2f",
            "#9EA0A1"
        ]
        data = []
        temp_xd = xd
        while temp_xd:
            zs_color = zs_colors[index % len(zs_colors)]
            data = data + [
                opts.MarkAreaItem(
                    name='XD{}'.format(index),
                    x=(x['xd_list'][0]['date'], x['xd_list'][-1]['date']),
                    y=(x['ZG']['value'], x['ZD']['value']),
                    label_opts=opts.LabelOpts(color=zs_color),
                    itemstyle_opts=opts.ItemStyleOpts(
                        color=zs_color,
                        opacity=0.2,
                    )) for x in temp_xd.zs_list
            ]
            temp_xd = temp_xd.next
            index = index + 1

        chart_k.set_series_opts(
            markarea_opts=opts.MarkAreaOpts(is_silent=True, data=data))

    # 均线图
    # ------------------------------------------------------------------------------------------------------------------
    chart_ma = Line()
    chart_ma.add_xaxis(xaxis_data=dts)

    ma_keys = {"MA5": ma5, "MA34": ma34, "MA55": ma55, "MA233": ma233}
    ma_colors = ["#39afe6", "#da6ee8", "#A02128", "#00940b"]
    for i, (name, ma) in enumerate(ma_keys.items()):
        chart_ma.add_yaxis(series_name=name,
                           y_axis=ma,
                           is_smooth=True,
                           is_selected=False,
                           symbol_size=0,
                           label_opts=label_not_show_opts,
                           linestyle_opts=opts.LineStyleOpts(
                               opacity=0.8, width=1.0, color=ma_colors[i]))

    chart_ma.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                             legend_opts=legend_not_show_opts)
    chart_k = chart_k.overlap(chart_ma)

    # 缠论结果
    # ------------------------------------------------------------------------------------------------------------------
    if fx:
        try:
            fx_dts = [x['date'] for x in fx]
        except:
            fx_dts = [x['dt'] for x in fx]

        fx_val = [x['value'] for x in fx]
        chart_fx = Scatter()
        chart_fx.add_xaxis(fx_dts)
        chart_fx.add_yaxis(series_name="FX",
                           y_axis=fx_val,
                           is_selected=False,
                           symbol="circle",
                           symbol_size=6,
                           label_opts=label_not_show_opts,
                           itemstyle_opts=opts.ItemStyleOpts(
                               color="rgba(152, 147, 193, 1.0)", ))

        chart_fx.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                 legend_opts=legend_not_show_opts)
        chart_k = chart_k.overlap(chart_fx)

    if xd:
        index = 0
        xd_colors = zs_colors
        while xd:
            xd_dts = [x['date'] for x in xd]
            xd_val = [x['value'] for x in xd]

            chart_xd = Line()
            chart_xd.add_xaxis(xd_dts)

            xd_color = xd_colors[index % len(xd_colors)]
            chart_xd.add_yaxis(
                series_name="XD{}".format(index),
                y_axis=xd_val,
                is_selected=True,
                symbol="triangle",
                symbol_size=10,
                linestyle_opts=opts.LineStyleOpts(color=xd_color,
                                                  width=index + 1,
                                                  type_="solid"),
                itemstyle_opts=opts.ItemStyleOpts(color=xd_color))

            chart_xd.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                     legend_opts=legend_not_show_opts)
            chart_k = chart_k.overlap(chart_xd)
            xd = xd.next
            index = index + 1

    if bs:
        b_dts = [x['date'] for x in bs if x['bs'] == 'buy']
        if len(b_dts) > 0:
            b_val = [x['value'] for x in bs if x['bs'] == 'buy']
            chart_b = Scatter()
            chart_b.add_xaxis(b_dts)
            chart_b.add_yaxis(series_name="BUY",
                              y_axis=b_val,
                              is_selected=False,
                              symbol="arrow",
                              symbol_size=8,
                              itemstyle_opts=opts.ItemStyleOpts(
                                  color="#f31e1e", ))

            chart_b.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                    legend_opts=legend_not_show_opts)
            chart_k = chart_k.overlap(chart_b)

        s_dts = [x['date'] for x in bs if x['bs'] == 'sell']
        if len(s_dts) > 0:
            s_val = [x['value'] for x in bs if x['bs'] == 'sell']
            chart_s = Scatter()
            chart_s.add_xaxis(s_dts)
            chart_s.add_yaxis(series_name="SELL",
                              y_axis=s_val,
                              is_selected=False,
                              symbol="pin",
                              symbol_size=12,
                              itemstyle_opts=opts.ItemStyleOpts(
                                  color="#45b97d", ))

            chart_s.set_global_opts(xaxis_opts=grid0_xaxis_opts,
                                    legend_opts=legend_not_show_opts)
            chart_k = chart_k.overlap(chart_s)

    # 成交量图
    # ------------------------------------------------------------------------------------------------------------------
    chart_vol = Bar()
    chart_vol.add_xaxis(dts)
    chart_vol.add_yaxis(series_name="Volume", y_axis=vol, bar_width='60%')
    chart_vol.set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            grid_index=1,
            axislabel_opts=opts.LabelOpts(is_show=True,
                                          font_size=8,
                                          color="#9b9da9"),
        ),
        yaxis_opts=yaxis_opts,
        legend_opts=legend_not_show_opts,
    )

    # MACD图
    # ------------------------------------------------------------------------------------------------------------------
    chart_macd = Bar()
    chart_macd.add_xaxis(dts)
    chart_macd.add_yaxis(series_name="MACD", y_axis=macd_bar, bar_width='60%')
    chart_macd.set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="category",
            grid_index=2,
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            grid_index=2,
            split_number=4,
            axisline_opts=opts.AxisLineOpts(is_on_zero=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axislabel_opts=opts.LabelOpts(is_show=True, color="#c7c7c7"),
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )

    line = Line()
    line.add_xaxis(dts)
    line.add_yaxis(series_name="DIFF",
                   y_axis=diff,
                   label_opts=label_not_show_opts,
                   is_symbol_show=False,
                   linestyle_opts=opts.LineStyleOpts(opacity=0.8,
                                                     width=1.0,
                                                     color="#da6ee8"))
    line.add_yaxis(series_name="DEA",
                   y_axis=dea,
                   label_opts=label_not_show_opts,
                   is_symbol_show=False,
                   linestyle_opts=opts.LineStyleOpts(opacity=0.8,
                                                     width=1.0,
                                                     color="#39afe6"))

    chart_macd = chart_macd.overlap(line)

    grid0_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="12%",
                               height="58%")
    grid1_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="74%",
                               height="8%")
    grid2_opts = opts.GridOpts(pos_left="0%",
                               pos_right="1%",
                               pos_top="86%",
                               height="10%")

    grid_chart = Grid(init_opts)
    grid_chart.add(chart_k, grid_opts=grid0_opts)
    grid_chart.add(chart_vol, grid_opts=grid1_opts)
    grid_chart.add(chart_macd, grid_opts=grid2_opts)
    return grid_chart
示例#27
0
     oclh,
     itemstyle_opts=opts.ItemStyleOpts(
         color="#ef232a",
         color0="#14b143",
         border_color="#ef232a",
         border_color0="#14b143",
     ),
     # markpoint_opts=opts.MarkPointOpts(
     #     data=[
     #         opts.MarkPointItem(type_="max", name="最大值"),
     #         opts.MarkPointItem(type_="min", name="最小值"),
     #     ]
     # )
 )
 kline.set_series_opts(markarea_opts=opts.MarkAreaOpts(
     is_silent=True,
     data=markareadata,
     itemstyle_opts=opts.ItemStyleOpts(opacity=0.5, )))
 kline.set_global_opts(
     xaxis_opts=opts.AxisOpts(is_scale=True),
     yaxis_opts=opts.AxisOpts(
         is_scale=True,
         splitline_opts=opts.SplitLineOpts(is_show=True),
     ),
     tooltip_opts=opts.TooltipOpts(trigger="axis",
                                   axis_pointer_type="line"),
     datazoom_opts=[
         opts.DataZoomOpts(type_="inside", range_start=-100),
         opts.DataZoomOpts(pos_bottom="0%"),
     ],
     # title_opts=opts.TitleOpts(title=stock_code),
 )