写点什么

『Plotly 实战指南』-- 在金融数据可视化中的应用(上)

  • 2025-05-07
    福建
  • 本文字数:2696 字

    阅读完需:约 9 分钟

在当今复杂多变的金融市场中,金融数据分析的重要性不言而喻。


无论是投资者、金融机构还是研究人员,都需要通过对海量金融数据的分析来洞察市场趋势、评估风险并做出明智的决策。


据彭博社统计,专业投资者平均需要处理超过 200 组不同维度的市场数据。


传统静态图表已难以满足现代金融分析的深度需求,而交互式可视化工具正成为量化交易员和金融分析师的新标配。


Plotly凭借其三重核心优势崭露头角:

  1. 沉浸式交互体验:支持坐标轴缩放/平移/悬停查看数据点

  2. 动态响应机制:可实时绑定数据更新与图表刷新

  3. 全平台兼容性:生成的图表能无缝嵌入 Jupyter Notebook/Dash 应用/Web 页面


本文的主要目标是探讨如何利用Plotly高效实现金融数据的可视化与分析。


1. 股票 K 线图


股票 K 线图是股票市场分析中最常用且最重要的图表之一,它能够直观地展示股票价格在一定时间内的波动情况。


Plotly提供了plotly.graph_objects.Candlestick方法,可以方便地绘制 K 线图


首先,我们创建一些模拟 K 线的数据:


import pandas as pdimport numpy as npfrom datetime import datetime, timedelta

def generate_k_line_data(num_days): # 初始化日期列表 start_date = datetime.now() dates = [start_date + timedelta(days=i-num_days/2) for i in range(num_days)]
# 初始化价格和成交量 open_prices = np.random.uniform(100, 200, num_days) high_prices = open_prices + np.random.uniform(0, 10, num_days) low_prices = open_prices - np.random.uniform(0, 10, num_days) close_prices = np.random.uniform(low_prices, high_prices) volumes = np.random.randint(10000, 100000, num_days)
# 创建 DataFrame data = { 'Date': dates, 'Open': open_prices, 'High': high_prices, 'Low': low_prices, 'Close': close_prices, 'Volume': volumes } df = pd.DataFrame(data) return df
复制代码


使用函数generate_k_line_data,创建 60 条测试数据。


data = generate_k_line_data(60)data.head()
复制代码



有了数据,Plotly绘制 K 线图很方便:


import plotly.graph_objects as go
fig = go.Figure( data=[ go.Candlestick( x=data["Date"], open=data["Open"], high=data["High"], low=data["Low"], close=data["Close"], ) ])
fig.update_layout( title="股票 K 线图", xaxis_title="日期", yaxis_title="价格", xaxis_rangeslider_visible=False,)
fig.show()
复制代码



其中红色绿色分别表示涨跌的 K 线。


2. 叠加技术指标


除了基本的 K 线图外,技术指标的添加能够为股票走势分析提供更丰富的信息。


例如,移动平均线(MA)、MACD 和 RSI 等常用技术指标可以通过Plotlyadd_trace方法叠加到 K 线图上。


以下是结合移动平均线RSI指标的代码示例:


# 计算移动平均线data["MA5"] = data["Close"].rolling(window=5).mean()data["MA10"] = data["Close"].rolling(window=10).mean()
# 计算 RSI 指标delta = data["Close"].diff()gain = (delta.where(delta > 0, 0)).rolling(window=4).mean()loss = (-delta.where(delta < 0, 0)).rolling(window=4).mean()rs = gain / lossdata["RSI"] = 100 - (100 / (1 + rs))
# 绘制 K 线图并叠加移动平均线fig = go.Figure( data=[ go.Candlestick( x=data["Date"], open=data["Open"], high=data["High"], low=data["Low"], close=data["Close"], ) ])
fig.add_trace(go.Scatter(x=data["Date"], y=data["MA5"], mode="lines", name="MA5"))fig.add_trace(go.Scatter(x=data["Date"], y=data["MA10"], mode="lines", name="MA10"))
# 绘制 RSI 指标图fig.add_trace( go.Scatter(x=data["Date"], y=data["RSI"], mode="lines", name="RSI", yaxis="y2"))
fig.update_layout( title="股票 K 线图与技术指标", xaxis_title="日期", yaxis_title="价格", yaxis2=dict(title="RSI", overlaying="y", side="right"), xaxis_rangeslider_visible=False,)
fig.show()
复制代码



在上述代码中,我们首先计算了 5 日和 10 日移动平均线,并将其作为新的列添加到数据中。


接着,我们计算了 RSI 指标,并将其绘制在与 K 线图共享 x 轴右侧 y 轴上。


通过add_trace方法,我们可以将多个技术指标叠加到 K 线图上,从而更全面地分析股票走势。


3. 成交量加 K 线组合图


成交量是股票市场分析中的一个重要指标,它反映了市场的活跃程度。


成交量柱状图与 K 线图组合展示,可以更直观地观察价格与成交量之间的关系。


Plotly的子图功能允许我们将多个图表组合在一起,并实现多图联动的效果。


通过共享 x 轴,我们可以确保 K 线图成交量柱状图在时间上保持一致。


以下是使用子图实现多图联动的代码示例:


from plotly.subplots import make_subplots
# 创建子图fig = make_subplots( rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.4, subplot_titles=("K 线图", "成交量"),)
# 绘制 K 线图fig.add_trace( go.Candlestick( x=data["Date"], open=data["Open"], high=data["High"], low=data["Low"], close=data["Close"], ), row=1, col=1,)
# 绘制成交量柱状图fig.add_trace(go.Bar(x=data["Date"], y=data["Volume"], name="成交量"), row=2, col=1)
fig.show()
复制代码



4. 成交量颜色


最后,再做一个改进,给成交量柱状图加上颜色,让它和 K 线图一样反应涨跌情况。


# 绘制成交量柱状图并根据涨跌设置颜色fig.add_trace(    go.Bar(        x=data["Date"],        y=data["Volume"],        name="成交量",        marker_color=np.where(data["Close"] > data["Open"], "green", "red"),    ),    row=2,    col=1,)
复制代码


只要修改上一节代码中添加成交量柱状图的那一段代码即可。



5. 总结


本文我们深入探讨了Plotly在金融数据可视化中的应用,重点展示了如何逐步利用 Plotly 绘制股票走势分析图表。


Plotly的核心价值在于其高效性、灵活性和强大的交互性,这些特性使其成为金融领域中不可或缺的数据可视化工具。


最后,希望大家能够多动手实践,将所学知识应用到实际的金融数据分析中。


文章转载自:wang_yb

原文链接:https://www.cnblogs.com/wang_yb/p/18857326

体验地址:http://www.jnpfsoft.com/?from=001YH

用户头像

还未添加个人签名 2025-04-01 加入

还未添加个人简介

评论

发布
暂无评论
『Plotly实战指南』--在金融数据可视化中的应用(上)_Python_量贩潮汐·WholesaleTide_InfoQ写作社区