首页 > 其他分享 >pyecharts 画K线记录 精细版

pyecharts 画K线记录 精细版

时间:2023-09-20 22:56:17浏览次数:43  
标签:index pyecharts 记录 df yaxis add 精细 xaxis opts

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Kline, Line, Bar, Grid, EffectScatter
from pyecharts.globals import SymbolType
from pyecharts.commons.utils import JsCode


def drawKline(df):
    # kline
    x = df.index.tolist()
    y = list(df.loc[:, ['o', 'c', 'l', 'h']].round(2).values)
    y = [i.tolist() for i in y]  # 里面的单个数组也必须转换成list
    # kline = Kline(init_opts=opts.InitOpts(width="100%", height="800px"), )
    kline = Kline()
    kline.add_xaxis(x)
    kline.add_yaxis("kline", y)
    kline.set_global_opts(
        yaxis_opts=opts.AxisOpts(is_scale=True, splitline_opts=opts.SplitLineOpts(is_show=True)),
        # tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross",is_show_content=False),
        datazoom_opts=[
            opts.DataZoomOpts(is_show=False, type_="inside", xaxis_index=[0, 0], range_end=50),
            # xaxis_index=[0, 0]设置第一幅图为内部缩放
            opts.DataZoomOpts(is_show=False, xaxis_index=[0, 1], pos_top="97%", range_end=50),
            # xaxis_index=[0, 1]连接第二幅图的axis
        ],

    )
    # line
    ma5 = df['c'].rolling(5).mean()
    ma10 = df['c'].rolling(10).mean()
    ma20 = df['c'].rolling(20).mean()
    line = Line()
    line.add_xaxis(x)
    line.add_yaxis('MA5', ma5.round(2).tolist(), is_smooth=True)
    line.add_yaxis('MA10', ma10.round(2).tolist(), is_smooth=True)
    line.add_yaxis('MA20', ma20.round(2).tolist(), is_smooth=True)
    line.set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 是否显示数据标签
    # KD PD KK PK
    es = EffectScatter()
    # KD
    v1 = df.index[df['KD'] == 1].tolist()
    v2 = df['l'].loc[v1].tolist()
    es.add_xaxis(v1)
    es.add_yaxis('KD', v2, symbol=SymbolType.ARROW)
    # PD
    v1 = df.index[df['PD'] == 1].tolist()
    v2 = df['h'].loc[v1].tolist()
    es.add_xaxis(v1)
    es.add_yaxis('PD', v2, symbol=SymbolType.ARROW, symbol_rotate=180)
    # Kk
    v1 = df.index[df['KK'] == 1].tolist()
    v2 = (df['h'].loc[v1] * 1.01).tolist()  # 向上偏移1% 防止重叠看不清
    es.add_xaxis(v1)
    es.add_yaxis('KK', v2, symbol=SymbolType.TRIANGLE, symbol_rotate=180)
    # pk
    v1 = df.index[df['PK'] == 1].tolist()
    v2 = (df['l'].loc[v1] * 0.99).tolist()  # 向下偏移1% 防止重叠看不清
    es.add_xaxis(v1)
    es.add_yaxis('PK', v2, symbol=SymbolType.TRIANGLE)
    es.set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 是否显示数据标签
    # overlap
    # kline.overlap(line)
    kline.overlap(es)
    return kline


def drawMACD(df):
    MACD = get_macd(df['c'], 12, 26, 9)

    x = df.index.tolist()
    bar_2 = Bar()
    bar_2.add_xaxis(x)
    bar_2.add_yaxis(
        series_name="MACD",
        y_axis=MACD.MACD.round(2).tolist(),
        label_opts=opts.LabelOpts(is_show=False),
        xaxis_index=1,  # 用于合并显示时排列位置,单独显示不要添加
        yaxis_index=1,  # 用于合并显示时排列位置,单独显示不要添加
        itemstyle_opts=opts.ItemStyleOpts(
            color=JsCode(
                """
                function(params) {
                    var colorList;
                    if (params.data >= 0) {
                      colorList = '#ef232a';
                    } else {
                      colorList = '#14b143';
                    }
                    return colorList;
                }
                """
            ))
    )
    bar_2.set_global_opts(
        xaxis_opts=opts.AxisOpts(
            grid_index=1,  # 用于合并显示时排列位置,单独显示不要添加
            axislabel_opts=opts.LabelOpts(is_show=False),
        ),
        yaxis_opts=opts.AxisOpts(
            grid_index=1,  # 用于合并显示时排列位置,单独显示不要添加
            split_number=4,
        ),
        legend_opts=opts.LegendOpts(is_show=False),
    )
    line_2 = Line()
    line_2.add_xaxis(x)
    line_2.add_yaxis(
        series_name="DIF",
        y_axis=MACD.DIF.round(2),
        xaxis_index=1,
        yaxis_index=2,
        label_opts=opts.LabelOpts(is_show=False),
    )
    line_2.add_yaxis(
        series_name="DEA",
        y_axis=MACD.DEA.round(2),
        xaxis_index=1,
        yaxis_index=2,
        label_opts=opts.LabelOpts(is_show=False),
    )
    line_2.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
    return bar_2.overlap(line_2)


def drawAll(df):
    df.index = df.index.strftime('%Y-%m-%d %H:%M:%S')
    kline = drawKline(df)
    MACD = drawMACD(df)

    grid_chart = Grid(init_opts=opts.InitOpts(width="100%", height="800px"))
    grid_chart.add(
        kline,
        grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", height="70%"),
    )
    grid_chart.add(
        MACD,
        grid_opts=opts.GridOpts(
            pos_left="3%", pos_right="1%", pos_top="80%", height="20%"
        )
    )
    grid_chart.render('123.html')


def get_macd(price, fast, slow, smooth):
    exp1 = price.ewm(span=fast, adjust=False).mean()
    exp2 = price.ewm(span=slow, adjust=False).mean()
    DIF = exp1 - exp2
    DEA = DIF.ewm(span=smooth, adjust=False).mean()
    MACD = (DIF - DEA) * 2

    columns1 = pd.DataFrame(DIF).rename(columns={'c': 'DIF'})
    columns2 = pd.DataFrame(DEA).rename(columns={'c': 'DEA'})
    columns3 = pd.DataFrame(MACD).rename(columns={'c': 'MACD'})
    frames = [columns1, columns2, columns3]
    df = pd.concat(frames, join='inner', axis=1)
    return df

 

标签:index,pyecharts,记录,df,yaxis,add,精细,xaxis,opts
From: https://www.cnblogs.com/yuyanc/p/17718723.html

相关文章

  • 日常记录--day7--2023-9月20日--周三
    日程:今天只有上午有节英语课,8点30起床,吃了个早饭去上课。中午小睡一个小时,下午没课,起来学习了一会Javaweb,今天主要学了HTML,自己写了个简单的,晚上7-9点继续javaweb,今天没有力扣。学了什么:Javaweb让人头疼,复习了之前的力扣题,继续学习Javaweb。PS:不想学习,想要成为充电线;......
  • Netfilter日志记录
    iptables-traw-IPREROUTING-ptcp--dport80-jLOG#iptables-traw-IPREROUTING-ptcp--dport80-jLOG--log-level3--log-prefix"ipt-err:" 可以指定log级别日志级别可通过syslog定义进行查看。另外LOG目标还可指定参数:–log-tcp-sequence,–log-tcp-option......
  • Learn Git in 30 days——第 21 天:修正 commit 过的版本历史记录 Part 3
    写的非常好的一个Git系列文章,强烈推荐原文链接:https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-cn在版本控制过程中,还有个常见的状況,那就是当你在一个分支中开发了一段时间,但后来决定整个分支都不要了,不过当中却有几个版本还想留下,这时要删除分支也不是,把......
  • 行车记录仪方案 联发科Mini安卓主板超低功耗
    现代行车记录仪常常存在分辨率不清、死机、卡顿和高功耗等问题,同时价格较高。为了解决这些问题,提出了行车记录仪的新解决方案。新解决方案采用高性能处理器,确保行车记录仪的流畅运行,告别死机问题。新一代高性能运动图像处理器搭配大内存,能够顺畅记录行车过程中的美好瞬......
  • 记录--不要再滥用可选链运算符(?.)啦!
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言可选链运算符(?.),大家都很熟悉了,直接看个例子:constresult=obj?.a?.b?.c?.d很简单例子,上面代码?前面的属性如果是空值(null或undefined),则result值是undefined,反之如果都不是空值,则会返回最后一个d属性......
  • 230920 创记录的亏损 泉阳泉
    今天-2.5,出了泉阳泉,亏损12%左右.模式外的交易,以及凭借主观感觉做交易,导致出现了如此大的亏损.1.模式外你磨刀霍霍,准备低吸,但是,从常山到一众,你选择了看起来跌的很快的泉阳泉.一个主要的观点,就是你前几天认为,它股性好,可能是大跌洗盘,你认为它会复制另外一个个股的走......
  • 记录 小程序调用前置摄像头的数据获取及简单配置
    业务是需要调取前置摄像头之后获取图片上代码wx.chooseMedia({count:1,//只允许上传一张照片 mediaType:['image'],//文件类型sizeType:['original','compressed'],//是否压缩所选文件,original原始compressed压缩......
  • thinkphp上传文件失败的一次记录
    问题出现有用户反映上传图片报网络错误,问题转到开发之后怀疑可能是用户上传的图片比较大导致的错误,后面测试发现在上传8m左右大小的图片的时候就会报错,但是报的错误不是代码里面图片大小验证规则的错误,而是异常捕获的错误,让我很纳闷后来决定先让前端在页面提......
  • 记录小程序 errno":600001,"errMsg":"request:fail -118 报错问题
    "(inpromise)MiniProgramError\n{"errno":600001,"errMsg":"request:fail-118:net::ERR_CONNECTION_TIMED_OUT","data":{"message":"连接服务器失败!","result":"error"}}\nObject"......
  • 贺题记录
    [SDOI2017]遗忘的集合题解【多项式】CF387DGeorgeandInterestingGraph【网络流】网络流题,枚举中心点,贡献拆成“连向中心点”+“连向其他点”,前半部分统计度数直接算,后边部分二分图匹配即可。P4705玩游戏【多项式】列出贡献式子,难算的是\([x^j]A(x)=\sum_{i=1}^na_i......