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

建网站的费用论坛建站哪个比较好

建网站的费用,论坛建站哪个比较好,站长工具官网域名查询,厦门找一家做网站的公司前言 K线图(Candlestick)是金融领域中常用的图表类型,用于展示股票、期货等金融产品的价格变动情况。它能够清晰地显示开盘价、收盘价、最高价和最低价,帮助投资者分析价格趋势和市场情绪。 在本进阶教程中,我们将通过…

前言

K线图(Candlestick)是金融领域中常用的图表类型,用于展示股票、期货等金融产品的价格变动情况。它能够清晰地显示开盘价、收盘价、最高价和最低价,帮助投资者分析价格趋势和市场情绪。在这里插入图片描述

在本进阶教程中,我们将通过5个实战案例,深入学习pyecharts中K线图的高级用法,包括自定义样式、添加技术指标、交互功能实现以及多图表组合等技巧。pyecahts源码

目录

    • 前言
    • 案例一:基础K线图与最大值标记线
      • 代码解析
      • 关键技巧
    • 案例二:K线图与数据缩放功能
      • 代码解析
      • 关键技巧
    • 案例三:自定义数据缩放滑块位置
      • 代码解析
      • 关键技巧
    • 案例四:K线图与移动平均线(MA)的组合
      • 代码解析
      • 关键技巧
    • 案例五:Professional_kline_chart(专业级K线图)
      • 代码解析
      • 关键技巧
    • 总结

案例一:基础K线图与最大值标记线

下面是第一个案例的代码,展示了一个基础的K线图,并添加了最大值标记线:

from pyecharts import options as opts  # 导入配置模块
from pyecharts.charts import Kline     # 导入K线图模块# 准备K线数据,格式为:[开盘价, 收盘价, 最低价, 最高价]
data = [ [2320.26, 2320.26, 2287.3, 2362.94], [2300, 2291.3, 2288.26, 2308.38], [2295.35, 2346.5, 2295.35, 2345.92], [2347.22, 2358.98, 2337.35, 2363.8], [2360.75, 2382.48, 2347.89, 2383.76], [2383.43, 2385.42, 2371.23, 2391.82], [2377.41, 2419.02, 2369.57, 2421.15], [2425.92, 2428.15, 2417.58, 2440.38], [2411, 2433.13, 2403.3, 2437.42], [2432.68, 2334.48, 2427.7, 2441.73], [2430.69, 2418.53, 2394.22, 2433.89], [2416.62, 2432.4, 2414.4, 2443.03], [2441.91, 2421.56, 2418.43, 2444.8], [2420.26, 2382.91, 2373.53, 2427.07], [2383.49, 2397.18, 2370.61, 2397.94], [2378.82, 2325.95, 2309.17, 2378.82], [2322.94, 2314.16, 2308.76, 2330.88], [2320.62, 2325.82, 2315.01, 2338.78], [2313.74, 2293.34, 2289.89, 2340.71], [2297.77, 2313.22, 2292.03, 2324.63], [2322.32, 2365.59, 2308.92, 2366.16], [2364.54, 2359.51, 2330.86, 2369.65], [2332.08, 2273.4, 2259.25, 2333.54], [2274.81, 2326.31, 2270.1, 2328.14], [2333.61, 2347.18, 2321.6, 2351.44], [2340.44, 2324.29, 2304.27, 2352.02], [2326.42, 2318.61, 2314.59, 2333.67], [2314.68, 2310.59, 2296.58, 2320.96], [2309.16, 2286.6, 2264.83, 2333.29], [2282.17, 2263.97, 2253.25, 2286.33], [2255.77, 2270.28, 2253.31, 2276.22], 
]# 创建K线图对象
c = (Kline()# 添加X轴数据,使用日期格式.add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)])# 添加Y轴数据,设置最大值标记线.add_yaxis("kline",data,markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="max", value_dim="close")]),)# 设置全局配置.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True),  # X轴采用自适应刻度yaxis_opts=opts.AxisOpts(is_scale=True,  # Y轴采用自适应刻度splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)),),title_opts=opts.TitleOpts(title="Kline-MarkLine"),  # 设置图表标题)#.render("kline_markline.html")  # 渲染为HTML文件
)
c.render_notebook()  # 在Notebook中显示

代码解析

  1. 数据准备:我们定义了一个包含31天K线数据的列表,每个元素代表一天的[开盘价, 收盘价, 最低价, 最高价]。

  2. 创建K线图对象:通过Kline()函数创建一个K线图实例。

  3. 添加X轴数据:使用列表推导式生成31天的日期数据。

  4. 添加Y轴数据:添加K线数据,并设置markline_opts参数来显示收盘价的最大值标记线。

  5. 设置全局配置

    • xaxis_optsyaxis_opts都设置为is_scale=True,表示采用自适应刻度,使图表更美观。
    • yaxis_opts中还设置了splitarea_opts,用于显示Y轴的分割区域。
    • title_opts用于设置图表标题。
  6. 渲染图表:使用render_notebook()在Jupyter Notebook中显示图表,也可以使用render()方法将图表保存为HTML文件。
    在这里插入图片描述

关键技巧

  • 数据缩放功能DataZoomOpts()为K线图添加了一个底部滑块,用户可以通过拖动滑块来放大或缩小图表的时间范围,查看更详细或更宏观的价格走势。
  • 缩放配置:可以通过DataZoomOpts的参数来自定义缩放功能,例如设置初始缩放范围、是否启用滚动条等。
  • 多缩放器:可以添加多个DataZoomOpts实例,实现不同方向的缩放(水平和垂直)。

这个案例展示了如何为K线图添加交互性的数据缩放功能,使图表更具实用性。接下来我们将继续学习更多高级功能。

案例二:K线图与数据缩放功能

下面是第二个案例的代码,展示了如何为K线图添加数据缩放(DataZoom)功能:

from pyecharts import options as opts
from pyecharts.charts import Klinedata = [[2320.26, 2320.26, 2287.3, 2362.94],[2300, 2291.3, 2288.26, 2308.38],[2295.35, 2346.5, 2295.35, 2345.92],[2347.22, 2358.98, 2337.35, 2363.8],[2360.75, 2382.48, 2347.89, 2383.76],[2383.43, 2385.42, 2371.23, 2391.82],[2377.41, 2419.02, 2369.57, 2421.15],[2425.92, 2428.15, 2417.58, 2440.38],[2411, 2433.13, 2403.3, 2437.42],[2432.68, 2334.48, 2427.7, 2441.73],[2430.69, 2418.53, 2394.22, 2433.89],[2416.62, 2432.4, 2414.4, 2443.03],[2441.91, 2421.56, 2418.43, 2444.8],[2420.26, 2382.91, 2373.53, 2427.07],[2383.49, 2397.18, 2370.61, 2397.94],[2378.82, 2325.95, 2309.17, 2378.82],[2322.94, 2314.16, 2308.76, 2330.88],[2320.62, 2325.82, 2315.01, 2338.78],[2313.74, 2293.34, 2289.89, 2340.71],[2297.77, 2313.22, 2292.03, 2324.63],[2322.32, 2365.59, 2308.92, 2366.16],[2364.54, 2359.51, 2330.86, 2369.65],[2332.08, 2273.4, 2259.25, 2333.54],[2274.81, 2326.31, 2270.1, 2328.14],[2333.61, 2347.18, 2321.6, 2351.44],[2340.44, 2324.29, 2304.27, 2352.02],[2326.42, 2318.61, 2314.59, 2333.67],[2314.68, 2310.59, 2296.58, 2320.96],[2309.16, 2286.6, 2264.83, 2333.29],[2282.17, 2263.97, 2253.25, 2286.33],[2255.77, 2270.28, 2253.31, 2276.22],
]c = (Kline().add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]).add_yaxis("kline", data).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="Kline-DataZoom-slider"),)#.render("kline_datazoom_slider.html")
)
c.render_notebook()

代码解析

  1. 数据准备:与案例一相同,我们使用了31天的K线数据。

  2. 创建K线图对象:通过Kline()函数创建一个K线图实例。

  3. 添加X轴和Y轴数据:与案例一类似,但没有添加最大值标记线。

  4. 设置全局配置

    • xaxis_optsyaxis_opts保持与案例一相同的配置。
    • 添加了datazoom_opts=[opts.DataZoomOpts()],这是本案例的核心,启用了数据缩放功能。
    • 设置了图表标题为"Kline-DataZoom-slider"。
      在这里插入图片描述

关键技巧

  • 数据缩放功能DataZoomOpts()为K线图添加了一个底部滑块,用户可以通过拖动滑块来放大或缩小图表的时间范围,查看更详细或更宏观的价格走势。
  • 缩放配置:可以通过DataZoomOpts的参数来自定义缩放功能,例如设置初始缩放范围、是否启用滚动条等。
  • 多缩放器:可以添加多个DataZoomOpts实例,实现不同方向的缩放(水平和垂直)。

这个案例展示了如何为K线图添加交互性的数据缩放功能,使图表更具实用性。接下来我们将继续学习更多高级功能。

案例三:自定义数据缩放滑块位置

下面是第三个案例的代码,展示了如何自定义数据缩放滑块的位置:

from pyecharts import options as opts
from pyecharts.charts import Klinedata = [[2320.26, 2320.26, 2287.3, 2362.94],[2300, 2291.3, 2288.26, 2308.38],[2295.35, 2346.5, 2295.35, 2345.92],[2347.22, 2358.98, 2337.35, 2363.8],[2360.75, 2382.48, 2347.89, 2383.76],[2383.43, 2385.42, 2371.23, 2391.82],[2377.41, 2419.02, 2369.57, 2421.15],[2425.92, 2428.15, 2417.58, 2440.38],[2411, 2433.13, 2403.3, 2437.42],[2432.68, 2334.48, 2427.7, 2441.73],[2430.69, 2418.53, 2394.22, 2433.89],[2416.62, 2432.4, 2414.4, 2443.03],[2441.91, 2421.56, 2418.43, 2444.8],[2420.26, 2382.91, 2373.53, 2427.07],[2383.49, 2397.18, 2370.61, 2397.94],[2378.82, 2325.95, 2309.17, 2378.82],[2322.94, 2314.16, 2308.76, 2330.88],[2320.62, 2325.82, 2315.01, 2338.78],[2313.74, 2293.34, 2289.89, 2340.71],[2297.77, 2313.22, 2292.03, 2324.63],[2322.32, 2365.59, 2308.92, 2366.16],[2364.54, 2359.51, 2330.86, 2369.65],[2332.08, 2273.4, 2259.25, 2333.54],[2274.81, 2326.31, 2270.1, 2328.14],[2333.61, 2347.18, 2321.6, 2351.44],[2340.44, 2324.29, 2304.27, 2352.02],[2326.42, 2318.61, 2314.59, 2333.67],[2314.68, 2310.59, 2296.58, 2320.96],[2309.16, 2286.6, 2264.83, 2333.29],[2282.17, 2263.97, 2253.25, 2286.33],[2255.77, 2270.28, 2253.31, 2276.22],
]c = (Kline().add_xaxis(["2017/7/{}".format(i + 1) for i in range(31)]).add_yaxis("kline", data).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="-2%")],title_opts=opts.TitleOpts(title="Kline-DataZoom-slider-Position"),)#.render("kline_datazoom_slider_position.html")
)
c.render_notebook()

代码解析

  1. 数据准备:与前两个案例相同,我们使用了31天的K线数据。

  2. 创建K线图对象:通过Kline()函数创建一个K线图实例。

  3. 添加X轴和Y轴数据:与前两个案例类似。

  4. 设置全局配置

    • xaxis_optsyaxis_opts保持与前两个案例相同的配置。
    • datazoom_opts中添加了pos_bottom="-2%"参数,这是本案例的核心,用于自定义数据缩放滑块的位置。
    • 设置了图表标题为"Kline-DataZoom-slider-Position"。
      在这里插入图片描述

关键技巧

  • 自定义滑块位置:通过pos_bottom参数可以调整数据缩放滑块的垂直位置,负值表示超出图表底部边界。
  • 其他位置参数:除了pos_bottom,还可以使用pos_toppos_leftpos_right等参数来调整滑块的位置。
  • 滑块样式:可以通过DataZoomOpts的其他参数来自定义滑块的样式,如颜色、高度等。

这个案例展示了如何自定义数据缩放滑块的位置,使图表布局更加灵活。接下来我们将继续学习更多高级功能。

案例四:K线图与移动平均线(MA)的组合

下面是第四个案例的代码,展示了如何将K线图与移动平均线组合:

import requests
import json
from pyecharts import options as opts
from pyecharts.charts import Kline, Line, Bar, Grid
from pyecharts.commons.utils import JsCode
from typing import List, Union, Dict, Any# 获取数据
# 注意:这里的API链接可能会失效,实际使用时请替换为有效的数据源
url = 'https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1d&limit=30'
response = requests.get(url)
origin_data = json.loads(response.text)# 数据处理函数
def split_data(origin_data: List[List[Any]]) -> Dict[str, Any]:datas = []times = []vols = []macds = []difs = []deas = []for item in origin_data:# 时间处理times.append(item[0])# K线数据处理datas.append([float(item[1]), float(item[4]), float(item[3]), float(item[2])])# 成交量处理vols.append(float(item[5]))return {"datas": datas,"times": times,"vols": vols,"macds": macds,"difs": difs,"deas": deas}def split_data_part():mark_line_data = []idx = 0vols = 0for i in range(len(data["times"])):if i % 10 == 0 and i != 0:mark_line_data.append([{"xAxis": idx,"yAxis": float("%.2f" % data["datas"][idx][3])if data["datas"][i][1] > data["datas"][i][0]else float("%.2f" % data["datas"][i][2]),"value": str(float("%.2f" % (vols / (i - idx + 1)))) + " M",},{"xAxis": i,"yAxis": float("%.2f" % data["datas"][i][3])if data["datas"][i][1] > data["datas"][i][0]else float("%.2f" % data["datas"][i][2]),},])idx = ivols = data["datas"][i][4] if len(data["datas"][i]) > 4 else 0return mark_line_data# 计算移动平均线
def calculate_ma(day_count: int, data_datas: List[List[float]]) -> List[Union[float, str]]:result: List[Union[float, str]] = []for i in range(len(data_datas)):if i < day_count:result.append("-")continuesum_total = 0.0for j in range(day_count):sum_total += float(data_datas[i - j][1])result.append(abs(float("%.2f" % (sum_total / day_count))))return result# 主函数
def main():global datadata = split_data(origin_data=origin_data)draw_charts()# 绘制图表
def draw_charts():# K线图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="最小值"),]),).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),],))# 移动平均线图line = (Line().add_xaxis(xaxis_data=data["times"]).add_yaxis(series_name="MA5",y_axis=calculate_ma(day_count=5, data_datas=data["datas"]),is_smooth=True,linestyle_opts=opts.LineStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA10",y_axis=calculate_ma(day_count=10, data_datas=data["datas"]),is_smooth=True,linestyle_opts=opts.LineStyleOpts(opacity=0.5),label_opts=opts.LabelOpts(is_show=False),).add_yaxis(series_name="MA20",y_axis=calculate_ma(day_count=20, data_datas=data["datas"]),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",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),),))# 叠加K线图和移动平均线图overlap_kline_line = kline.overlap(line)# 成交量柱状图bar = (Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(series_name="成交量",y_axis=data["vols"],xaxis_index=1,yaxis_index=1,label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""function(params) {var colorList;if (params.dataIndex < data.datas.length && data.datas[params.dataIndex][1] > data.datas[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),))# 组合图表grid_chart = Grid()grid_chart.add_js_funcs("var data = {}".format(json.dumps(data)))# 添加K线图和移动平均线图grid_chart.add(overlap_kline_line,grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", height="60%"),)# 添加成交量柱状图grid_chart.add(bar,grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="71%", height="16%"),)grid_chart.render("kline_with_ma.html")if __name__ == "__main__":main()

代码解析

  1. 数据获取:通过requests库从网络API获取比特币USD价格数据,并通过split_data函数解析数据。

  2. 移动平均线计算calculate_ma函数用于计算指定天数的移动平均线,这里我们计算了5日、10日和20日移动平均线。

  3. K线图创建:创建K线图并设置自定义样式,包括涨跌颜色区分和最大值/最小值标记点。

  4. 移动平均线图创建:创建线图来显示5日、10日和20日移动平均线,使用不同颜色区分。

  5. 成交量柱状图创建:创建柱状图来显示成交量数据,并使用JavaScript代码根据涨跌情况自定义颜色。

  6. 图表组合:使用overlap方法将K线图和移动平均线图叠加,然后使用Grid组件将叠加后的图表与成交量柱状图组合在一起,形成一个完整的分析图表。
    在这里插入图片描述

关键技巧

  • 数据获取:通过网络API获取实时数据,可以使图表内容更加丰富和实用。
  • 移动平均线:移动平均线是技术分析中的重要指标,可以帮助识别价格趋势。
  • 多图表组合:使用Grid组件可以将多个图表组合在一起,提供更全面的分析视角。
  • 自定义样式:可以通过itemstyle_opts参数自定义K线和柱状图的颜色、边框等样式。
  • 数据缩放:添加多个DataZoomOpts实例,实现内部缩放和外部滑块缩放两种方式。

这个案例展示了如何创建一个功能完整的金融分析图表,结合了K线图、移动平均线和成交量数据,非常适合用于股票、期货等金融产品的技术分析。

案例五:Professional_kline_chart(专业级K线图)

下面是第五个案例的代码,展示了如何创建一个功能完整的专业级K线图:

#数据字典省略
def split_data(origin_data) -> dict:datas = []times = []vols = []macds = []difs = []deas = []for i in range(len(origin_data)):datas.append(origin_data[i][1:])times.append(origin_data[i][0:1][0])vols.append(origin_data[i][5])macds.append(origin_data[i][7])difs.append(origin_data[i][8])deas.append(origin_data[i][9])vols = [int(v) for v in vols]return {"datas": datas,"times": times,"vols": vols,"macds": macds,"difs": difs,"deas": deas,}def split_data_part() -> Sequence:mark_line_data = []idx = 0tag = 0vols = 0for i in range(len(data["times"])):if data["datas"][i][5] != 0 and tag == 0:idx = ivols = data["datas"][i][4]tag = 1if tag == 1:vols += data["datas"][i][4]if data["datas"][i][5] != 0 or tag == 1:mark_line_data.append([{"xAxis": idx,"yAxis": float("%.2f" % data["datas"][idx][3])if data["datas"][idx][1] > data["datas"][idx][0]else float("%.2f" % data["datas"][idx][2]),"value": vols,},{"xAxis": i,"yAxis": float("%.2f" % data["datas"][i][3])if data["datas"][i][1] > data["datas"][i][0]else float("%.2f" % data["datas"][i][2]),},])idx = ivols = data["datas"][i][4]tag = 2if tag == 2:vols += data["datas"][i][4]if data["datas"][i][5] != 0 and tag == 2:mark_line_data.append([{"xAxis": idx,"yAxis": float("%.2f" % data["datas"][idx][3])if data["datas"][i][1] > data["datas"][i][0]else float("%.2f" % data["datas"][i][2]),"value": str(float("%.2f" % (vols / (i - idx + 1)))) + " M",},{"xAxis": i,"yAxis": float("%.2f" % data["datas"][i][3])if data["datas"][i][1] > data["datas"][i][0]else float("%.2f" % data["datas"][i][2]),},])idx = ivols = data["datas"][i][4]return mark_line_datadef calculate_ma(day_count: int):result: List[Union[float, str]] = []for i in range(len(data["times"])):if i < day_count:result.append("-")continuesum_total = 0.0for j in range(day_count):sum_total += float(data["datas"][i - j][1])result.append(abs(float("%.2f" % (sum_total / day_count))))return resultdef 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=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=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",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 + Lineoverlap_kline_line = kline.overlap(kline_line)# Bar-1bar_1 = (Bar().add_xaxis(xaxis_data=data["times"]).add_yaxis(series_name="Volumn",y_axis=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",y_axis=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="DIF",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)))# 最下面的柱状图和折线图overlap_bar_line = bar_2.overlap(line_2)# 最后的 Gridgrid_chart = Grid()# 这个是为了把 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="3%", pos_right="1%", height="60%"),)# Volumn 柱状图grid_chart.add(bar_1,grid_opts=opts.GridOpts(pos_left="3%", pos_right="1%", pos_top="71%", height="10%"),)# MACD DIFS DEASgrid_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")if __name__ == "__main__":data = split_data(origin_data=echarts_data)draw_chart()

代码解析

  1. 数据获取与处理:通过get_data函数从网络API获取道琼斯指数数据,并通过split_data函数解析数据。

  2. 技术指标计算:计算了多种技术指标,包括移动平均线(MA5、MA10、MA20、MA30)和MACD指标(DIF、DEA、MACD)。

  3. K线图创建:创建K线图并设置自定义样式,包括涨跌颜色区分。

  4. 移动平均线图创建:创建线图来显示不同周期的移动平均线,使用不同颜色区分。

  5. 成交量柱状图创建:创建柱状图来显示成交量数据,并使用JavaScript代码自定义颜色。

  6. MACD指标图创建:创建MACD柱状图和线图,展示DIF、DEA和MACD数据。

  7. 图表叠加与组合:使用overlap方法将K线图和移动平均线图叠加,将MACD线图和柱状图叠加,然后使用Grid组件将所有图表组合在一起,形成一个完整的专业级分析图表。
    在这里插入图片描述

关键技巧

  • 多技术指标整合:同时展示K线图、移动平均线和MACD指标,提供更全面的分析视角。
  • JavaScript代码自定义:使用JsCode自定义柱状图颜色,根据数据值动态设置颜色。
  • 高级图表布局:使用Grid组件创建多层次的图表布局,优化空间利用。
  • 交互功能增强:添加数据缩放、Brush工具和联动提示框,提升用户体验。
  • 性能优化:关闭动画效果,提高图表渲染速度。

这个案例展示了如何创建一个功能完整的专业级K线图分析工具,整合了多种技术指标和交互功能,非常适合用于专业的金融分析工作。

总结

通过以上五个案例,我们系统学习了pyecharts中K线图的从入门到精通的使用方法,涵盖了以下核心知识点和技巧:

  1. 基础K线图创建:掌握了K线图的基本结构和数据格式,以及如何添加标记线和自定义样式。

  2. 数据缩放功能:学会了如何为K线图添加数据缩放滑块,以及如何自定义滑块的位置和样式。

  3. 多图表组合:掌握了如何将K线图与移动平均线、成交量柱状图和MACD指标图组合,创建综合分析图表。

  4. 技术指标计算:学会了如何计算移动平均线(MA)和MACD等常用技术指标,并将其可视化。

  5. 高级交互功能:掌握了如何添加数据缩放、联动提示框等交互功能,提升用户体验。

  6. 自定义样式:学会了如何使用JavaScript代码自定义图表元素的样式,实现更丰富的视觉效果。

  7. 数据获取与处理:掌握了如何从网络API获取实时数据,并进行预处理和解析。

这些技巧不仅可以帮助你创建功能强大、交互友好的金融分析图表,还可以应用到其他类型的数据分析可视化任务中。在实际应用中,你可以根据具体需求灵活组合这些技巧,创建出更具个性化的图表。

pyecharts作为一个功能丰富的可视化库,还有很多其他强大的功能和图表类型值得探索。希望本教程能够帮助你快速掌握K线图的高级用法,并在实际项目中发挥作用。祝你在数据可视化的道路上越走越远!
``

http://www.dtcms.com/a/455934.html

相关文章:

  • 网站信息内容建设自查报告泸州做网站
  • 重庆商城网站建设公司wordpress 跳转插件
  • 简约、时尚、高端 网站建设专业优化网站排名
  • 西安网站建设招商虚拟网站源码
  • 东莞做网站哪家好正规的镇江网站建设
  • 做网站的成本哪些因素营销网站权重
  • 网站首页面设计代码wordpress插件随机文章
  • 唯美谷智能网站建设系统营销网站主题有哪些
  • 做网站需要先申请域名获取网站目录下所有文件
  • o2o系统网站建设电子商务作业做网站
  • asp技校网站wordpress单选框
  • 做ic的电子网站有哪些黄页88网官网首页
  • 青岛网站设计价格网页升级紧急通知怎么取消
  • python做网站的书建设一个网站需要哪些方面的开支
  • 如皋市网站建设潍坊网站公司网络科技
  • 网站建设7茶叶企业网站开发源码
  • 网站框架图怎么做WordPress付费阅读文章
  • 产品微信网站建设wordpress 导出export.php
  • 长沙专业网站建设公司成都锐度设计公司怎么样
  • 做网站推广贵阳企业网站模板
  • 台州网站排名外包有没有专门做渔具的网站
  • 河南省住房城乡建设厅官方网站淄博制作网站的公司
  • 衡阳城乡建设部网站首页建设旅游网站
  • 烟台网站制作厂家联系方式私人做网站要多少钱
  • 做电影网站不放国内主机wordpress 重复插件
  • 专业做装修的网站网页设计怎么让图片横向填满
  • 做公司网站的企业灰色行业推广平台网站
  • 怎么建小说网站成品软件网站推荐
  • o2o电商网站建设电商哪个岗位最吃香
  • 黄骅广信建设集团网站wordpress帖子打赏观看