
请先阅读python生成基金净值周K线数据pip install pyecharts1.9.1pip show pyechartspyecharts-1.9.1-py3-none-any.whl我想在本地PC) 画出 基金净值 周K线图不想每次看图都需联网。cd my_dirmkdir echartscd echartscurl -O https://assets.pyecharts.org/assets/echarts.min.js修改一下开源代码cd \Python38\Lib\site-packages \pyecharts\ 编辑 globals.py 第125行class _OnlineHost:DEFAULT_HOST “https://assets.pyecharts.org/assets/”改为 DEFAULT_HOST “./echarts/”kline_w.py 修改说明原代码只有一条 mavg现在新增 MA25半年均线、MA50一年均线两条移动均线。逻辑原csv字段ym,open,close,low,high,mavg注意原文件没有ma25、ma50字段这里采用收盘价滚动计算MA25、MA50MA25最近25根K线收盘价均值MA50最近50根K线收盘价均值均线不足周期时填Nonepyecharts会自动断开线条增加两条Line叠加到K线图区分颜色保持原有命令行参数、文件读写、输出逻辑不变兼容 python3.7 pyecharts1.9.1。# codingutf-8importos,sysfrompyechartsimportoptionsasoptsfrompyecharts.chartsimportKline,Lineiflen(sys.argv)2:fcodesys.argv[1]file1Wfcode.csvfile2Wfcode.htmeliflen(sys.argv)3:fcodesys.argv[1]file1Wfcode_sys.argv[2].csvfile2Wfcode_sys.argv[2].htmelse:print(usage: kline_w.py fcode )sys.exit(1)iflen(fcode)!6:print( fcode is char(6))sys.exit(2)path./data/ifnotos.path.exists(pathfile1):print(file1 is not exists.)sys.exit(3)# 数据项: [open,close,low,high,mavg]# 即[开盘值,收盘值,最低值,最高值,平均值]clist[]# 原mavgxlist[]ylist[]close_list[]# 保存收盘价用于计算MA25 MA50fropen(pathfile1,r)fr.readline()# 跳过第1行表头: ym,open,close,low,high,mavgforlineinfr:lineline.strip()ifnotline:continueym,open,close,low,high,mavgline.split(,)xlist.append(ym)clist.append(float(mavg))ylist.append([float(open),float(close),float(low),float(high)])close_list.append(float(close))fr.close()print(str(len(xlist)))# 计算MA25 MA50 移动均线 ma25_list[]ma50_list[]foriinrange(len(close_list)):# MA25ifi24:window25close_list[i-24:i1]ma25sum(window25)/len(window25)ma25_list.append(round(ma25,4))else:ma25_list.append(None)# MA50ifi49:window50close_list[i-49:i1]ma50sum(window50)/len(window50)ma50_list.append(round(ma50,4))else:ma50_list.append(None)# iflen(sys.argv)2:titlefcode 基金净值 周K线图eliflen(sys.argv)3:titlefcode 累计净值 周K线图# 创建一个K线图实例klineKline(init_optsopts.InitOpts(width1200px,height600px))# 设置x轴的数据kline.add_xaxis(xlist)# 设置y轴的数据这里的 kline 是系列名称data 是K线图的数据kline.add_yaxis(kline,ylist)# 设置全局配置项包括x轴、y轴、标题等配置kline.set_global_opts(xaxis_optsopts.AxisOpts(is_scaleTrue),# 设置x轴的刻度是否自适应yaxis_optsopts.AxisOpts(is_scaleTrue,splitarea_optsopts.SplitAreaOpts(is_showTrue,areastyle_optsopts.AreaStyleOpts(opacity1))),datazoom_opts[opts.DataZoomOpts()],title_optsopts.TitleOpts(titletitle),# 设置标题)# 原平均线 mavgline1Line().add_xaxis(xlist).add_yaxis(mavg,clist,yaxis_index0)line1.set_series_opts(label_optsopts.LabelOpts(is_showFalse),linestyle_optsopts.LineStyleOpts(width1),)kline.overlap(line1)# 新增 MA25line_ma25Line().add_xaxis(xlist).add_yaxis(MA25,ma25_list,yaxis_index0)line_ma25.set_series_opts(label_optsopts.LabelOpts(is_showFalse),linestyle_optsopts.LineStyleOpts(width1.5,color#ff4444))kline.overlap(line_ma25)# 新增 MA50line_ma50Line().add_xaxis(xlist).add_yaxis(MA50,ma50_list,yaxis_index0)line_ma50.set_series_opts(label_optsopts.LabelOpts(is_showFalse),linestyle_optsopts.LineStyleOpts(width1.5,color#22bb22))kline.overlap(line_ma50)kline.render(path./html/file2)关键点说明周期说明周KMA2525周均线MA5050周均线不足25/50根数据时值为None图表线条会自动断开这是pyecharts正常行为均线是用收盘价滚动窗口计算兼容 pyecharts 1.9.1、python3.7原有mavg保留颜色mavg默认蓝色MA25红色#ff4444MA50绿色#22bb22如果你希望csv里直接读取ma25、ma50字段而不是程序计算如果你的csv表头变成ym,open,close,low,high,mavg,ma25,ma50把计算MA的整块代码删掉读取时直接解析字段ym,open,close,low,high,mavg,ma25,ma50line.strip().split(,)xlist.append(ym)clist.append(float(mavg))ma25_list.append(float(ma25))ma50_list.append(float(ma50))ylist.append([float(open),float(close),float(low),float(high)])运行方式不变python kline_w.py660008如果采用 mavg 数值滚动计算 MA25、MA50如何改写脚本需求变更不再用close收盘价计算MA25/MA50改用原始字段mavg做滚动窗口计算MA25、MA50。窗口MA25取最近25个mavg值求平均MA50取最近50个mavg值求平均数据不足周期填Nonepyecharts线条自动断开其他全部逻辑不变命令行、文件读写、pyecharts1.9.1 / python3.7兼容保留原有mavg均线。# codingutf-8importos,sysfrompyechartsimportoptionsasoptsfrompyecharts.chartsimportKline,Lineiflen(sys.argv)2:fcodesys.argv[1]file1Wfcode.csvfile2Wfcode.htmeliflen(sys.argv)3:fcodesys.argv[1]file1Wfcode_sys.argv[2].csvfile2Wfcode_sys.argv[2].htmelse:print(usage: kline_w.py fcode )sys.exit(1)iflen(fcode)!6:print( fcode is char(6))sys.exit(2)path./data/ifnotos.path.exists(pathfile1):print(file1 is not exists.)sys.exit(3)# 数据项: [open,close,low,high,mavg]# 即[开盘值,收盘值,最低值,最高值,平均值]clist[]# 原始mavg 序列用于绘图计算MA25 MA50xlist[]ylist[]fropen(pathfile1,r)fr.readline()# 跳过第1行表头: ym,open,close,low,high,mavgforlineinfr:lineline.strip()ifnotline:continueym,open,close,low,high,mavgline.split(,)xlist.append(ym)mavg_valfloat(mavg)clist.append(mavg_val)ylist.append([float(open),float(close),float(low),float(high)])fr.close()print(str(len(xlist)))# 使用 mavg 滚动计算 MA25、MA50 ma25_list[]ma50_list[]total_cntlen(clist)foriinrange(total_cnt):# MA25取当前以及前面共25个mavgifi24:win25clist[i-24:i1]ma25sum(win25)/len(win25)ma25_list.append(round(ma25,4))else:ma25_list.append(None)# MA50取当前以及前面共50个mavgifi49:win50clist[i-49:i1]ma50sum(win50)/len(win50)ma50_list.append(round(ma50,4))else:ma50_list.append(None)# iflen(sys.argv)2:titlefcode 基金净值 周K线图eliflen(sys.argv)3:titlefcode 累计净值 周K线图# 创建一个K线图实例klineKline(init_optsopts.InitOpts(width1200px,height600px))# 设置x轴的数据kline.add_xaxis(xlist)# 设置y轴的数据这里的 kline 是系列名称data 是K线图的数据kline.add_yaxis(kline,ylist)# 设置全局配置项包括x轴、y轴、标题等配置kline.set_global_opts(xaxis_optsopts.AxisOpts(is_scaleTrue),# 设置x轴的刻度是否自适应yaxis_optsopts.AxisOpts(is_scaleTrue,splitarea_optsopts.SplitAreaOpts(is_showTrue,areastyle_optsopts.AreaStyleOpts(opacity1))),datazoom_opts[opts.DataZoomOpts()],title_optsopts.TitleOpts(titletitle),# 设置标题)# 原始mavg均线line1Line().add_xaxis(xlist).add_yaxis(mavg,clist,yaxis_index0)line1.set_series_opts(label_optsopts.LabelOpts(is_showFalse),linestyle_optsopts.LineStyleOpts(width1),)kline.overlap(line1)# MA25基于mavg滚动红色line_ma25Line().add_xaxis(xlist).add_yaxis(MA25,ma25_list,yaxis_index0)line_ma25.set_series_opts(label_optsopts.LabelOpts(is_showFalse),linestyle_optsopts.LineStyleOpts(width1.5,color#ff4444))kline.overlap(line_ma25)# MA50基于mavg滚动绿色line_ma50Line().add_xaxis(xlist).add_yaxis(MA50,ma50_list,yaxis_index0)line_ma50.set_series_opts(label_optsopts.LabelOpts(is_showFalse),linestyle_optsopts.LineStyleOpts(width1.5,color#22bb22))kline.overlap(line_ma50)kline.render(path./html/file2)关键改动点说明不再读取close_list收盘价数组直接拿clist全部mavg数值序列作为滚动计算数据源。窗口逻辑i 24下标从0开始第25条数据下标24取切片clist[i‑24:i1]共25个mavg求平均得到MA25i 49取切片clist[i‑49:i1]共50个mavg求平均得到MA50前面不足周期的位置填充Nonepyecharts渲染时线条自动断开。图表上一共三条线mavg原始均线MA25基于mavg的25周期均线红色MA50基于mavg的50周期均线绿色运行命令不变python kline_w.py660008